Write up/Pwnable.tw
[Pwnable.tw] calc
ipwn
2018. 11. 2. 13:49
보호기법
canary, nx걸려있음, 32bit static 컴파일 된 binary
분석
사실상 pwnable.tw풀면서 분석하기 제일 어렵지 않았나 하는 생각이 듦.
vuln : 간단하게 말하자면 수인지, 연산자인지 검증하는 부분에서 첫 문자가 연산자인 경우는 체크하지 않음.
vector :
이를 통해서 수들을 관리할 때 index 번호를 조작할 수 있음. -> Out Of Bound.
그 뒤에는 static 컴파일 된 binary이니, 널려있는 가젯들을 통해서 shellcode처럼 가젯잘 써주고 배치해주면 됨.
shell.
void __cdecl eval(number *num, char oper) { if ( oper == '+' ) { num->num[num->index - 2] += num->num[num->index - 1]; } else if ( oper > '+' ) { if ( oper == '-' ) { num->num[num->index - 2] -= num->num[num->index - 1]; } else if ( oper == '/' ) { num->num[num->index - 2] /= num->num[num->index - 1]; } } else if ( oper == '*' ) { num->num[num->index - 2] *= num->num[num->index - 1]; } result = num; --num->index; } |
입력받을 때 맨 앞 부분이 연산자인 걸 구분하지 않는 것과, 위 코드 두 부분이 취약한 부분이다.