감자 텃밭

Gremlin 문제 본문

my_study/LOB

Gremlin 문제

g2h 2021. 5. 17. 12:13

이전 gate문제와 동일하게 일단 접속후 ls -l 명령어를 통해 해당 경로에 디렉토리 및 파일을 확인하였다.

역시 같은 내용이다. cobolt 파일과 .c 파일이 존재하였다. 일단 .c파일을 확인하여 해당 실행파일의 소스코드를 확인하였다.

해당 소스코드의 내용은 버퍼에 16바이트를 할당하고 인자값이1개이상이여야하며, 나머지는 이전과 같이 buffer에 인자값을 복사(전달)하고 buffer문자열을 출력한다.

 

gate문제와 비슷하지만 buffer의 크기가 16바이트이므로 쉘코드를 삽입할 수 없다.

해당 버퍼에 크기가 작다면 환경변수를 만들어 환경 변수에 쉘코드를 삽입하면 된다!!

일단 이전과 같이 문제진행을 위해 tmp디렉토리로 이동후 작업을 하였다.

 

my_s라는 환경변수를 설정하고 그 안에 25바이트의 쉘코드를 삽입하였다.

 

그 후 payload를 작성을 위해 이전과 같은 방법으로 buf(16)+sfp(4)를 채우고 ret(4)에 해당 환경변수(쉘코드가 존재)를 삽입하여 쉘을 얻기위해 환경변수의 주소가 필요했다.

해당 환경변수의 주소를 알아내기위해 c코드를 작성하였다

 

포인터 변수를 이용하여 하나의 인자를 받으면 해당 인자의 주소를 반환하는 프로그램

%p 포맷스트링을 이용하여 해당 환경변수의 주소값을 얻을 수 있는 코드이다.
(# getenv함수는 getenv( name)로 해당 name에 해당하는 이름의 환경변수를 찾아준다)

해당 프로그램을 만들고 프로그램을 이용하여 환경변수의 주소를 알아내었다.

해당 환경변수의 주소는 0xbffffe9a

이렇게 얻은 주소값을 통해 payload를 작성하여 프로그램을 실행시켰다.!!!!!

?!?!??!?!?!?!?! 하지만 무슨 이유에선지 Segmentation fault 오류가 뜬다.... 그래서 구글링결과

메모리 주소상에 문제가 있을 수 있다 하여, 환경변수 기본 쉘코드 앞에 nop(\x90)을 충분히 넣고 원본파일이 존재하는 경로로 돌아가 실행 하였다.

(두구두구두구)

그랬더니 성공적으로 쉘을 획득할 수 있었다!!!

flag = hacking exposed

 

'my_study > LOB' 카테고리의 다른 글

wolfman  (0) 2021.05.20
orc  (0) 2021.05.19
goblin  (0) 2021.05.18
cobolt  (0) 2021.05.18
Gate 문제  (1) 2021.05.17