ii4gsp
Pwnable.kr - passcode 본문
ssh서버에 접속해주고 passcode파일의 소스코드를 보자.
login() 함수를 보면 변수 passcode1, passcode2가 있다.
scanf()함수를 통해 입력을 받는데 일반적으로 scanf()를 사용할때 scanf("%d", &passcode1);형태일것 이다.
하지만 scanf("%d", passcode1); &가 빠져있다.
passcode1이라는 변수에 값을 저장하는게 아니라 passcode1이라는 변수 안에 있는 값의 주소에 입력값을 넣는다.
scanf()함수를통해 원하는 주소의 값을 입력한다면 passcode를 조작할 수 있다.
welcome()함수에서는 name변수에 100byte를 할당한다.
scanf()함수로 100byte만큼만 입력을 받는다.
<welcome+38>부분을 보면 name변수는 ebp-0x70부터 할당된다.
<login+24>부분을 보면 passcode1는 ebp-0x10부터 할당 되고
<login+70>부분을 보면 passcode2는 ebp-0xc부터 할당 된다.
welcome()함수의 name변수는 0x70부터 입력을 받는다.
name 100byte를 입력받을때 마지막 4byte로 passcode1을 조작 할 수 있다.
welcome()함수에서 scanf()함수로 96byte를 채워주고 4byte를 조작해주면된다.
fflush의 got를 구해주자.
fflush의 got는 0x804a004이다.
0x080485e3의 주소에는 "/bin/cat flag"가 들어있다.
scanf()함수는 %d로 입력을 받기때문에 0x080485e3을 10진 정수로 입력해주면 된다.
Flag: Sorry mom.. I got confused about scanf usage :(
payload
(python -c 'print "\x90" * 96 + "\x04\xa0\x04\x08"';cat) | ./passcode
134517147
'시스템 해킹 > pwnable.kr' 카테고리의 다른 글
Pwnable.kr - random (0) | 2020.02.04 |
---|---|
Pwnable.kr - flag (0) | 2020.02.04 |
Pwnable.kr - bof (0) | 2020.02.04 |
Pwnable.kr - collision (0) | 2020.02.04 |
Pwnable.kr - fd (0) | 2020.02.04 |