본문 바로가기
Write Up/Pwnable

passcode

by wlgpdnjs 2018. 1. 14.

passcode를 실행하면 이름, passcode1, 2를 입력받는다.


C소스를 보면 welcome함수에서 이름을 크기 100짜리 배열에 입력받고 login함수에서 passcode1, 2를 입력받는데 &가 빠진채로 입력받는다.




원래는 passcode1,2의 주소를 알려줘야되니까 &passcode1이 되어야 하는데 &가 빠진것.




gdb로 열어보면 name이 ebp-0x70 ~ ebp-0x10이고 passcode1이 ebp-0x10인데 int니까 ebp-0x10 ~ ebp-0xc가 되서 name과 겹치게 된다.

근데 입력받을 때 &를 빼고 scanf를 사용하니까 name을 입력한 값이 주소가 된다.

즉 name에서 끝에 4바이트 값을 aaaa를 넣으면 passcode1에서 주소를 aaaa로 인식하게된다.

따라서 passcode1을 입력하면 그 입력값이 aaaa주소로 저장되는 것.



키 값을 보기 위해 system("/bin/cat flag")가 실행되게 해야하는데 &가 빠진것 때문에 if문을 통과할 수가 없어서 그 전에 실행되는 fflush(stdin)의 got를 system함수를 호출하는 주소로 주어서 실행되게 한다.

got주소가 0x804a004이고 system함수 호출 부분 주소가 0x080485e3니까 A*96 + 0x804a004 + 0x080485e3를 입력한다.




'Write Up > Pwnable' 카테고리의 다른 글

[Pwnable.kr] cmd2  (0) 2018.02.12
[pwnable.kr] cmd1  (0) 2018.01.29
[Pwnable.kr] lotto  (1) 2018.01.21