우선 코드 한번 봐주면, orc와 마찬가지로 egghunter가 존재하고 추가로 buffer hunter까지 존재한다. 코드상 버퍼를 초기화해주기때문에

버퍼 너머에 주소에 orc풀이와 마찬가지로 쉘코드를 넣고 주소를 연결시켜주면 될 것 같다.

 

bp를 걸어주고, 

보면 이번에도 0xbffffcb4너머로는 안받는것 같다.

 

쉽게 성공ㅎ

'war game > LOB' 카테고리의 다른 글

LOB-level7(check argv[0])  (0) 2019.06.28
LOB-level6(check length of argv[1] + egghunter + bufferhunter)  (0) 2019.06.28
LOB-level4(egghunter)  (0) 2019.06.13
LOB-level3(small buffer + stdin)  (0) 2019.06.09
LOB-level2(small buffer)  (0) 2019.06.09

disas main으로 열고 main+206에 bp를 걸어준다 그리곤 python을 이용해 44바이트 공간과 sfp를 채우고 \xbf 4개넣어서 주소 맞춰주고 \x90 100개정도 넣어준 뒤 쉘코드 넣을자리까지 넣어준다.

 

 

 버퍼가 입력받은 값을 보면 0xbffffcb4부터 쉘코드가 들어가는 것 같다.

시나리오를 짜면 주소들어갈 자리에 0xbffffcb4를 넣고 쉘코드를 넣으면 될꺼같다.

음..?실패..?

 

너무 가까워서 그런가 싶어 당기니 성공ㅎ

 

참고로 널을 아무리 많이 넣어도 0xbffffcb4 이상으로 받아지지 않는듯.

 

'war game > LOB' 카테고리의 다른 글

LOB-level6(check length of argv[1] + egghunter + bufferhunter)  (0) 2019.06.28
LOB-level5(egghunter + bufferhunter)  (0) 2019.06.24
LOB-level3(small buffer + stdin)  (0) 2019.06.09
LOB-level2(small buffer)  (0) 2019.06.09
LOB-level1(simple bof)  (0) 2019.06.09

음 이문제도 level2 와 같은 방식으로 풀면 될 것 같다.

환경변수에 쉘코드 넣고, 주소 찾고,

이런식으로 슥 넣으면 된다.

'war game > LOB' 카테고리의 다른 글

LOB-level5(egghunter + bufferhunter)  (0) 2019.06.24
LOB-level4(egghunter)  (0) 2019.06.13
LOB-level2(small buffer)  (0) 2019.06.09
LOB-level1(simple bof)  (0) 2019.06.09
LOB-password  (0) 2019.06.07

c파일을 보니 level1과 똑같은 취약점이 발생한다는 것을 알 수 있다. 다만 buffer가 몹시 작아서 쉘코드를 그대로 넣기보다 환경변수를 이용해서 문제를 풀어야 할 것 같다.

우선 tmp에 파일을 옮기고, 분석을 시작하겠다.

슥 환경변수를 설정해주고, get파일로 환경변수의 주소를 찾아준다.  0xbfffffff에 가까울 수록 환경변수가 보인다고 한다.

//get.c//
#include  <stdio.h>
int main(int argc, char *argv[])
{
printf("%p\n",getenv(argv[1]));
}

41바이트 쉘코드

\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\x31\xd2\xb0\x0b\xcd\x80

EGG의 주소는 0xbffffe6b이다.

버퍼 한번 슥 봐주고

해결

'war game > LOB' 카테고리의 다른 글

LOB-level5(egghunter + bufferhunter)  (0) 2019.06.24
LOB-level4(egghunter)  (0) 2019.06.13
LOB-level3(small buffer + stdin)  (0) 2019.06.09
LOB-level1(simple bof)  (0) 2019.06.09
LOB-password  (0) 2019.06.07

우선 gremlin파일이 존재함으로 c파일을 열어봤다. 별거 없이 strcpy가 입력받을 값을 제한하지 않아서 취약점이 생겼다.

버퍼에 쉘코드 적당히 넣고 나머지 버퍼 채우고 fsp채우고 ret에 쉘코드 시작 주소를 넣어주면 해결 될 것 같다.

 

처음 서버 설정할때 직접적으로 파일을 건드릴 수 없게 설정해서 tmp파일에 옮겨서 분석을 했다.

printf 함수 위치에서 break point를 걸고 a인자를 넣어줬다.

느낌을 보니 대강 0xbffffa28에서 부터 인자가 들어가는 것 같았다.

보면 0xbffffb28까지 버퍼를 채우고 fsp를 채운뒤 0x400309cb로 뛰는 것을 볼 수 있다.

이제 쉘을 따러 가보자.

우선 "A"를 30개 정도 넣고, 쉘코드

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

를 넣고 남은 버퍼+fsp인 206개 채워넣고 주소 넣고 보내면.

쉘이 따진다.

'war game > LOB' 카테고리의 다른 글

LOB-level5(egghunter + bufferhunter)  (0) 2019.06.24
LOB-level4(egghunter)  (0) 2019.06.13
LOB-level3(small buffer + stdin)  (0) 2019.06.09
LOB-level2(small buffer)  (0) 2019.06.09
LOB-password  (0) 2019.06.07

+ Recent posts