WAR GAME/HackCTF

[HackCTF : Pwnable] Basic_BOF #1 풀이

jir4vvit 2020. 8. 19. 23:15

문제 풀이 환경 : ubuntu 16.04.7

 

 

https://ctf.j0n9hyun.xyz/ 사이트에서 pwnable을 공략해보려고 한다.

 

 

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

 

 

문제

간단한 버퍼오버플로우 문제 같다.

 

문제 환경에 접속하여보자.

 

nc

입력으로 a를 10개 주었다. 

buf에 있는 값과... check..?를 보여준다.

 


 

문제에서 해당 바이너리 파일을 제공하므로 IDA Pro 7.2 툴로 디스컴파일 해보았다. 

 

디스컴파일

s와 v5 변수가 보인다.

 

v5 변수는 아까 위에서 보았던 [check]인데 기본적으로 0x4030201 란 값이 들어가있는 것을 확인할 수 있다.

그리고 fgets 함수를 통해 s엔 마지막 null을 제외하고 44글자를 입력받는다.

 

마지막으로 if문에서 v5값이 0xDEADBEEF이면 쉘을 획득하는 것을 알 수 있다.

 

결론적으로 우리는 버퍼오버플로우 공격을 통해 v5의 값을 0xDEADBEEF로 덮어야한다는 것을 예측할 수 있다.

 


 

어떻게 0x4030201의 값을 가지고 있는 v5의 값을 0xDEADBEEF로 덮을 수 있을까?

 

스택

s 변수는 ebp를 기준으로 0x34만큼 떨어진 곳에 위치해있고, v5는 0xC만큼 떨어진 곳에 위치한다.

 

우리가 입력한 값은 s변수에 저장된다.

 

그러면 0x34에서 0xC를 뺸 공간만큼 다른 값으로 채우고, v5가 시작되는 곳에 0xDEADBEEF를 넣으면 되지 않을까?

 

 

0x34에서 0xC를 뺀 값은 40이다. a를 대충 40개 넣고 그 뒤에 리틀엔디안 방식으로 0xDEADBEEF를 입력해주자.

 


아래처럼 페이로드를 작성해주었다.

(python -c 'print "a"*40 + "\xef\xbe\xad\xde"';cat) | nc ctf.j0n9hyun.xyz 3000

 

flag 값 확인

flag 값을 확인할 수 있다!!!!