상세 컨텐츠

본문 제목

[FC4] dark_stone -> cruel

SYSTEM HACKING/LOB Fedora Core

by koharin 2019. 7. 14. 18:12

본문

728x90
반응형

 

cruel 파일에 SetUID가 걸려있으니 이 파일을 실행시키면 cruel의 권한을 얻게 된다.

이번에도 shell에 대한 심볼릭 링크 파일을 만들어서 사용하는 것 같다.

 

 

strcpy 함수로 인해 bufferoverflow 취약점이 있는 간단한 공격 파일 코드이다.

하지만 random library라서 fake ebpRET sleding을 사용할 수 없다고 한다.

RTL 공격은 할 수 있을 것 같은데

 

$ gdb -q cr

(gdb) b main

(gdb) r

(gdb) disass execve

 

 

Execve 함수가 esp + 12, esp + 16, esp + 20 으로 각각 첫 번째, 두 번째, 세 번째 인자를 받는다. 따라서 ebp 변조를 통해, SFP를 변조해서 RTL 기법을 사용할 수 없게 되었다.

(fake ebp 사용 불가능)

하지만 다수의 ret instruction으로 RTL 기법은 사용할 수 있다.

 

 

ret instruction을 이용하여 스택 상 return address보다 낮은 곳에 있는, 즉 높은 주소에 있는 곳으로 esp를 내려 원하는 인자의 위치로 옮길 수 있다.

 

FC4에서 RTL 기법을 사용해서 문제를 풀어보도록 하자.

 

#RTL 공격을 하기 위해 필요한 정보

-buffer부터 SFP(Saved Frame Pointer), RET(Return Address)까지의 거리

-return address와 그 뒤를 덮을 ret instruction이 있는 주소

-실행할 함수의 주소

-RET보다 높은 주소에 있는 영역 중 인자로 참조하기에 적당한 주소

 

(gdb) set disassembly-flavor intel

(gdb) disass main

 

 

strcpy 함수 호출할 때 앞과 다르게 버퍼의 크기가 딱 256 바이트로 dummy가 사라졌다.

따라서 payload 작성 시 dummy를 생각하지 않고 buffer+SFP는 딱 260 바이트로 생각하자.

ret instruction의 주소는 0x08048451

 

#execl 함수에서 사용할 인자 찾기

execl 함수에서 사용할 인자 찾기 위해 <main+108>에서 bp를 잡고 실행시켜보자.

 

 

0xbfe72868 부분에 0 값이 있어 NULL로 쓸 수 있기 때문에 그 바로 위에 있는 0x007bad44 영역을 보니

 

 

NULL 문자로 끝나는 긴 16진수가 있다.

 

그리고 <__libc_start_main>은 알 수 있듯이 main 함수보다 high address에 위치하는 주소이다.

이 영역을 사용해서 ret instruction을 이용해 이 영역까지 esp를 끌고와서 execl 함수의 시작주소로 갈 수 있도록 하는 것이 목적이다. 

 

”\x85\xc0\x75\x53\x65\xa1\x54”

 

이것을 실행파일명으로 사용하고, 0x007bad44execl 함수의 첫 번째 인자로 넣는다.

 

$ ln -n shell `python -c ‘print ”\x85\xc0\x75\x53\x65\xa1\x54”'`

 

#execl 함수의 주소

 

 

#공격코드

execl 함수와 인자 사이에 4 바이트를 띄워줘야 한다.

따라서 0x007bad44 영역 - 8바이트 위치에 execl 함수의 주소를 넣고, execl 함수 주소 넣는 전까지 ret instruction 주소로 채운다.

0x8048451esp에 대한 썰매의 역할을 해서, eip가 계속 ret 명령을 실행하게 되어 espexecl 함수 주소가 있는

 

 

0xbfcf574c까지 내려온다.

이 상태에서 ret instruction에 의해 eip execl 함수의 시작 주소로 들어가게 된다.

 

payload로 보면

 

Buffer+SFP(260) + RET~0xbfcf5754-8 (12) + &execl(4)

 

이렇게 되고, 공격코드는

 

$ ./cr `python -c ‘print ”A”*264+”\x51\x84\x04\x08”*12+”\x68\x2d\x83”'`

 

이러하다.

 

 

됐다!!!!

성공적으로 쉘을 얻었으니, 원본파일에 공격해보자.

 

 

잊지 않고 홈 디렉터리에도 shell에 대한 “\x85\xc0\x75\x53\x65\xa1\x54” 이름의 심볼릭 링크 파일을 만들자.

 

 

그리고 공격하면 성공!!

 

 

“”come on, come over””

728x90
반응형

'SYSTEM HACKING > LOB Fedora Core' 카테고리의 다른 글

[FC4] enigma -> titan  (0) 2019.07.25
[FC4] cruel -> enigma  (0) 2019.07.25
[FC4] Fedora Core 4 에서의 RTL 기법  (0) 2019.07.14
[FC4] 환경요약  (0) 2019.07.13
[FC3] dark_stone  (0) 2019.07.12

관련글 더보기