ssh로 서버에 접속해서 소스코드를 보았다. 사용자 이름을 받고 password1,2를 통과하면 flag를 출력해주는 프로그램이였다.
그래서 a를 많이 넣어보니 password를 입력하지 않았는데 checking에 들어가고 login failed하는 것을 알 수 있었다 bof 취약점이 있는 듯 하다. 그래서 name변수와 password1,2사이의 거리를 얼마나 떨어져 있는지 구해보기로 한다.
main --> welcome --> login 순으로 실행된다.
welcome 함수를 보면 esp-0x88만큼의 공간을 만들고 ebp-0xc에 eax값을 저장하고 ebp-0x70주소를 edx에 담는 걸로 보아 ebp-0x70주소가 문자열을 받는 시작주소인 듯하다. 후에 저장해뒀던 원래의 eax값을 다시 넣어준다.
passcode1이 ebp-0x10에 저장 되는 것을 알 수 있다.
정상적인 형식이라면 passcode1의 주소를 참조해서 그 주소의 공간에 값을 받지만
위와 같이 passcode1앞에 &가 없으면 passcode1이 담고있는 값을 주소로 인식하고 그 주소에 값을 저장하게 된다.
그래서 우리는 fflush plt안에 담고있는 fflush got주소를 system함수가 시작되는 주소로 변경시켜줘서 흐름을 바꿔주기로 한다.
<<낮은주소--- name버퍼(96=0x70-0x10) | passcode = fflush got (4) | 프로그램내에 system("/bin/cat flag")가 시작되는 주소 (4) ---높은주소>>
fflush got의 주소 = 0x0804a004
프로그램내에 system("/bin/cat flag")가 시작되는 주소 = 0x080485e3 = 10진수로 134514147
10 진수로 넣어주는 이유는 scanf("%d",passcode1);로 들어가기 때문이다.
'System Hacking > pwable.kr' 카테고리의 다른 글
08.Pwnable leg (0) | 2018.02.15 |
---|---|
06.Pwnable random (0) | 2018.02.15 |
04.Pwnable flag (0) | 2018.02.13 |
03.Pwnable bof (0) | 2018.02.13 |
02.Pwnable col (0) | 2017.11.23 |