티스토리 뷰

[Hackerschool] F.T.Z

해커스쿨 - level13

lHATAl 2017. 11. 15. 22:23

level13으로 로그인을 하여 힌트를 우선 읽어보자.




본 문제는 스택가드에 관련된 문제이다.


스택가드는 버퍼 오버플로우를 방지하기 위한 방어 방법의 하나로, 레벨12의 문제를 예로 들어보자.


buffer(256bytes) + dummy(8bytes) + SFP(4bytes) + RET(4bytes)를 덮어 씌워 버퍼 오버 플로우를 일으키는 공격이었다. 하지만 여기에 스택가드를 추가하여

buffer(256bytes) + stackguard(4bytes) + dummy(8bytes) + SFP(4bytes) + RET(4bytes)로 구성하게 되었을 때


이미 저장되어있는 스택가드에 대하여 값이 변동이 있다면 버퍼 오버플로우가 발생했다는 것을 쉽게 감지할 수 있으므로 버퍼 오버플로우에 대해 방어를 할 수 있게 된다.


이에 대한 공격 방법으로는 스택가드의 값과 메모리 주소를 사전에 정확하게 안 뒤에 해당위치의 값은 변동을 주지 않고 유지한 상태로 RET주소를 변동해주는 것이 가장 큰 목표이다.


다음 문제는 버퍼의 크기가 1024이다.


gdb로 디스어셈블링한 코드를 한번 살펴보자.




우선 esp가 0x418 (1048)만큼 차지하고 있는 것을 알 수 있는데 어딘가에 더미가 쌓여 있음을 추측할 수 있다. 실행을 할 수 있어야 하지만 현재 구축된 로컬 서버에서는 에러가 발생하여 gdb를 정상적으로 수행할 수 없게되었다. 하지만 i 의 값이 정해져 있기때문에 esp에 대해서 분석을 해본다면 쉽게 알 수 있을 것이다.


이를 추론하여 공격 방법으로는 


./attackme `python -c 'print "shellcode"+"A"*[i변수 직전까지]+"\x67\x45\x23\x01'+"A"*[RET까지]+"[buf의 시작주소]"'`


라는 방식으로 공격을 하면 해결할 수 있다.

'[Hackerschool] F.T.Z' 카테고리의 다른 글

해커스쿨 - level15  (0) 2017.11.16
해커스쿨 - level14  (0) 2017.11.16
해커스쿨 - level12  (0) 2017.11.15
해커스쿨 - level11  (2) 2017.11.06
해커스쿨 - level10  (0) 2017.11.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함