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

LOB level5(orc->wolfman)

by intadd 2016. 9. 13.



LOB level 5



 LOB (orc -> wolfman )




1. cat 명령어를 통하여 wolfman.c 의 소스 코드를 확인합니다.





2. 소스코드 분석 


1. char 형 buffer  [40] 선언


2. argc 가 2 미만일 경우는 오류 메시지 출력 후 종료

 

3. 에그 헌터 환경 변수 사용 금지.


4. argv[1][47]과  "\xbf"와 같지 않다면 오류 메시지 출력 후 종료


5.strcpy 함수 : argv[1]에 있는 것을 buffer에 복사 합니다.


6.printf 로 buffer를 출력 합니다.


7.memset 으로 buffer를 40까지 0으로 초기화 합니다.





3. gdb 권한 문제를 우회하기 위해 tmp에 복사합니다.






4. tmp 로 이동 하여 gdb wolfman 명령어를 입력합니다.



disas main 으로 main을 어세믈리어로 확인합니다.






  5. 공격 방법 



1. argv[2]에 쉘코드를 넣습니다.


2. gdb로 argv[2]가 메모리에 올라오는 주소를 찾습니다.


3. buffer(40)+ebp(4)+argv[2]의 주솟값 (return adress)




gdb로 argv[2]가 시작되는 주소를 찾습니다.


일단 우회해야하는 것은 argv[1][47]!="\xbf" 입니다.


배열은 0 부터 시작되기 때문에 47을 채우고 "\bf"를 채우면 47의 자리에


는 bf가 들어가게 됩니다.


그후 제가 실제로 쉘코드를 넣어줄 장소에는 B라는 문자를 넣어줍니다.




x/1000x $esp명령어로 확인 하실 수 있습니다.



자그럼 42(B)가 시작하는 주소를 찾을 수 있습니다.

넉넉하게 0xbfffc30으로 잡아 줍니다.



그렇다면 아까 위에서 했던 것 처럼

40(buffer)+4(ebp)+argv[2]의 주소)  argv[2](쉘코드)


(쉘코드= 주소값의 오차를 제거하기위해 nop을 사용합니다.)



이렇게 입력주면 되겠습니다. 






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

LOB 5 (darkelf -> orge)  (0) 2017.06.12
LOB level6 (wolfman->darkelf)  (0) 2016.09.13
LOB level 4 (goblin -> orc)  (1) 2016.08.01
LOB level 3 (cobolt -> goblin)  (0) 2016.08.01
LOB level 2 (gremlin -> cobolt)  (0) 2016.08.01

댓글