본문 바로가기

분식집/해킹..!?

Buffer overflow-쉘 코드 만들기

쉘: 명령 해석기(일종의 UI)

=>사용자의 입력을 받아 exe실행, 커널에 명령을 내릴 수 있는 대화 통로

=>실행 흐름을 조작하려는 목적이기 때문에 당연히 넣어야함.

 

 

쉘 코드 만들기

->쉘 실행 프로그램 작성

->어셈블리 코드를 얻어내고, 불필요한 부분을 뺴고, 라이브러리에 종속적이지 않게 수정

->바이너리 데이터를 만들어냄.

 

 

 

쉘 실행 방식

=>쉘 상에서 쉘 실행을 위해선 '/bin/sh'라는 명령어를 내리면 됨.

 

 

*execve() 함수

=>바이너리 형태의 실행 파일, 스크립트 파일을 실행시키는 함수.

=>const //char// * 형 인자를  요구

파일이름- 넘겨줄 인자들의 포인터 - 환경 변수 포인터

 

해당 조건 만족을 위해 char *shell[2]를 만들고, 각 인자를 채워 주었다.

 

(두번쨰 인자는 argv 라는 인자와 같음, argv[0]는 해당 실행 파일의 이름

argv[1]은 실행시 주어진 첫 번째 인자)

 

 

 

===>이제 컴파일되어 생성될 바이너리 코드를 얻어야 한다.

(이때.execve()함수 떄문에 프로그램이 Linux libc와 얽히게 되는데.

execve()의 역할을 알기 위해 static library 옵션을 주어 컴파일 해야 한다.

)

 

 

 

 

'분식집 > 해킹..!?' 카테고리의 다른 글

html 기초!  (0) 2023.02.23
HTTP의 요청과 응답.  (0) 2023.02.19
Buffer overflow란  (0) 2023.02.15
레지스터 진행 따라가기  (0) 2023.02.15
데이터 통신이란!  (0) 2023.02.10