profile image

L o a d i n g . . .

팀원분들이 직접 제작하신 포너블 문제를 풀어보는 시간이다.

(이번엔 재용님이 제작하신 문제들에 대한 롸업이다.)

 

1번 문제)

문제

보호기법 확인

 

바이너리 파일을 실행한 모습

이름을 입력받고, 멘트를 출력한다.

 

ida 로 까본 모습이다.

scanf 로 입력받을 시 입력값 검증을 하지 않기에 bof 가 발생한다.

-> ret 를 변경가능할 것이다.

 

ShowFlag() 함수가 존재한다.

ret 를 ShowFlag() 로 변경해주면 될 듯하다.

 

 

익스플로잇

showFlag() 주소 : 0x400567

ret 까지의 offset : 72 byte

 

payload 는 다음과 같을 것이다.

"A"*72 + 0x400567

 

익스플로잇 코드

 

쉘을 획득하였다!!

 

 

2번 문제)

보호기법 확인

canary, nx, pie 모두 걸려있다..!

aslr 은 꺼져있다.

 

바이너리를 실행한 모습

ID, PW 를 입력받고, 멘트를 출력한다.

 

ida 로 까본 모습이다.

id, pw 를 버퍼 크기만큼만 입력받는다.

s와 "admin" 을 비교한 결과를 v4에, s1와 "adminpw123456"을 비교한 결과를 v5에 넣는다.

그리고 v4의 값이 10일 때, 그리고 v5의 값도 10일 때 쉘을 띄운다.

-> 리눅스에서 strcmp 는 차이값을 반환한다.

 

따라서 10만큼 큰 값들을 다음과 같이 입력해준다.

admix
adminpw12345@

 

bash 쉘로 해서 그런지 쉘이 따진게 보이지 않았다 흠..

 

 

 

3번 문제)

문제

보호기법 확인

NX, pie 가 켜져있다. 

NX -> 스택에 실행권한 x

pie -> 바이너리 영역 주소 랜덤화

ASLR은 꺼져있다.

 

바이너리를 실행한 모습

 

ida 로 까본 모습이다.

 

hello() 함수

"hello world" 를 출력하고, read 로 입력을 받는다.

입력을 받을 때 0x64만큼 받기에 bof 가 발생한다.

 

ret 까지 offset 이 78인데, 100만큼 입력받는 상황.

-> ret 변경이 가능할 듯하다.

 

 

문제 해결 방안

nx 가 켜져있고, aslr 이 꺼져있는 상황에서는? rtl 기법!

필요한 것들을 구해보자.

 

system, binsh 주소 찾기

system 주소

 

binsh 주소

페이로드는 다음과 같다.

"A"*78 + system 주소 + bbbb + binsh 주소

 

 

 

익스플로잇

처음에 쉘이 안따지길래 머지 했는데, binsh 주소를 잘못 적었었다..^^

자나깨나 오타 조심.

 

성공적으로 쉘을 획득하였다!

'Hacking > Pwnable' 카테고리의 다른 글

[Pwnable] Heap2  (0) 2021.05.05
[Pwnable] Heap1  (0) 2021.05.05
[P4C] pwnable problem writeup2  (0) 2021.04.29
[P4C] pwnable problem writeup1  (0) 2021.04.29
[P4C] Pwnable problem 3 - writeup  (0) 2021.04.27
복사했습니다!