[LOB] orc->wolfman
2019. 3. 28. 16:18
LOB
[Load Of Buffer overflow]
#05 :orc->wolfman
이번에도 정리용.
일단 wolfman.c의 코드는 밑과 같다.
orc문제와 크게 다를 게 없지만 추가된 점은 bufferhunter라고 buffer도 앞에서 40바이트는 0으로 초기화한다.
그러면 이제 RTL을 쓰거나 뒤에 쉘코드를 삽입해 그 쉘코드 시작부분의 주소를 리턴 어드레스로 넣는 것을 생각할 수 있었다.
(근데, 48번째 인자가 bf여야하므로, RTL은 불가능하다. (공유 라이브러리의 주소는 0xbf로 시작하지 않음))
...더보기
![](https://blog.kakaocdn.net/dn/DHJLm/btqtT572Tpy/9kgUAa8Xx4k2iD7yIWoV4K/img.png)
![](https://blog.kakaocdn.net/dn/48BmZ/btqtT6FPYzt/tADFlT7xvmIKonklIpQeA1/img.png)
![](https://blog.kakaocdn.net/dn/Xsp3d/btqtWirk43G/QztI99EgJvuJHENYsN0mOk/img.png)
![](https://blog.kakaocdn.net/dn/b4bRWJ/btqtT7xXlaG/TuUvBoFUo5vKKP7UmFCmzk/img.png)
일단 카피하고 디버깅해서 버퍼의 크기를 혹시 모르니 체크한다.
![](https://blog.kakaocdn.net/dn/DHJLm/btqtT572Tpy/9kgUAa8Xx4k2iD7yIWoV4K/img.png)
캡처를 못했는데 buffer 크기는 40바이트가 나왔고, 그러면 sfp까지 4바이트, 그리고 리턴어드레스 4바이트, 뒤에 쉘코드는 25바이트 짜리를 쓰려고 한다. 그러면 총 44바이트를 아무거나 채운 후에, 일단 임시로 \xbf\xbf\xbf\xbf을 리턴어드레스로 주고(인자의 인덱스 47번째 바이트가 \xbf인지를 검사하므로), 쉘코드를 삽입하고 gdb를 통해 스택의 값을 살펴보았다.
![](https://blog.kakaocdn.net/dn/48BmZ/btqtT6FPYzt/tADFlT7xvmIKonklIpQeA1/img.png)
esp전의 40바이트부터 100워드바이트만큼을 살펴보았더니, 0xbffffe0부터가 쉘코드 값이 들어있는 것을 알 수 있었다. (사진에는 없다..)
![](https://blog.kakaocdn.net/dn/Xsp3d/btqtWirk43G/QztI99EgJvuJHENYsN0mOk/img.png)
그래서 이번에는 temp가 아닌 wolfman으로 리턴어드레스를 \xe0\xfe\xff\xbf로 바꾸어서 똑같이 페이로드를 작성했다. 성공.
![](https://blog.kakaocdn.net/dn/b4bRWJ/btqtT7xXlaG/TuUvBoFUo5vKKP7UmFCmzk/img.png)
'Wargame > LOB(Redhat)' 카테고리의 다른 글
[LOB] darkelf->orge (0) | 2019.03.28 |
---|---|
[LOB] wolfman->darkelf (0) | 2019.03.28 |
[LOB] goblin->orc (0) | 2019.03.28 |
[LOB] cobolt->goblin (0) | 2019.03.28 |
[LOB] gremlin->cobolt (0) | 2019.03.28 |