[pwnable.kr] simple login - 50pt

해킹대회 문제 풀이 연습장소

Moderator: amesianx

Post Reply
gee8195
Posts: 34
Joined: Thu Jul 21, 2016 5:12 pm

[pwnable.kr] simple login - 50pt

Post by gee8195 » Fri Sep 23, 2016 3:57 am

1.png
1.png (16.92 KiB) Viewed 330 times
인증을 할수있겠냐고 묻습니다... 뚫어보겠습니다.

2.png
2.png (14 KiB) Viewed 330 times
우선 ida로 main()함수부터 살펴보면, 입력을 받고 그 입력받은 값을 Base64Decode를 했을때 12글자보다 크면 "Worng Length"를 출력한뒤
종료하고, 크지않을경우 auth()함수를 호출합니다. 그럼 auth()함수를 한번 살펴보겠습니다.

3.png
3.png (30.33 KiB) Viewed 330 times
calc_m5()함수가 보이는군요... 입력받은 값을 Base64Decoding한뒤, calc_m5()함수로 계산한고 "f87cd601aa7fedca99018a8be88eda34"
값과 같으면 통과할 수 있습니다. 통과를 한뒤, 마지막으로 남은 correct()함수가 있습니다.

4.png
4.png (80.82 KiB) Viewed 330 times
흠... offset input값과 0xdeadbeef를 비해서 같으면 system("/bin/sh")를 실행할수 있겠습니다.

5.png
5.png (18.38 KiB) Viewed 330 times
일단 12byte를 넣어봤더니 세그폴트가 떴습니다. 메모리를 확인을 해봐야겠습니다.

6.png
6.png (29.77 KiB) Viewed 330 times
일단 입력할 값은 Base64Decode를 거칠것이기 때문에, enconding 시켜서 입력을 하겠습니다.
파이썬으로 적당히 만들어서 실행했습니다.

7.png
7.png (121.77 KiB) Viewed 330 times
ebp가 마지막 4byte인 33333333로 조작 됬습니다. 그래서 세그폴트가 났군요...

8.png
8.png (95.72 KiB) Viewed 330 times
correct()함수를 좀더 살펴보겠습니다. input을 출력해보니 예쁘게 들어갔습니다.
주소를 넣어서 조작할 수 있을것 같습니다. 일단 맨앞에는 0xdeadbeef를 넣고, 두번째는 correct()함수의 ebp(시작주소)
그리고 마지막에는 input의 주소를 넣어서 가운데 ebp를 가르키도록 하면 되겠습니다.

9.png
9.png (36.53 KiB) Viewed 330 times
적당히 코드를 수정해서 적용해보겠습니다.

10.png
10.png (53.5 KiB) Viewed 330 times
후.. sh명령어가 실행되고 플래그를 획득했습니다~

Post Reply

Who is online

Users browsing this forum: No registered users and 18 guests