SMALL

전체 글 117

[Dreamhack] basic_exploitation_000

보호 기법 확인 32bit 바이너리 → 주소가 4byte 단위 relro 없음 → got overwrite 가능(여기서는 딱히 필요 없을 것 같음) 카나리 없음 → bof 공격 가능 nx bit 없음 → shellcode 삽입 가능 no pie → 주소가 그대로 일 것! 바이너리 실행 buf의 주소를 출력한 뒤, 사용자의 입력을 받고 있음 buf의 주소가 계속 바뀌고 있음 → ASLR이 걸려있기 때문! 문제 코드 분석 - basic_exploitation_000.c #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONB..

Dreamhack/Pwnable 2022.04.02

[HackCTF] Random_key

[문제] [풀이] 바이너리를 실행해보면 key 값을 입력 받아 인증이 되면 flag를 출력하고 그렇지 않으면 Nah.. 를 출력하도록 되어 있는 것 같다. file 명령어를 통해 64bit 바이너리임을 확인할 수 있고, GOT Overwrite는 가능하지만 shellcode 삽입은 불가하다는 것을 알 수 있다. 코드를 확인해보면 15~17에서 rand 함수를 호출해서 random 값과 입력 값이 일치해야 flag를 출력하도록 되어있다. rand 함수를 그냥 쓸 경우 seed 값이 없어 한 번 설정된 random 값이 실행할 때마다 고정적으로 출력된다. if) 1 2 3 4 5가 처음 rand 함수 실행해서 출력되었다면 다시 실행해도 1 2 3 4 5가 출력된다는 것! 따라서 seed 값을 부여한 sran..

Wargame/HackCTF 2021.08.23

[HackCTF] 1996

[문제] [풀이] 바이너리를 실행해보면 환경 변수를 입력 받아 실행하는 것으로 보인다. file을 확인해보니 64bit 바이너리이다. RELRO가 Partial이고, NX bit가 걸려있는 것으로 보아 쉘코드 삽입은 불가하고 GOT Overwrite는 가능할 것으로 보인다. main함수를 확인해보면 getenv 함수를 통해 입력 값을 받고 있다. * getenv() 함수 char *getenv(const char *name); :환경 변수 값 구함 -> 입력 값에 대한 길이 검증 X BOF 취약점 spawn_shell 함수를 확인해보면 쉘을 실행시켜주고 있다. 즉, getenv 함수로 BOF를 발생시켜 spawn_shell 함수 주소로 ret 주소를 overwrite하면 exploit 할 수 있을 것으로..

Wargame/HackCTF 2021.08.23

[HackCTF] Poet

[문제] [풀이] 바이너리를 실행해보면 1000000점수를 획득해야 flag를 출력할 것으로 보인다. RELRO가 Partial인 것으로 보아 GOT Overwrite가 가능하고, shellcode 삽입은 불가하다. main 함수를 확인해보면 get_poem, get_author, rate_poem 함수를 호출한 후, 점수가 1000000이면 reward 함수를 호출하면서 무한루프를 탈출한다. 각각의 함수들을 살펴보면 get_poem, get_author함수에서는 단순히 gets함수로 시와 작가를 입력받고 있다. 여기서 gets 함수 때문에 BOF를 발생시킬 수 있을 것으로 보인다. rate_poem 함수를 통해 입력 값을 검증하고 있는데, strcmp 함수 속에 있는 local_10이 poem 값인 것..

Wargame/HackCTF 2021.08.22
LIST