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

[Webhacking.kr] Old - 32

[문제] [풀이] 문제에 접속하니 점수 별 리스트가 나열되어 있었다. 아무 이름이나 클릭을 했을 때 이미 투표했다는 팝업창이 뜬다. 소스코드에서 문제 풀이를 위한 것을 확인할 수 없어서 쿠키값을 확인하였다. 쿠키 값을 보니 vote_check에 ok라고 되어 있는데, 이미 투표가 진행되었다는 표시인 것 같아 이를 없애고 다시 눌러보았더니 점수가 1만큼 올라갔다. import requests URL = 'https://webhacking.kr/challenge/code-5/?hit=[id]' cookies = {'PHPSESSID': '[value]'} for i in range(100): requests.get(URL, cookies=cookies) [핵심] [출처]

카테고리 없음 2021.08.19

[Webhacking.kr - Old 25]

[문제] [풀이] 문제를 살펴보면 터미널 창의 파일 목록을 확인했을 때 볼 수 있는 결과 값을 확인할 수 있다. url을 살펴보면 file에 hello가 들어가 있는데, 문제를 통해 확인해보면 hello.php 가 hello로 변환되어 있다는 것을 볼 수 있다. http://webhacking.kr:10001/?file=hello 그렇다면 flag.php 파일 또한 flag로 입력하면 보일 것이라 생각되는데, 직접 실행해보면 다음과 같다. 이렇게 FLAG is in the code라는 문자열만 출력되고 flag를 획득할 수 없다. flag.php 소스코드를 읽어야 flag를 획득할 수 있는데 서버 내에 존재하는 flag.php 파일을 읽기 위해서는 LFI 취약점을 이용해야 한다. http://webhac..

[HackCTF] yes_or_no

[문제] [풀이] 바이너리를 실행해서 임의의 숫자를 입력하면 system+1094를 실행해보라는 메시지와 함께 종료된다. -> do_system+1094는 2.27 glibc 버전에서 system 함수 내에서 발생하는 오류 -> rsp 값이 16바이트로 채워져 있지 않으면 do_system+1094에 존재하는 명령어에서 오류 발생(gadget를 잘 넣어야 한다~~!) gdb 분석 전 보호 기법부터 확인해보면 다음과 같다. NX bit가 걸려있는 것으로 보아 쉘코드 삽입은 불가해보인다. 또한, RELRO 가 Partial이므로 data, stack, heap 영역이 읽기 권한만 가진다는 것을 알 수 있다. -> Got Overwrite를 떠올릴 수 있다! 그리고, ldd 명령을 통해 ASLR이 걸려있음을 ..

Wargame/HackCTF 2021.08.15
LIST