728x90


Hint함수

int_ABCDEFG 함수


랜덤한 값의 a,b,c,d,e,f,g이다. 그리고 모두 합한 값을 sum에 넣는다.



Ropme 함수

입력한 알파벳에 해당하는 함수를 호출하고  a~g까지의 알파벳이아닌 값을 입력한후 sum과 같은값을 입력하면 flag를 출력해준다.

a를 입력했을 때 A함수를 실행시키는데 이때 랜덤한 a의 값을 출력시켜준다.



해당 문제에서 취약점은 gets함수에서 발생한다.

gets함수를 통해 overflow가 가능하다. 이것을 활용하여 if문안으로 접근해서 바로 플래그를 얻으려고 했으나

ropme함수의 주소가 0x080axxxx 이다. gets함수에서 0a값이 들어가면 개행문자로 인식하여 gets함수가 끝난다.

이 때문에 바로 ropme함수로 접근할 수 없다. 

그렇기 때문에 rop를 통하여 A~G까지의 함수호출을 통해 값을 추출해 내고 sum을 구하여 입력하는 방법으로 접근해야한다.


gets함수의 인자인 input2이다. ebp-0x74 위치에서 시작하므로 ebp까지덮으면 0x78이다. 0x78까지 덮고 ret주소를 A함수부터 G함수까지 차례대로 넣어주고 출력된값을 모두 더하여 입력시켜주면 flag를 얻을 수 있다.


페이로드이다.

recvuntil을 통해서 출력되는 문자열을 필요한부분만 잘라내어 정수값만 추출해 낸다. 이후 정수값들을 모두 더한뒤 8byte만큼 잘라주고 

비트 and 연산을 통해 부호를 살려주어 sum의 값으로 보낸다.

이것을 실행하면 플래그가 나온다.



문자열에서 원하는 값만 추출할 수 있다. recvuntil 활용


728x90

'Wargame_writeup > Pwnable.kr' 카테고리의 다른 글

asm  (0) 2018.12.21
passcode  (0) 2018.12.21
cmd1  (0) 2018.12.21
leg  (0) 2018.12.19
lotto  (0) 2018.12.19

+ Recent posts