힌트를 보고 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

+ Recent posts