소스를 아~~주 간략히 소개하자면 입력한 값을 base64로 디코딩하고
그 값이 md5 해쉬값과 같다면 correct를 실행하는건데
일단 12바이트를 넣어봤다.
이렇게 12바이트를 base64로 인코딩하고
그 값을 넣어준다.
EBP를 보면 마지막에 넣은 4바이트로 EBP가 설정된 것을 볼 수 있다.
그럼 이걸 이용해서 우리의 목표인 correct 함수를 실행해보자.
끝부분을 corret함수로 설정해보았다. correct의 주소는 0x0804925f인데
ebp에 설정되니 -4값인 5b를 넣어주고 실행해 봤다.
ASLR이 걸린 상태여서 저부분을 바로 correct로 설정할 수 없다.
고정값을 사용하고 있는 bss의 input을 사용하도록하자.
즉 ebp를 문자열 입력 시작부분으로 덮는 것이다.
이렇게 값을 넣고 실행해보면
EIP가 가운데 4바이트로 설정되는 것을 알 수 있다.
EBP값을 설정했기 때문에 pop ebp를 하면서 4바이트가 증가된다.
그래서 input값에 4바이트를 더한 EFGH를 가르키게 된다.
그렇다면 가운데 4바이트를 원하던 correct 함수로 변경해보면
input값을 비교하는 부분에서 막히게 된다
우연히도 앞에 4자리가 저 값을 나타낸것을 알 수 있는데
[0xdeadbeef] [corret()] [input]
이렇게 작성하면 /bin/sh를 실행할 수 있다.
하지만 애초에 가운데 4바이트를 시스템 함수로 설정하면
그냥 앞에 4바이트는 아무값을 넣어도 상관없다.
'WARGAME > Pwnable.kr' 카테고리의 다른 글
pwnable.kr dragon (0) | 2017.01.11 |
---|---|
pwnable.kr coin1 (0) | 2017.01.09 |
pwnable.kr passcode (0) | 2016.03.29 |
PWNABLE KR ascii_easy (0) | 2016.03.28 |
PWNABLE KR uaf (0) | 2016.03.24 |