十念 发表于 2024-10-25 20:17:03

[GFCTF 2021]wordy的write up

开启靶场,下载附件,解压之后得到:

https://img-blog.csdnimg.cn/img_convert/328bc8a7eb0a521c3b84371234364da6.png
打开wordy文件发现是一堆乱码:

https://img-blog.csdnimg.cn/img_convert/2aba443d01c7a96b053232ff59486421.png
但是前面是个ELF头,很显着的二进制文件:

https://img-blog.csdnimg.cn/img_convert/6f1d622a8d10c9d4c03cbbc8d879880e.png
放到kali中跑一下看看什么情况:

https://img-blog.csdnimg.cn/img_convert/a8f5a57ad3f9f7baaa3ecddc5e7ac536.png
呃呃,权限不敷,看来照旧得逆向哈
用Exeinfo PE查一下,发现无壳:

https://img-blog.csdnimg.cn/img_convert/9b8203df8ac77349643720099387b187.png
用IDA打开
shift+F12:

https://img-blog.csdnimg.cn/img_convert/793f41bd244fc99311ab1718a7acb25a.png
发现没有关键词flag
那就随便点一个,往下拉拉到main函数的地方,发现有花指令:

https://img-blog.csdnimg.cn/img_convert/343c99b608d24414469cd5e65de4e45b.png
可以看到标红的这段有一段代码

https://img-blog.csdnimg.cn/img_convert/1e94f682ccfa670d9ac2635be80405be.png
这是一种常见的花指令
什么是花指令?
一句话概括就是构造一个恒成立条件跳转,并在中心塞一段七零八落的数据
打开Script command

https://img-blog.csdnimg.cn/img_convert/c4035ebf81ad9ad1746593e6ee31d1e2.png

https://img-blog.csdnimg.cn/img_convert/d57bd9875dd06427790ef80041dc4d0c.png
startaddr=0x1135
endaddr=0x3100
for i in range(startaddr,endaddr):
    if get_wide_byte(i)==0xEB:
      if get_wide_byte(i+1)==0xFF:
            patch_byte(i,0x90) 这段脚本会遍历从startaddr到endaddr范围内的字节,查抄是否有连续的0xEB 0xFF字节序列,并将其替换为0x90。90也就是nop的机器码,以达到去除花指令的目的
运行之后,页面发生变革,仔细观察可以看到竖着的GFCTF{这种显着的flag格式:

https://img-blog.csdnimg.cn/img_convert/2bdd28a18179e6c263c221bb097c35e9.png
成功得到flag:
GFCTF{u_are2wordy}
改成NSSCTF的格式:
NSSCTF{u_are2wordy}
总结一下思路:
用IDA打开之后,页面如下:

https://img-blog.csdnimg.cn/img_convert/378402d2f8a80e65f4c3ea8015ca52c7.png
shift+F12进入Strings标签:

https://img-blog.csdnimg.cn/img_convert/c0c5c112fb31b42e30f426397f339757.png
随便点一个就行,由于都找不到关键词flag和main
本题的花指令就在main函数内,导致其无法被IDA辨认,也就无法从函数窗口搜刮

https://img-blog.csdnimg.cn/img_convert/c4dd0a369947e8872847fe05db03cfe7.png
此时须要使用【内存数据搜刮法】,在IDA中使用菜单栏的搜刮项,选择文本,再文本中输入main

https://img-blog.csdnimg.cn/img_convert/576cb0bd811597ce72f696cf7930fea6.png
注意,main会在程序的多处被使用,以是直接搜刮“下一个文本(CTRL+T)”功能,找到main函数为止比力好点

https://img-blog.csdnimg.cn/img_convert/21ff947d4a314a1f54236f6792fad832.png
不过这种情况只实用于“main函数在被花时仍能被IDA辨认到”的情况
另有一种方法,对于简单的程序而言,由于知道存在花指令(或者猜测存在花指令),以是直接将光标移动IDA上端彩色导航栏的棕红色部分,有肯定几率可以看到被花指令祸殃的函数
反面就是上脚本扫除花指令了:

https://img-blog.csdnimg.cn/img_convert/c4035ebf81ad9ad1746593e6ee31d1e2.png

https://img-blog.csdnimg.cn/img_convert/d57bd9875dd06427790ef80041dc4d0c.png

https://img-blog.csdnimg.cn/img_convert/2bdd28a18179e6c263c221bb097c35e9.png
另类解法:
Ctrl T关键词查找“{”符号:

https://img-blog.csdnimg.cn/img_convert/2105605bc03cdb86b3fbdbd624b99bfe.png

https://img-blog.csdnimg.cn/img_convert/d168e9ac7e2ec063da33254b28a8418c.png

https://img-blog.csdnimg.cn/img_convert/7d5a354bb8601e7b114f094869af92a4.png
一样得到flag:
{u_are2wordy}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: [GFCTF 2021]wordy的write up