의미없는 블로그
protostar6 - stack5.c (쉘코드 생성, 리눅스 어태치 방법) 본문
코드가 아주 간단하다
지난번에는 코드 안에 실행시키고자 하는 특정 함수가 있어서
RET 주소가 그 함수를 가리키도록 조작해서 문제를 풀었는데
이번에는 코드 안에 아무것도 없다
문제의 의도는 스택에 쉘코드를 삽입해서 RET 주소가 쉘코드 위치를 가리키게하여 실행시키는 것~
스택 구조는 아래와 같은데 buffer[64] 에다가 입력값을 초과시켜 넣어서
RET 아래에다가 쉘코드를 집어넣고
RET 는 쉘코드 주소를 넣어서
RET 되면 쉘코드 위치로 넘어가 실행되게끔 한다
buffer[64] AAAAA...
------------- → -------------
RBP AAAAA...
------------- → -------------
RET RET(쉘코드 주소)
------------- → -------------
쉘코드
코드 컴파일하여 실행파일 생성하고
gdb 로 실행시켜서
RET 에다가 BreakPoint 걸고
임의 패턴 100개 생성해서 입력값으로 buffer[64] 에 집어넣기
RET 에서 BreakPoint 걸려있는것 확인할 수 있고
그때 스택의 젤 위에 값이 IAAeAA4AAJAA... 이다 (RET 는 스택의 젤 위에 값을 빼다가 그 값으로 이동함)
pattern offset 으로 해당 값 확인해보면 72 이다
그러니까.. 다시 스택 구조에서 보면
RET 주소를 그 다음 주소값으로 바꾸고
거기다가 쉘코드를 넣어놓으면
RET 될때 쉘코드로 넘어가서 실행하게 된다
일단 쉘코드를 만들어야 하는데
칼리에는 msfvenom 이란게 있어서 얘로 쉘코드 만들 수 있다고 함
[msfvenom -l payloads | grep linux] 하면 리눅스용 페이로드를 검색
그중에서 [linux/x64/exec] 라는것을 사용할 것이다
[msfvenom -p linux/x64/exec CMD='/bin/sh' -f python]
-p 는 페이로드라는 뜻 같고
CMD 는 실행하려는 것 (/bin/sh 을 실행하려고 한다)
-f 는 출력옵션 (python 으로 출력한다)
이제 이 쉘코드를 사용해서 python 을 짜본다
AAAAA
-------------
AAAAA
-------------
RET RET(쉘코드 주소)
-------------
쉘코드
'# 나 > pentest (WEB)' 카테고리의 다른 글
SQL 인젝션 모듬구이 (1) | 2019.11.18 |
---|---|
XSS 모듬구이 (0) | 2019.11.12 |
protostar5 - stack4.c (return 덮어씌워서 코드 흐름 바꾸기) (0) | 2019.08.29 |
VM 환경 Local 로 포트포워딩 하기 (0) | 2019.08.27 |
protostar4 - stack3.c (pwn 사용해서 공격하기 - return2lib) (0) | 2019.08.26 |