본문 바로가기

Wargame, CTF/protostar

stack7

소스코드

6번이랑 별 달라진게 없지만 ret가 갈 주소를 검사하는 부분이 더 엄격해졌다

이젠 6번 처럼 ret에 system함수의 주소를 삽입하는 것도 불가능해 보인다

system함수의 위치

system의 위치가0xf로 시작하기 때문에

f &(and) b 연산으로 하면 b가나와서 걸리기 때문

이럴 때는

 

이런식으로 getpath의 ret을 main의 ret주소를 넣어주면

ret를 검사하는 부분에 걸리지 않고 그밑에 system과 /bin/sh로 채울 수 있다

(main문엔 ret를 검사하는 부분도 없고)

 

이러한 방식을 ROP(Return Oriented Programming)이라고 함

 

이제 구해야 할 것

buffer에서 ret(getpath)까지의 길이

main의 ret주소

system 주소

/bin/sh 주소

 

buffer에서 ret까지의 길이 80바이트

 

main의 ret주소

 

system의 주소

 

/bin/sh 의 주소

 

exploit 코드
exploit코드 실행

성공

 

이건 쉬운문제라 ROP를 한번 밖에 안썼지만

실전은 매우 많이 써야함

'Wargame, CTF > protostar' 카테고리의 다른 글

format2  (0) 2020.02.26
format1  (0) 2020.02.24
stack6  (0) 2019.08.26
stack5  (0) 2019.08.26
stack4  (0) 2019.08.25