독개

쉘코드

by #독개#

쉘코드란

▶ 시스템의 특정 명령을 실행할 수 있는 기계어 코드

▶ 쉘을 실행시키기 위한 기계어 코드

▶ 소프트웨어 취약점 이용을 위한 내용부에 사용


Exploit : 프로그램에 존재하는 취약점을 공격하는 행위

Payload : Exploit을 위해 프로글매에 입력되는 데이터 (공격코드 + 의미없는값)

                해커의 명령을 수행하는 코드와 공격 조건을 맞추기 위한 의미 없는 값으로 구성


쉘코드 제작

초급 : C언어 -> 어셈블리어 -> 기계어

고급 : C언어 -> 어셈블리어 -> 기계어


라이브러리 함수 & System Call 함수

라이브러리 함수  : 사용자들이 사용하기 쉽게 라이브러리 화해서 임의로 만들어둔 함수 (라이브러리 파일 필요)

System Call 함수 : 실제 커널에서 사용하는 함수라고 보면된다 (커널에 User가 직접 명령을 줄 수 있는 함수)

printf(); 라는함수는 <stido.h>에서 만들어둔 함수이다.

근데 커널에서 출력하는 함수는 write(); 이다.

printf(); 라는 함수를 실제 오픈해보면 write();라는 함수를 호출하도록 되어 있을것이다. (물론 다른 내용들도 있을거다)

printf("i2Sec\n"); -> write(1, "i2Sec\n", 6); -> 커널에서 출력

System Call 함수를 이용하면 어디서든 라이브러리가 없어도! 커널에 다이렉트로 명령을 줄수가 있다.


동적 컴파일

호출하는 함수를 포함시키지 않고 실행하는 컴퓨터의 공유라이브러리에서 찾아와서 사용하겠다.
▶프로그램 용량절약
▶대부분의 서비스들은 이걸로 컴파일 (걍 기본값)
디버깅시 불편함(얘내가 호출하는 라이브러리까지 가야하니까)

#gcc -o 결과 소스

정적 컴파일

호출하는 함수의 모든 라이브러리(소스)파일을 포함해서 통으로 컴파일
▶프로그램 용량 많아짐
디버깅시 편리함(이안에서만 하면되니까)

#gcc -o 결과 소스 -static


이 프로그램이 어떤 System Call함수를 이용하는지 모르겠다? (strace사용)

▶ 리눅스에 시스템콜분석 #strace 도구 기본내장 되어있는데 이를 활용 (심화로 이걸로 디버깅도 가능하네 ㄷㄷ)


블로그의 정보

독한 개발자

#독개#

활동하기