SMALL

Wargame 77

[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 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

[Pwnable.kr] blackjack

[문제] [풀이] 문제에 주어진 url에 접속해보면 c코드들이 출력된다. https://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html Simple Blackjack Program Replies: 10 Last Post: 09-09-2004, 05:48 AM cboard.cprogramming.com int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if (bet > cash) //If player tries to bet more money than player has { printf("\nYou cannot b..

Wargame/pwnable.kr 2021.08.12

[Webhacking.kr] Old-19

[문제] [풀이] 문제에 주어진 대로 admin으로 접속해보면 다음과 같은 메시지가 출력된다. 이 때 cookie 값을 확인해보면 phpsessid를 확인할 수 있다. admin외에 다른 값(1)을 넣어보면 hello 1과 같은 메시지를 출력한다. 그리고 admin을 넣었을 때와 달랐던 점은 userid가 생성된다는 것이다. 1을 넣었을 때 id가 YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI%3D로 표현되었다. 이 외에도 다른 값을 넣어 보았는데, 마찬가지로 userid가 생성되는 것을 볼 수 있었다. MDNjN2MwYWNlMzk1ZDgwMTgyZGIwN2FlMmMzMGYwMzQ4NjVjMGMwYjRhYjBlMDYzZTVjYWEzMzg3YzFhODc0MThjZTRiMTZ..

[Webhacking.kr] Old-54

[문제] [풀이] 중요 코드를 살펴보면 다음과 같다. 그 중에서도 function answer 함수가 문제 풀이에 핵심적인 역할을 한다. 한 글자씩 표현되는 값을 중첩되게 표현하기 위해서는 aview.innerHTML=x.responseText; 부분을 aview.innerHTML+=x.responseText; 로 변경해주면 된다. if(x.responseText=="") aview.innerHTML="?"; 이 코드는 삭제해도 무방하다. 공백을 확인하기 위해서 넣어줬는데, 그러기 위해서는 if(x.responseText=="") aview.innerHTML+="?"; 로 변경해주면 된다. 변경한 값을 console 창에서 변경해준 뒤에 다시 페이지를 실행해보면 flag를 획득할 수 있다. [핵심] wi..

LIST