우선 코드 한번 봐주면, 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

pwnstudy에서 PIE에 대해 배웠다.

PIE는 보호기법의 일종으로 PIE로 컴파일 할 시 해당 파일은 위치 독립 시행파일이 된다. 즉 실행할때마다 매핑되는 주소가 어디든지에 상관없지 실행되는 파일로, 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 공격등에서 보호된다.

 

예제를 보면 pie라는 파일이 존재한다.

해당 파일이 pie인지 검사하면 

PIE가 결려있는 것을 확인할 수 있다. 

뿐만아니라 file 명령어를 이용해 해당 파일이 shared object인것으로 pie가 걸렸는지 판단할 수 있다,

 

해당 문제를 gdb로 열어보면 

우리가 항상보는 절대주소를 보여주는것이 아닌 상대주소를 공간상에 맵핑하여 실행하는 것을 볼 수 있다.

해당 실행파일에 break를 걸고 실행을 시킨 뒤 Virtual Memory MAP을 보면 

이런식으로 주소가 설정되는 것을 볼 수 있다. 참고로 PIE가 걸렸을 경우 보통 라이브러리 주소는 555555..로 많이 시작한다 하더라.

 

이제 해당 문제를 분석해보면

 

릭을 하고 offset을 계산해 base를 찾고 getshell주소 맞춰서 버퍼 채워주고 나가면 될 것 같다.

a인자 8개를 넣고 rsp를 보면 56byte 뒤에 우리가 릭할때 쓸만한 주소가 있다.

이런 식으로 작성해주고.

이제 base는 아까 Virtual Memory MAP에서 본 주소 555555554000에서 555555554b4d를 뺀 b4d를 offset으로 하고 구할 수 있다.

다음으로 getshell의 offset을 구해 공격할 주소를 gogo에 넣어주고 

버퍼가 112임으로 fsp 까지 채워주면 120개, 그 뒤에 gogo붙여서 파일을 종료하면

슥  해결 된다!

'hacking > pwn' 카테고리의 다른 글

해킹공부자료정리  (0) 2019.10.16
heap관련  (0) 2019.07.05
읽을 자료  (0) 2019.06.05
자료사이트  (0) 2019.05.30

+ Recent posts