-
level 19. 풀이System hacking training/Hackerschool F.T.Z 2018. 1. 6. 20:52
all clear 까지 얼마 안남았네용 ㅎ
풀이 시작합니다.
로그인 후 힌트파일을 열어보면 이와 같은 소스코드가 출력됩니다.
기존 문제와 다른 부분은 setreuid()함수가 없는것입니다.
하지만 ls -al attackme 로 attackme의 권한을 확인해 보면
이렇게 setuid가 걸려있는것을 확인 할 수 있습니다.
또한 gets()함수에서 문자열의 길이를 지정하지 않는점을 이용하여 bof 공격을 할 수 있습니다.
스택구조를 확인하기 위해 gdb로 disassemble 해보면
힌트파일의 소스코드와는 다른 40을 할당한것을 알 수 있습니다.
dummy 값이 20이 들어간것이죠.
이제 공격 시나리오를 생각해보면
의미 없는 값을 40바이트로 dummy와 버퍼를 덮어고, SFP 를 4바이트로 덮고, 마지막 RET에 쉘코드의 주소로 덮어주면 될것같습니다.
하지만 여기서 주의할 점이 있죠.
아까도 말씀드렸듯이 setreuid()가 없기때문에 쉘코드에 이를 포함 시켜줘야한다는점입니다.
저는 그 쉘코드를 구글에서 가져왔습니다 :)
그 쉘코드를 환경변수로 등록하고, 그 환경변수의 주소를 알아내어 RET에 덮어주면 성공합니다.
쉘코드를 fkillrra 라는 이름으로 환경변수로 만들어주고..
tmp 디렉토리로 이동하여 fkillrra라는 이름의 환경변수 주소를 구하는 프로그램을 만들어줍니다.
fkillrra 환경변수의 주소를 알아내고..
페이로드를 A*40 (buf[20]+dummy(20)) + SFP (4) + RET (환경변수 주소)
이렇게 작성해주면 쉘을 level20으로 띄울 수 있습니다.
이상 풀이를 마칩니다.
반응형'System hacking training > Hackerschool F.T.Z' 카테고리의 다른 글
level 20. 풀이 (1) 2018.01.20 level 18. 풀이 (0) 2017.12.24 level 17. 풀이 (0) 2017.12.03 level 16. 풀이 (0) 2017.12.03 level 15. 풀이 (2) 2017.11.26