Wirte-up을 보고 풀었다... ㅠㅠ

 

1. Reversing

scp -P portNum ipAddr:binary_path local_storage_path 명령어로 fix의 binary를 받아서 Reversing을 했다.

ex) scp -P 2222 fix@pwnable.kr:/home/fix/fix /workspace/z3-practice/pwnable.kr/fix

 

분석하니 shell실행이 되지 않는 이유는 간단했다. buf에 복사한 내용이 push명령어에 의해 내용이 overwrite되서 그런것이다. (esp와 buf간의 사이 간격이 좁아서 그렇다.)

 

2. Exploit

shellcode의 내용은 

 

xor    eax,eax
push   eax
push   0x68732f2f
push   0x6e69622f
mov    ebx,esp
push   eax
push   ebx
mov    ecx,esp
mov    al,0xb
int    0x80

 

이다.

문제에서는 한 바이트만 조작이 가능하기 때문에 push eax OR push ebx를 바꾸는 것에서 문제가 해결이 될것이라고 생각했다.

 

첫 번째로 생각해본 것이

만약 첫 번째 push eax할때 만약 esp가 가리키는 stack이 0으로 이루어져 있으면 pop eax로 바꾸어도 eax에는 0, "/bin//sh"뒤에도 null이 들어가기 때문에 문제가 없을 것이라고 생각했지만 문제는... esp가 가리키는 stack이 0이 아니라는 것이다.

 

그래서 두 번째로 생각해본 것은

두 번째 push eax를 하는 것은 ebx뒤의 null을 채워주는 거니까 이것을 pop esp로 바꿔주면 해결이 되긴 하지만 esp의 범위가 stack을 벗어나기 때문에 접근 오류가 발생한다.

 

.

.

.

 

하지만!

 

stack의 공간을 넓혀주는 ulimit -s unlimited 명령어를 사용해서 stack의 공간을 무제한으로 잡아준다면 esp의 값이 다른 곳으로 튀어도 push를 해줄 수 있기 때문에 접근 오류가 발생하지 않고 그곳의 값들도 0이기 때문에 push eax를 해줄 필요가 없어지므로 정상적으로 shellcode가 실행된다.

'System > pwnable.kr' 카테고리의 다른 글

[Pwnable.kr] - uaf - 190912  (0) 2019.09.12
[Pwnable.kr] - leg - 190711  (0) 2019.07.11
[Pwnable.kr] - input - 190704  (0) 2019.07.04

+ Recent posts