'pwnable'에 해당되는 글 33건


Download : http://pwnable.kr/bin/bof

Download : http://pwnable.kr/bin/bof.c

리눅스에서 wget을 사용해서 두 파일을 받아 코드를 열어보았다.

보아하니 main에서 func함수에 0xdeadbeef를 넘기고, 오버플로우를 사용해서 이 값을 0xcafebabe로 바꿔야하는 것으로 보인다.



func함수에서 cmp를 하기 전에 BP를 걸고 실행해 보자.



보아하니 버퍼가 시작하는 주소는 0xffffcfbc이고

0xdeadbeef가 있는 곳은 0xffffcff0이다.

두개의 거리를 구해보자.



뺏을때 52가 나오는 것을 보니 52만큼 채우고 0xcafebabe가 있는 듯 하다.


원래 python을 사용해 익스코드를 짜려고 했으나 실패해서 그냥 | 를 사용해서 넣었다.


'pwnable > Toddler's Bottle' 카테고리의 다른 글

[Toddler's Bottle] random  (0) 2018.05.21
[Toddler's Bottle] passcode  (0) 2018.05.21
[Toddler's Bottle] flag  (0) 2018.05.21
[Toddler's Bottle] collision  (0) 2018.05.18
[Toddler's Bottle] fd  (0) 2018.05.18
블로그 이미지

천재보다는 범재

,

이번 코드는 복잡해 보이지만 뜯어보면 간단하다.

argv를 입력받고, argv길이가 20이어야 하며, hashcode = 0x21DD09EC 와 check_password(argv[1]) 이 같으면 플래그를 볼 수 있다.


check_password를 보자


입력받은 const char* p 를 int*로 캐스트한다.

int는 4byte이기 떄문에 4바이트씩 받는것으로 보인다.


그 후 for문을 이용해 res 에 ip[i] 를 더 해준 후, res를 return한다.


즉 20개의 글자를 4개씩 잘라 5번 더해서 hashcode를 만들어 주면 된다.

hashcode를 5로 나눠보자.


0x6C5CEC8이므로 \xc8\xce\xc5\x06을 5번 넣으면 될줄 알았다.


하지만 플래그가 안 출력되길래 5를 다시 곱해보았다.


보다시피 원래 hashcode보다4 줄었다. 그래서 \xc8\xce\xc5\x06  를 4번 넣고 마지막에는 \xcc\xce\xc5\x06  를 넣어보았다.


보다시피 flag가 출력되었다.

'pwnable > Toddler's Bottle' 카테고리의 다른 글

[Toddler's Bottle] random  (0) 2018.05.21
[Toddler's Bottle] passcode  (0) 2018.05.21
[Toddler's Bottle] flag  (0) 2018.05.21
[Toddler's Bottle] bof  (0) 2018.05.19
[Toddler's Bottle] fd  (0) 2018.05.18
블로그 이미지

천재보다는 범재

,



너무 간단해서 뭐라 할말이 없다.


그냥 인자 - 0x1234 (dec :  4660)


가 fd로서 read에 들어가는데

fd의 0,1,2는 예약되어 있다. 

0은 stdin

1은 stdout

2는 stderr이다.


따라서 우리는 입력을 받아야 하므로 fd=0을 만들면 된다.

인자로 4660을 넘겨주고, 실행된 read함수에 LETMEWIN을 넘겨주면 플래그를 볼 수 있다.


'pwnable > Toddler's Bottle' 카테고리의 다른 글

[Toddler's Bottle] random  (0) 2018.05.21
[Toddler's Bottle] passcode  (0) 2018.05.21
[Toddler's Bottle] flag  (0) 2018.05.21
[Toddler's Bottle] bof  (0) 2018.05.19
[Toddler's Bottle] collision  (0) 2018.05.18
블로그 이미지

천재보다는 범재

,