Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

의미없는 블로그

protostar6 - stack5.c (쉘코드 생성, 리눅스 어태치 방법) 본문

# 나/pentest (WEB)

protostar6 - stack5.c (쉘코드 생성, 리눅스 어태치 방법)

SaltLee 2019. 9. 17. 20:14

 

코드가 아주 간단하다

 

지난번에는 코드 안에 실행시키고자 하는 특정 함수가 있어서

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(쉘코드 주소)

-------------

쉘코드

Comments