level19의 힌트를 확인하였다.
bash shell의 실행이나 권한을 상승시키는 코드가 없으므로 만들어야 한다.
코드의 내용을 보자면 char 유형의 buf 20byte를 만들었고,
gets 함수를 사용하여 값을 가져오지만 크기를 제한하지 않으므로 오버플로우가 발생할 수 있다.
코드를 분석하기 위해 tmp 디렉토리로 복사했다.
메인 함수에 0x28(40byte) 만큼이 할당되어 있다.
buf (20) + bummy(20) + SEP (4) + RET (4) 으로 생각할 수 있다.
총 44byte의 "A" 값을 채운 후 RET의 자리에 환경변수의 주소값을 대입하면 된다.
setuid를 실행하는 코드를 짜서 해보려 했는데
생각처럼 작동하지 않아서 setuid를 실행할 수 있는 쉘코드를 구글링했다.
그래도 알아낸건 setruid(3100, 3100)으로 하면 된다는 것 ?
쉘코드를 등록한 환경변수의 주소를 출력했다.
이제 이 주소를 대입하여 페이로드를 작성하면 된다.
[ 페이로드 ]
buf (20byte) + dummy (20byte) + SFP(4byte) + RET(4byte// 환경변수의 주소 대입 )
"A"*44 + "\xb1\xfb\xff\xbf"
드디어 한 문제 남았다.
level20의 패스워드는 " we are just regular guys "