티스토리 뷰
포너블 문제를 풀다가 exploit를 할때 항상 같은 틀의 코드를 반복하는 모습이 바보같아서
pwnable exploit form을 만들어봤어요.
전반적인 틀은 youngsouk-hack.tistory.com/76 해당 블로그에서 가져왔습니다.
마찬가지로 alias를 이용해서 command처럼 두고 사용하시면 편할 것 같습니다 :)
벌도로 원하는 가젯 + 함수들은 list에 추가해주시면 됩니다.
그 예로 libc_start_main함수나, syscall 가젯들 추가해주면 그것도 뽑아올 수 있겠네요. +_+
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
import sys
from pwn import *
print "usage : ex.py [filename]"
exit()
py_name = original + '.py'
f = open(py_name, 'w')
p = process('/bin/sh')
command = 'objdump -d %s | grep "' % original
obj_list = ['puts', 'printf', 'write', 'fputs', 'read', 'fgets', 'gets', 'scanf']
for i in obj_list:
command += i + '\|'
command = command[:-2] + '"'
p.sendline(command)
sleep(0.5)
obj = p.recv(1000)
func = ''
for i in obj_list:
func += '%s_plt = e.plt["%s"]\n' % (i, i)
func += '%s_got = e.got["%s"]\n\n' % (i, i)
gadget = ''
gadget_list = [['pop rdi', 'prdi'], ['pop rsi', 'prsi'], ['syscall', 'syscall']]
for i in gadget_list:
p.sendline('ROPgadget --binary ./'+original+' | grep "' + i[0] + '"')
sleep(0.3)
rop_gadget = p.recvline(timeout=0.5)
if( not(rop_gadget) ):
continue
gadget += i[1]+' = ' + rop_gadget[0]+'\n'
gadget += '\n\n'
content = 'from LibcSearcher import *\n'
content += "from pwn import *\n\n"
content += "context.log_level = 'debug'\n\n"
content += "#p = remote('',)\n"
content += "l = e.libc\n\n"
content += func + gadget
content += "p.interactive()"
f.write(content)
|
zshrc set
vi ~/zshrc
해주고 해당 파일안에다가
alias (원하는 command 명) = "python (절대주소)"
해주면 됩니다.
댓글