PLT VS GOT


PLT(Procedure Linkage Table)

PLT는 일종의 실제 호출 코드를 담고 있는 테이블로, 이 내용 참조를 통해 _dl_runtime_resulve가 수행되고, 실제 시스템 라이브러리 호출이 이루어진다.

(GOT와 연결해주는 역할, 실제 바이너리에서도 사용하고자 하는 함수/라이브러리 주소 대신 PLT를 호출함.)


GOT(Global Offset Table)

PLT가 참조하는 테이블로, 프로시져들의 주소를 가지고 있다. PLT가 외부 프로시져를 호출할 때 GOT를 참조해서

해당 주소로 점프한다. (GOT는 외부 라이브러리 함수의 주소를 저장한다.)



간단하게 설명을 했으니 이제 GOT overwrite를 실습할거다.


사정상 리눅스가 없어서 Fedora Core3 문제 가상머신에서 실습을 했다.


일단 위와 같이 소스를 짰다. pritnf함수의 인자로 /bin/sh을 넣었다. 이렇게 한 이유는 이따가 pritnf함수의 got를 변경하기 위해서다.


우선 BP를 메인함수 직전에 걸어버린다.


그리고 run한다.

run하면 system 함수의 주소를 확인할 수 있다. system함수의 주소는 0x7507c0이다.


main함수를 디스어셈블리하면 printf함수의 주소가 나온다.

(fedora core3에서 하니 이렇게 함수 이름이 안나오는데 _init+56은 pritntf가 맞다.)


해당 주소를 i를 써서 코드로 보면 *0x8049574로 점프하는 부분이 있다. 저기가 got다.

 

주소를 확인해보면 GOT가 맞다.


이제 set명령으로 printf의 got를 system함수의 주소로 바꿔버리고 계속 실행하면

printf("/bin/sh") -> system("/bin/sh")로 코드가 변경되어서 실행이 된다.


개신기..


'HACKING > System hacking' 카테고리의 다른 글

double free bug  (0) 2018.05.10
pwnable 풀 때 objdump  (0) 2018.02.25
CTF pwn 문제용 nc 서버 만들기  (0) 2018.02.15
GDB BP에 관한 것  (0) 2017.11.29
heapoverflow 문제 풀이3  (0) 2016.11.05

사이트 주소 : https://exploit-exercises.com/

사이트 메인화면이다.


여러개의 단계가 있는것으로 보이며 ISO 파일로 문제를 제공하는것 같다. 

Fedora Core 다 풀면 풀어봐야겠다.

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