LOB
[the Lord Of Buffer overflow]
#14 :bugbear->giant
이번엔 소스코드가 엄청 길어졌다.
지금까지 Load of buffer overflow인줄 알았는데, lord 였다..
일일이 바꾸기 귀찮아서 시간날 때 해야겠다..
음 일단 코드에서 주석부분은 그냥 execve의 주소를 구해와서 ret이 이와 같지 않으면 오류 문구를 내게 하는 장치이다.
일단 execve의 주소를 구해봤다.
![](https://blog.kakaocdn.net/dn/2nC88/btqtXXtwMSY/o9a1Okvh8bKH0wZwTj96pK/img.png)
/bin/sh의 주소는 400fbff9이다.
![](https://blog.kakaocdn.net/dn/baK1Pl/btqtVttO6rR/VsUKEZvc1KkJR9V0z1vWkK/img.png)
캡처를 못했는데, 일단 버퍼는 40바이트였고, execve의 인자에 맞게 {"/bin/sh", NULL}과 NULL이 있는 주소를 찾아야 했다. 그냥 환경변수를 이용하기로 했는데, argv[0]이 {"~~", NULL}과 NULL이 있는 형태가 모두 있기 때문이다. 저 노란 부분이 "~~"\n이므로, {"~~", NULL}의 형태가 되기 때문이다. 그리고 그 밑은 NULL의 형태이다.
![](https://blog.kakaocdn.net/dn/BlsFU/btqtWZyzBDm/6A7ejTh940n1R43wrMKsk1/img.png)
그럼 argv[0]에 /bin/sh를 올려야 하므로, 심볼릭 링크를 걸어준다. 근데 그 전에 gdb해야 하기 때문에 일단 카피해준다.
파일명을 /bin/sh의 주소로 한다.
![](https://blog.kakaocdn.net/dn/bDrolD/btqtUjSYxUq/BfhjCakwBDNadsW6jN7FsK/img.png)
그러고 다시 환경변수쪽을 보니까 제대로 올라가 있다.
![](https://blog.kakaocdn.net/dn/25XOQ/btqtWh7xjYu/P8kWLHxnJPrsOjRZm1gXi0/img.png)
앞의 부분을 빼고 인자로 보내야 하므로, bffffff7이되어야 한다. 그리고 NULL의 주소는 bffffffc이다.
![](https://blog.kakaocdn.net/dn/cs7mxy/btqtXzTX8uU/OnaDMkdDKJOJpL2nyVYfh0/img.png)
이제 심볼링 링크를 걸어서, evecve의 인자 형태에 맞게 RTL 페이로드를 짜준다.
버퍼+sfp+execve+4바이트+args
args=/bin/sh의주소+{&"/bin/sh", NULL}주소+NULL주소
![](https://blog.kakaocdn.net/dn/mewFK/btqtW0dbUFc/6LFdKKLncmJrMTB3rOnntk/img.png)
![](https://blog.kakaocdn.net/dn/ui5ip/btqtWhfphMx/VDJbSsHLzhaFwiN3XmwQiK/img.png)
사실 다른 방법도 있는데, 위에처럼 execve의 인자들이 복잡하니까, execve의 인자로 exit을 보내서 종료시키고, system 함수를 불러오는 것이다. system 함수와 execve는 둘 다 바로 위 4바이트가 비어있다.(아무거나 입력해도 됨, AAAA 등) 그걸 끼워넣는 형태로 페이로드를 작성할 수 있다.
따라서 execve system exit /bin/sh의 형태가 되면 되는 것이다.
system과 exit의 주소를 구해보았다.
![](https://blog.kakaocdn.net/dn/lUv1M/btqtW0Eg1xu/DS2IQfDakUfZ5GGSSjXLB0/img.png)
페이로드를 작성함. 성공.
![](https://blog.kakaocdn.net/dn/yv2Rd/btqtVfCBzl3/p4qAKSAYqkPiyePznBwBl0/img.png)
함수들의 주소를 정리하자면 이렇다.
![](https://blog.kakaocdn.net/dn/nSqBD/btqtW0Eg1wF/DaBVVxv8EN6q5NXBa1LT2K/img.png)
참고 :
https://grayfieldbox.tistory.com/entry/LOBLord-Of-BufferOverflow-bugbear-giant
https://janghw.tistory.com/entry/Lord-of-BOF-Level-14-bugbear-giant
'Wargame > LOB(Redhat)' 카테고리의 다른 글
[LOB] assassin->zombie_assassin (0) | 2019.04.01 |
---|---|
[LOB] gaint->assassin (0) | 2019.03.31 |
[LOB] darkknight->bugbear (0) | 2019.03.28 |
[LOB] darkelf->orge (0) | 2019.03.28 |
[LOB] wolfman->darkelf (0) | 2019.03.28 |