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
관리 메뉴

의미없는 블로그

protostar3 - stack2.c (Peda 입문, 그리고 환경 스택) 본문

# 나/pentest (WEB)

protostar3 - stack2.c (Peda 입문, 그리고 환경 스택)

SaltLee 2019. 8. 22. 18:24

 

코드 작성~

 

modified 가 0x0d0a0d0a 일때 풀린다

마찬가지로 buffer 로 덮어씌워서 0x0d0a0d0a 로 만들어 주면 되고

 

strcpy(buffer, variable) 을 보면 buffer 값은 variable 에서 가져오는데

variable 는 getenv("GREENIE") 에서 가져옴~

(getenv 는 환경변수 값 불러오는 거라고 함 GREENIE 라는 환경변수에서 값을 불러온다는 뜻)

 

gcc 로 컴파일 하고 실행(./stack2) 해보면

GREENIE 환경변수 세팅하라고 뜬다

 

[export GREENIE='AAAAAA'] 로 환경변수 세팅해 주면된다

다시 실행해보면 아까처럼 메세지는 안뜨고 이제 문제 풀면 됨~

 

저번꺼 처럼 직접 거리 계산해서 푸는 방법으로 하면..

[cmp eax, 0xd0a0d0a] 요기가 modified 값 비교하는거니까 여기다가 breakpoint 걸고

(0x0d0a0d0a 나 0xd0a0d0a 나 같은듯하다..)

 

<+86> 에서 modified 값에 rbp-0xc 가 가리키는값 들어간다

<+75>, <+78>, <+81> 세 줄은 strcpy(buffer, variable) 이고 bufferrbp-0x50 이 가리키는값 들어간다

 

rbp 에서 각각 위로 0xc 만큼에서, 0x50 만큼에서 값이 시작되니까

0x50 - 0xc = 44, Dex 로 바꾸면 68 만큼 차이난다~

 

그래서 68개 임의문자열에다가 0d0a0d0a 붙여서 넣으면 되는데

이렇게 계산하는법 말고 PEDA 라는 툴을 설치해서 간편하게 하는법을 쌤이 알려주셨다~

 

PEDA 는 gdb 와 같이 실행되서 exploit 하기 쉽게 도와주는 툴이라고 하는데

칼리에서는 아래 세 줄만 입력하면 설치된다

 

설치하고 gdb 켜면 gdb-peda$ 라고 뜨고

 

[pattern create 100] 으로 임의의 패턴을 생성하고

[pattern offset 패턴값] 으로 패턴값이 몇번째 있는지 확인하는 기능이 있다

 

A B C D E F G

0 1  2 3 4 5 6

위에서 G를 찾으면 offset 은 6으로 나오고 그말은 G 앞에 6개 문자가 있다는 것

무튼 이런식이다~

 

GREENIE 에다가 패턴 집어 넣고 다시 gdb 돌려본다

 

breakpoint 건 부분까지 run 해보면

RAX(EAX)0x41413341 들어가 있는데

지금 <+86> [mov eax, DWORD PTR[rbp-0xc]] 까지 실행된 상태에서

eax 값이 0x41413341 이라는 것이다~

 

저 값의 offset 이 뭔지 찾아보면 68 이다 [pattern offset 0x41413341]

eax 에 저 값이 들어가기 전까지 68 개의 문자가 있다는 것~

즉 eax 를 0d0a0d0a 로 만들려면 68 개의 문자에다가 0d0a0d0a 를 붙여 넣으면 된다는 것

 

[python -c " "] 를 사용해서 'a' 68개랑 '\x0a\x0d\x0a\0d' 합친것 만들고 GREENIE 에 넣는다

0d0a0d0a 인데 또 그 리틀엔디안인가 그 거꾸로 때문에 0a0d0a0d 로 만드는 것 같다

파일 실행하면 you have correctly modified the variable 뜬다~

 

gdb 로 RAX(EAX) 보면 0xd0a0d0a 로 잘 들어가 있다

 

Comments