#About


[그림 1] - Hell_fire.c 소스 코드 확인




#Solution


[그림 1]에서 확인할 수 있듯 해당 문제는 Remote BOF 문제이며 해당 리눅스 서버에서 사용하는 포트의 설정에서 7777포트를 확인해보았다


[그림 2] - 포트 설정 확인


hell_fire라는 이름의 7777번 포트가 설정되어 있는것을 확인할 수 있으며 또한 아래의 [그림 3]을 확인하면 해당 


바이너리 파일은 setuid가 설정되어 있지 않고 슈퍼데몬인 xinetd.d가 hell_fire 권한으로 문제를 실행하고 있다


[그림 3] - setuid 설정 확인


xinetd.d로 서비스하게 되면 자동으로 I/O를 연결시켜주어 Remote 셸코드를 사용하지 않아도 되며 /bin/sh를 해주는 것만으로도 셸을 획득할 수 있다


문제 풀이에 사용할 함수는 system이며, 이는 내부 루틴 중 do_system 함수를 사용하고 이는 또 내부 루틴 중 execve를 사용한다 아래의 과정을 살펴보자


[그림 4] - system 함수 디스어셈블링 결과 확인


[그림 5] - do_system 함수 디스어셈블링 결과 확인


위 [그림 4], [그림 5]에서 확인할 수 있듯, do_system 함수는 내부적으로 execve 함수를 호출하므로 do_system 함수를 


호출하게 되면 내부적으로 execve("/bin/sh","명령어");와 같은 효과를 가지게 되며 execve 함수에 필요한 명령어를 형성하는 부분은


[그림 5]의 0x00750784 부분이며 execve("/bin/sh",{"/home/dark_eyes/hell_fire",NULL},envp) 와 같이 형성 된다


따라서 아래와 같이 리턴 값을 do_system+1124 부분의 주소로 변조해주게 되면 아래와 같이 셸을 획득할 수 있다


[그림 6] - 셸 획득

'Wargame' 카테고리의 다른 글

[FEDORA CORE 3] Evil_wizard > Dark_stone  (0) 2017.12.27
[FEDORA CORE 3] Hell_fire > Evil_wizard  (0) 2017.12.23
[FEDORA CORE 3] Iron_golem > Dark_eyes  (0) 2017.12.21
[FEDORA CORE 3] Gate > Iron_golem  (0) 2017.12.17
[DISK] Root Me > Find the cat  (0) 2017.12.14

+ Recent posts