pwnable.tw 3

pwnable.tw calc write-up

statically linked 32bit 바이너리다. PIE가 안 걸려있다. 간단한 계산기 프로그램이다. timeout 걸어놓은 거 빼고 특별한 건 없다. 분석하면서 주석을 조금 달아놓았다. get_expr 함수로 expression을 입력받고 parse_expr 함수로 최종적으로 결과가 프린트가 된다. get_expr 함수이다. 화이트 리스트 기반으로 입력을 받는다. 공백 같은 문자들이 제거된다. 그리고 마지막에 NULL byte 하나 넣어준다. init_pool은 v1을 0으로 초기화해준다. parse_expr 함수의 일부다. division by zero를 막으려고 operand가 0이면 다 리턴한다. expression을 받아서 operator를 기준으로 operand를 int형 변수에 저장한다..

WARGAME/pwnable.tw 2022.08.23

pwnable.tw start write-up

받은 바이너리부터 IDA로 열어봤다. 바이너리 자체는 되게 간단하다. x86_32 syscall table 확인해보면 stdout에 출력하고, stdin을 read 해주는 간단한 바이너리라는 것을 알 수 있다. 바이너리 mitigation은 안 보인다. NX 안걸려있어서 execute 권한이 스택에 있다. 여기서 bof가 터진다. 처음에는 bof로 ret를 덮고, eip는 32비트니까 대충 NOP Sled 태워서 익스하려고 했다. 근데 0x3c라서 안 되겠다 싶었다. IDA를 다시 보니까 처음에 esp를 push 하는 게 보인다. 그래서 esp leak 하고 익스해야겠다고 생각했다. ubuntu20.04 로컬 환경에서 leak을 진행했다. push 이렇게 되니까, 0x18 만큼 덮으면 esp 전까지 덮인..

WARGAME/pwnable.tw 2022.08.20