fkillrra 2018. 2. 16. 21:20

[문제]



문제를 보면 쉘코드를 올려서 문제를 풀 수 없도록 되어있네염


0xbf로 시작하는 모든 주소는 예외처리에 걸리기 때문이지요~ㅎ


하지만 취약점은 존재합니다.


역시나 gets()를 사용하였기 때문에 bof 취약점이 존재하는데요.


쉘코드를 쓸 수 없지만 쉘을 띄우기 위해서는


RTL이라는 기법을 쓸 필요가 있겠네요~



보면 메인은 별게 없고, getpath()를 보면 총 스택공간을 0x68 (dec : 104) 만큼 할당하고


ebp-76이 buf의 시작주소임을 알 수 있습니당


그렇다면 SFP까지 총 80 byte 더미값을 채우고 system()를 return address로 덮고, 인자값을 주기 위해 더미 4 byte 채운뒤 /bin/sh이 위치한 주소를 적어주면 system("/bin/sh")가 실행되어 문제를 풀 수 있습니다.



따라서 system()의 주소를 구하고



코드 섹션에서 키보드로 입력할 수 있는 아스키값 하나 잡고


./(아스키값) 이라는 실행파일에 /bin/sh를 카피하여 쉘이 실행되도록 만들고, 환경변수 PATH에 현재 위치를 등록함으로써


해당 아스키값을 실행하면 쉘이 실행되도록 만들어주었습니다.


여기서 저는 0x44 == D 를 이용하였습니다. (주소는 0x80480e4) 



예상했던대로 쉘을 실행시킬 수 있었습니다.

반응형