쉘: 명령 해석기(일종의 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 |