코드를 보니 함수와 함수 포인터가 사용되었다.

스택의 구조를 한번 그려보면

| buf(20) | dummy() | void(*call)()=printit | dummy() | crap(4) |

과 같은 구조일 것이다.

따라서 우리는 objdump를 이용해 shell의 함수주소값을 알아낸 후 level15와 같게 거리가 40이므로 아래와 같이 익스플로잇을 짤 수 있다.


Flag : king poetic

'IT > FTZ' 카테고리의 다른 글

[FTZ] level18  (0) 2016.07.10
[FTZ] level17  (0) 2016.07.10
[FTZ] level15  (0) 2016.07.10
[FTZ] level14  (0) 2016.07.10
[FTZ] level13  (0) 2016.07.10


코드를 보니 level14와는 달리 *check로 변했다.

버퍼의 시작주소부터 check까지의 거리를 구해야하는데,

소스코드를 복사해서 주소값을 알아내는 코드를 짰다.

거리는 40바이트라고 한다.


이제 attackme를 까서 0xdeadbeef의 위치를 찾았더니 

0x80484b2에 있었다.

따라서 버퍼부터 40만큼 채워준후 deadbeef가 있는 주소값을 넣어준다.


사진에는 짤렸지만, 익스플로잇은 (python -c 'print "A"*40+"\xb2\x84\x04]x08"';cat) | ./attackme 이다.


Flag : about to cause mass

'IT > FTZ' 카테고리의 다른 글

[FTZ] level17  (0) 2016.07.10
[FTZ] level16  (0) 2016.07.10
[FTZ] level14  (0) 2016.07.10
[FTZ] level13  (0) 2016.07.10
[FTZ] level12  (0) 2016.07.10

crap과 check라는 4바이트짜리 변수가 생겼다

구조는

| buf(20) | dummy() | crap(4) | dummy() | check(4) |

이번문제는 간단하게 check부분이 0xdeadbeef로 덮어지면 되는 문제이다.

따라서 dummy부분이 어느정도인지 모르니 

채워지게 넉넉잡아 4*15=60바이트 정도 채웠다. 

Flag : guess waht

'IT > FTZ' 카테고리의 다른 글

[FTZ] level16  (0) 2016.07.10
[FTZ] level15  (0) 2016.07.10
[FTZ] level13  (0) 2016.07.10
[FTZ] level12  (0) 2016.07.10
[FTZ] level11  (0) 2016.07.10

+ Recent posts