의미없는 블로그
protostar3 - stack2.c (Peda 입문, 그리고 환경 스택) 본문
코드 작성~
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) 이고 buffer 는 rbp-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 로 잘 들어가 있다
'# 나 > pentest (WEB)' 카테고리의 다른 글
VM 환경 Local 로 포트포워딩 하기 (0) | 2019.08.27 |
---|---|
protostar4 - stack3.c (pwn 사용해서 공격하기 - return2lib) (0) | 2019.08.26 |
protostar2 - stack1.c (원하는 스택 바꾸기) (0) | 2019.08.20 |
[Tools] Burp Helper(Plugin) 설치 (0) | 2019.08.19 |
[Tools] Burp Suite HTTPS(SSL) 캡쳐하기 (1) | 2019.08.19 |