.....????? 이번에는 스택을 통째로 날린다... (정확히는 bfffffff부터 버퍼 시작 주소까지...)

음...공유라이브러리를 이용해보자..ㅎ

이름이 쉘코드인 공유라이브러리 파일이 만들어졌다.

export LD_PRELOAD = 로 공유라이브러리를 등록하고,(절대경로로 입력하는거 주의! "/tmp/" 넣기)

잘 들어간거 확인하고

쉘코드 위치도 찾고,

깔끔하게 풀렸다.

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

LOB-level13(RTL1)  (0) 2019.07.02
LOB-level12(sfp)  (0) 2019.07.02
LOB-level10(argv hunter)  (0) 2019.06.30
LOB-level9(check 0xbfff)  (0) 2019.06.29
LOB-level8(check argc)  (0) 2019.06.28

이번 문제는 더 황당하다. argv를 초기화 해버리다니..;; 해결방법을 고민하다가 argv[0]인자를 따로 저장한다는 것을 알았다.

argv인자가 저장되는 부분

실행파일 이름이 저장되는 부분인것 같다.

주소 정확하게 찾고,

진행을 더 시켜봤지만 argv인자만 지워지고 실행파일명은 지워지지 않는다!

쉘코드 작성해서 쓰면 끝

사실 오류가 계속나서 너무 오래 풀었다.

ln -sf로 심볼릭 링크를 걸어주는게 더 좋은거 같다.(길이제한이 없는듯...)

심볼릭링크 뒤에 nop을 꼭 넣어줘야되는 것 같다....

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

LOB-level12(sfp)  (0) 2019.07.02
LOB-level11(stack destroyer)  (0) 2019.06.30
LOB-level9(check 0xbfff)  (0) 2019.06.29
LOB-level8(check argc)  (0) 2019.06.28
LOB-level7(check argv[0])  (0) 2019.06.28

argv[1]인자에서 ret주소 두개를 맞춰줘야겠다.

 

인자를 엄청 많이 넣어주니 argv[2]의 주소가 바뀌었다.

가볍게 해결~

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

LOB-level11(stack destroyer)  (0) 2019.06.30
LOB-level10(argv hunter)  (0) 2019.06.30
LOB-level8(check argc)  (0) 2019.06.28
LOB-level7(check argv[0])  (0) 2019.06.28
LOB-level6(check length of argv[1] + egghunter + bufferhunter)  (0) 2019.06.28

이번에는 받는 인자가 두개로 제한되어있고 거기에 argv[1]까지 제한해준다. 다만 argv[0]의 길이는 검사하지 않음으로, 아무래도 심볼릭링크에 쉘코드를 삽입하고 권한을 따줘야 할듯 싶다...

안되서 찾아보니 \x2f가 '/'여서 안된다더라

쉘코드를 다시 만들어야겠지만..귀찮음으로...

\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81
https://d4m0n.tistory.com/62

 

[Linux/x86] Shellcode without 0x2f

Shellcode without 0x2f 이번 글에서는 0x2f가 없는 쉘코드를 만들어 볼 것이다. 0x2f는 문자로 '/'이며 이 문자는 리눅스에서 경로를 구분할 때 쓰인다. 간혹 argv[0]. 즉, 파일 이름에 쉘코드를 사용해야 할 때..

d4m0n.tistory.com

해당 블로그를 참고해 다음에 만들어 보자.

주소를 찾아주고.

생각보다 쉽게 땄다.

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

LOB-level10(argv hunter)  (0) 2019.06.30
LOB-level9(check 0xbfff)  (0) 2019.06.29
LOB-level7(check argv[0])  (0) 2019.06.28
LOB-level6(check length of argv[1] + egghunter + bufferhunter)  (0) 2019.06.28
LOB-level5(egghunter + bufferhunter)  (0) 2019.06.24

문제를 보면 level6과 유사하지만 argv[0]의 길이가 77이 되어야 한다. 심볼릭링크를 이용하면 되겠다.

심볼릭링크 명령어는 ln -s [원본] [링크명] 이다.

분석하기 위해 파일을 만들고

두번째 인자의 주소도 알아낸다.

해결했다.

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

LOB-level9(check 0xbfff)  (0) 2019.06.29
LOB-level8(check argc)  (0) 2019.06.28
LOB-level6(check length of argv[1] + egghunter + bufferhunter)  (0) 2019.06.28
LOB-level5(egghunter + bufferhunter)  (0) 2019.06.24
LOB-level4(egghunter)  (0) 2019.06.13

이번 문제는 환경변수도 안되고, 버퍼도 못쓰고, \xbf도 맞춰주면서, 길이까지 맞춰줘야 되는 문제같다.

다행히 ASLR은 안걸려있는거 같고... argv[1]의 주소를 이용해 봐야겠다.

주소 확인해주고

음....실패... nop이 짧아서 그런걸까... argv[2]를 이용해보자

argv인자의 각 주소가 들어있는 주소이다,.

앞부터 argv[0], argv[1], argv[2]

이제 공격 구문을 짜서 넣으면

성공!

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

LOB-level8(check argc)  (0) 2019.06.28
LOB-level7(check argv[0])  (0) 2019.06.28
LOB-level5(egghunter + bufferhunter)  (0) 2019.06.24
LOB-level4(egghunter)  (0) 2019.06.13
LOB-level3(small buffer + stdin)  (0) 2019.06.09

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

+ Recent posts