일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Rookiss
- rev
- CANARY
- shellcode
- anti
- Leak
- Reverse
- Read
- FSB
- 2018
- PMA
- Bug
- picoCTF
- pwn
- reversing
- pwnable.kr
- practicalmalwareanalysis
- Bottle
- Toddler's Bottle
- CTF
- toddler
- pwnable
- BOF
- writeup
- ASM
- string
- format
- shellcraft
- TUCTF
- pico
- Today
- Total
목록2018 (36)
제리의 블로그
authenticate - Points: 350 - (Solves: 462) 요약본 Writeup 은 Format String Bug (FSB) 를 다룹니다. Description 을 보면바이너리와 소스코드를 제공합니다. 취약점은 소스코드에서 55번째 줄에서FSB 취약점이 있고플래그는 23번째 줄의 read_flag() 함수에서 출력해주고 있다. 플래그를 보기 위해서는0(거짓)으로 초기화되어있는 전역변수 authenticated 를1(참)로 변조해야만 합니다. Description Can you authenticate to this service and get the flag? Connect with nc 2018shell2.picoctf.com 52918. Source. Source #include #..
echooo - Points: 300 - (Solves: 816)요약본 Writeup 은 Format String Bug (FSB) 를 다룹니다. Description 을 보면소스코드와 바이너리가 제공됩니다. 소스코드의 37번째 줄에서 FSB 취약점이 있습니다.printf 에 넘겨지는 인자들이 스택을 통해 들어간다는 것을 통해스택의 값을 leak 할 수 있는 취약점입니다. 지역변수 flag 를 알아내야 하는데그 주소를 가리키고 있는 flag_ptr 가 존재한다는 것을 소스코드에서 알 수 있습니다.디버깅을 통해 몇번째에 있는지 확인해보니8번째라는 것을 알아냈습니다. printf 에 8번째 값을 넘기면서 문자열 출력하도록 하면 플래그가 나옵니다. Description This program prints an..
be-quick-or-be-dead-2 - Points: 275 - (Solves: 393)요약본 Writeup 에서는 바이너리 패치하지 않고파이썬 코드를 짜서 풀었습니다. 바이너리는 alarm(3) 알람 3초를 걸어놓은 상태에서피보나치 수열 1015번째를 연산하여 나온 값을 이용해서flag 를 디코딩하고 있었다. 피보나치 연산이 3초 안에 일어나지 않기 때문에SIGALRM 시그널을 받고 종료되도록 핸들링된다. 피보나치 연산을 해주는 사이트에서 1015번째 수를 알아내서int형에 맞추어 key 값을 넣어주고decrypt_flag 해주면 된다. Description As you enjoy this music even more, another executable be-quick-or-be-dead-2 sho..
A Simple Question - Points: 650 - (Solves: 783) 요약본 Writeup은 Blind SQL 을 다룹니다. html 소스코드를 확인해보면answer2.phps 소스코드의 존재를 주석으로 알려주고 있었고 answer2.phps 내용을 보면쿼리에 필터링은 없었고쿼리가 참일 때는 "You are so close."쿼리가 거짓일 때는 "Wrong."쿼리가 에러날 때는 에러코드가 나왔다.또 SQLite3 를 DBMS로 사용한다는 것도 알 수 있다.테이블은 'answers' 라는 것도 알 수 있다. answers 테이블에는LIMIT 를 통해 튜플 1개란 것을 알아냈고ORDER BY 를 통해 컬럼(속성) 1개란 것을 알아냈다. substr 과 unicode 함수를 이용해서Blind ..
keygen-me-1 - Points: 400 - (Solves: 312) 요약Description Can you generate a valid product key for the validation program in /problems/keygen-me-1_1_8eb35cc7858ff1d2f55d30e5428f30a7
Radix's Terminal - Points: 400 - (Solves: 574) 요약base64 인코딩 디코딩 문제입니다. argv[1] 로 파라미터를 넘기면base64 인코딩을 하여 특정 문자열과 정확히 일치하는지 여부를 판단합니다. 따라서 그 특정 문자열을 base64 디코딩하면 플래그를 얻을 수 있습니다. 이 문제는 base64 인코딩을 알아차렸다면 쉽게 풀었을 것입니다. Description Can you find the password to Radix's login? You can also find the executable in /problems/radix-s-terminal_2_4c75009af9dadb458328555d93a49198? // int __cdecl check_passwor..
rop chain - Points: 350 - (Solves: 362) 요약본 문제는 chaining 관련 문제입니다. gets() 함수를 통해서 Stack-based BOF 가 발생하며이 취약점을 통해 flag() 함수를 호출하는 문제입니다. 단 플래그는 if 문 조건을 만족해야하는데바로 전역변수인 win1 과 win2 를 false 에서 true 로 바꾸는 과정이 필요하고이때 필요한 기술(?)/개념(?)이 바로 chaining 입니다. 먼저 win_function1() 을 호출해서 전역변수 win1 을 true 로 세팅해주고그 다음 win_function2() 을 호출해서 전역변수 win2 를 true 로 세팅해주고마지막으로 flag() 를 호출해주면 플래그를 획득할 수 있습니다. Descriptio..
quackme up - Points: 350 - (Solves: 323) 요약주어진 바이너리를 실행시켜보니문자열을 입력받아서 encrypt 된 ciphertext 를 보여주는 프로그램 이었습니다. 맞는 문자열을 넣었을 때 나오게 되는 ciphertext 는 "11 80 20 E0 22 53 72 A1 01 41 55 20 A0 C0 25 E3 45 20 35 05 70 20 95 50 C1" 입니다. 임의로 문자열을 넣어보니 몇가지 사실을 유추해볼 수 있는데요.1. 입력 문자열과 출력 ciphertext 의 길이는 동일하다2. encrypt 알고리즘은 입력 문자가 같으면 출력 문자도 같다. plaintext 와 ciphertext 가 각각 문자마다 1 대 1 매칭임을 알았으므로모든 문자를 1개씩 넣어본 ..
got-shell? - Points: 350 - (Solves: 430)요약 본 문제는 GOT Overwrite 문제입니다. 문제 서버에 접속해보면 address 와 value 를 입력받습니다.auth.c 소스코드를 확인해보니 16진수 값으로 입력받은 두 값을 이용해서특정 위치의 값을 덮어씌울 수 있었습니다. GOT Overwrite 가 일어날 조건도 충족하고 있으므로타겟을 puts 로 잡고 win() 함수로 덮어씌우면쉘을 획득하여 플래그를 확인하는 문제였습니다. Description Can you authenticate to this service and get the flag? Connect to it with nc 2018shell2.picoctf.com 54664. Source Writeup # ..
be-quick-or-be-dead-3 - Points: 350 - (Solves: 260) 요약재귀적 함수 호출이 엄청 많이 일어나는 calc() 연산을반복적 함수 호출로 코드를 바꿔서 연산하면시간복잡도가 선형 시간을 갖게되어 연산에 걸리는 시간을 확연히 줄일 수가 있습니다. 재귀함수 호출 대신 연산 결과값을 바이너리 패치를 통해 넣어주고해당 바이너리를 실행시켜주면 플래그가 나오게 됩니다. Description As the song draws closer to the end, another executable be-quick-or-be-dead-3 suddenly pops up. This one requires even faster machines. Can you run it fast enough to..