cgy12306

[LOB] bugbear 본문

Wargame/LOB

[LOB] bugbear

cgy12306 2019. 9. 30. 10:49


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