일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ASM
- rev
- string
- anti
- pwnable
- Reverse
- practicalmalwareanalysis
- Leak
- Bug
- Bottle
- shellcraft
- CTF
- reversing
- Rookiss
- shellcode
- pwnable.kr
- CANARY
- pico
- format
- 2018
- FSB
- writeup
- TUCTF
- pwn
- Read
- BOF
- PMA
- Toddler's Bottle
- picoCTF
- toddler
- Today
- Total
목록분류 전체보기 (91)
제리의 블로그
SECCON 2018 qualsClassic Pwn121 pt 197 Solvers 요약canary 가 없는 BOF 문제였으며fastcall 방식의 함수 호출규약을 따르기 때문에 gadget 을 모은 다음libc 주소를 leak 하고one_gadget 을 사용하여 쉘을 획득한다. leak 과 쉘 획득을 위한 공격을 동시에 하기 위해서는main 함수로 return 하도록chaining 을 통해 loop 를 만들어 준다. Description Host: classic.pwn.seccon.jp Port: 17354 classic libc-2.23.so $ sha1sum * aa9e979fd5c597526ef30c003bffee474b314e22 classic 56d992a0342a67a887b8dcaae381..
Baby Reverse (Category: Reverse) Author(s): Staubfinger Solves: 63 요약직접 어셈 단에서 짜서 컴파일한 바이너리가 제공된다.printf(), scanf() 대신 syscall 을 이용한 SYS_write, SYS_read 가 사용되었다. 바이너리는 0x2e 만큼의 문자열을 입력받아서XOR 연산 결과가특정 테이블(0x40010C)과 같은지 비교하여 검증한다. XOR 은 A ^ B = C 이면 A ^ C = B 이고 교환법칙이 성립한다.어렵지않게 역연산을 해서 풀었다. Difficulty: baby Hey there! Disclaimer: This chall is intended for new gamers only ;-)! You veterans got p..
echo back - Points: 500 - (Solves: 206) 요약본 Writeup 은 포맷 스트링(FSB)를 다룹니다. 문제에서 바이너리와 접속정보가 주어집니다.소스 코드가 없기 때문에 바이너리를 분석해야 합니다. 바이너리엔 FSB 취약점이 있었고system() 함수가 사용되고 있었습니다. 사용자 정의 함수 vuln() 함수는read(0, buf, 0x7f);printf(buf);puts("\n");위와 같은 코드로 구성되어 있었습니다. FSB 를 이용하여GOT Overwrite 를 합니다.puts@GOT 를 0x080485E1 로 덮어서 loop 를 만들어주고printf@GOT 를 system@plt 로 만들어준 다음 변수 buf 에 "/bin/sh" 를 넣으면printf 함수가 system..
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..