분류 전체보기 31

[tryhackme] Publisher

정말 오랜만에 tryhackme(THM) 문제를 풀어보았다. 난이도 Easy에 시간제한이 60분이지만 나에게는 너무나도 어려웠고 Write-up을 보면서해도 이해가 안가서 장장 2일간 문제를 습득했다. 자, 일단 가상머신을 키고 생성된 IP로 접속해보니 위와 같은 페이지가 보였다.위키로 검색해보니 SPIP라는 CMS였다. 예전에 푼 문제들도 전부 취약한 버전을 사용하는 CMS를 통해 문제를 풀었기에 이번 문제도 같은 유형이겠구나 싶었다. nmap을 이용한 포트 스캔 결과, 22번과 80번 port가 열려있다는 것 말고는 특이점은 없었다.gobuster를 이용한 디렉토리 스캔을 해보니 /spip 라는 페이지가 보였고 거기서 아래와 같은 로그인 페이지를 확인 할 수 있었다. 로그인 페이지 소스를 보면 SPI..

tryhackme 2024.07.19

[Dreamhack] Mongoboard

ObjectID란? ObjectID는 몽고디비의 data type 중 하나로, 주로 PK의 데이터 타입으로 사용된다. 몽고디비의 모든 도큐먼트는 _id 필드를 가진다. _id는 어떤 타입이여도 상관없지만 컬렉션 내에서 unique해야 한다. _id의 디폴트 타입은 ObjectID 타입이며, ObjectID를 개발자가 입력하지 않았다면 MongoDB 드라이버가 만들어준다. rdb에서처럼 auto_increment하는 키를 pk로 사용하지않는 이유는 몽고디비가 분산 환경에서 사용되기 때문이다. (샤딩된 환경에서 고유 식별자로 사용) ObjectID는 위 그림과 같이 12바이트이며, 시간+랜덤 값+count의 조합이다. count도 랜덤 값으로 서로 다른 시스템에서 충돌되지 않는 ObjecdtID를 생성하지 ..

dreamhack 2024.02.08

[Dreamhack] Apache htaccess

.htaccess란? "hypertext access"의 약자로, 파일명 앞의 점은 숨긴파일을 뜻한다. 해당 파일은 디렉토리에 대한 설정 옵션을 제공한다. 즉, 아파치 같은 웹 서버에서 브라우저 같은 클라이언트에서 접근할 시 어떤 식으러 서비스를 제공할지 apache2.conf와 sites-enabled 가상 호스트 설정 파일을 통해 결정하는데, 이 때 서비스할 파일이 위치한 곳의 디렉토리 경로를 지정하게 된다. 그리고 디렉토리의 접근을 허용하는 여부와 어떻게 보여줄지 등을 정하게 된다. sites-enabled에 있는 파일에서 블록을 통해 이것을 지정하게 되는데 .htaccess 파일은 이것과 같은 역할을 수행한다. 블럭을 통한 서버의 전역 설정이 있는 상태에서 .htaccess파일을 사용하면 .hta..

카테고리 없음 2024.02.08

[Dreamhack] amocafe

페이지에 접속하면 귀여운 고양이가 제일 좋아하는 메뉴가 "1_c_3_c_0__ff_3e" 라고 한다. @app.route('/', methods=['GET', 'POST']) def index(): menu_str = '' org = FLAG[10:29] # 입력값(org)은 19자리이다. org = int(org) # 입력값(org)은 정수이다. st = ['' for i in range(16)] # 알고리즘 결과값인 16자리 문자열 '1_c_3_c_0__ff_3e'가 들어갈 함수 초기화 for i in range (0, 16): res = (org >> (4 * i)) & 0xf if 0 < res < 12: if ~res & 0xf == 0x4: st[16-i-1] = '_' else: st[16-..

dreamhack 2024.02.07

[Dreamhack] proxy-1

RAW 소켓이란? 어느 특정한 프로토콜 용의 전송 계층 포맷팅 없이 인터넷 프로토콜 패킷을 직접적으로 주고 받게 해주는 소켓 RAW 소켓의 정의를 읽어봐도 무슨 소리인지 이해가 가지 않는다. RAW 소켓은 헤더 정보를 프로그래머가 직접 제어할 수 있게 해준다고 하는데 아래 그림을 보고 나니 어떤 느낌인지 알 것 같다. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for import socket app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' @app.rout..

dreamhack 2024.02.02

[Dreamhack] Command Injection Advanced

문제 페이지에서는 사용자가 입력한 url에서 데이터를 다운로드할 수 있는 온라인 도구를 제공한다. 가져온 데이터는 cache 폴더에 저장되고 화면에도 표시된다. 아래 코드에서 중요하게 봐야할 것은 escapeshellcmd 함수이다. escapeshellcmd 함수는 메타 문자를 통한 커맨드 인젝션을 방지하기 위해 문자 앞에 '\(백슬러시)'를 삽입하는데 '-' 문자는 escape 되지 않는다.(앞에 '\'가 붙지 않는다) 명령어 옵션을 이용한 공격이 가능하다는 건데 curl 명령어에서는 -o 옵션으로 임의의 디렉토리에 파일을 생성할 수 있다. Online Curl Request URL 익스플로잇 순서는 다음과 같다. 1. 커맨드 인젝션 "-o" 옵션을 사용해서 임의 위치에 파일을 생성할 수 있는지 확인..

dreamhack 2024.02.02

[Dreamhack] sql injection bypass WAF

SQL 인젝션 문제이고 WAF를 우회하여 공격을 성공해야한다. keywords = ['union', 'select', 'from', 'and', 'or', 'admin', ' ', '*', '/'] def check_WAF(data): for keyword in keywords: if keyword in data: return True return False @app.route('/', methods=['POST', 'GET']) def index(): uid = request.args.get('uid') if uid: if check_WAF(uid): return 'your request has been blocked by WAF.' cur = mysql.connection.cursor() cur.ex..

dreamhack 2024.02.01

[Dreamhack] error based sql injection

error를 이용해서 sql 인젝션 공격을 해야하는 문제이다. 문제 페이지에 접속해보면 어떤 식으로 SQL 구문이 입력되는지 적혀있다. 간단히 싱글쿼터 하나를 입력해서 위와 같은 에러를 확인할 수 있는데 여기서 MariaDB를 사용하는 것을 확인 할 수 있다. 이를 토대로 MariaDB와 Mysql에서 사용하는 'extractvalue()'와 'updatexml()' 함수를 활용했다. 1. extractvalue(xml_target, xpath_expr) 2. updatexml(xml_target, xpath_expr, new_value) 여기서 중요한건 두 번째 인수인 'xpath_expr'이다. 나머지는 null, 아무숫자, rand() 등 아무거나 써도 된다. xpath_expr이라는 두 번째 인수..

dreamhack 2024.02.01

[Dreamhack] blind-command

문제 설명은 아주 간단하다 flag 파일을 읽어보라고 한다. 페이지에 출력되는 문구를 보니 cmd 파라미터에 커맨드를 입력하면 그대로 실행되는 것 같다. #!/usr/bin/env python3 from flask import Flask, request import os app = Flask(__name__) @app.route('/' , methods=['GET']) def index(): cmd = request.args.get('cmd', '') if not cmd: return "?cmd=[cmd]" if request.method == 'GET': '' else: os.system(cmd) return cmd app.run(host='0.0.0.0', port=8000) 해당 페이지는 GET 메..

카테고리 없음 2024.01.18

[Dreamhack] Carve Party

문제에서 제공해준 html 파일을 열어보니 왠 호박하나가 있다. 이걸 10000번 클릭하면 플래그를 얻을 수 있다고 한다. click the pumpkin to make a jack-o-lantern! 10000 more clicks to go! 코드를 살짝 보니 클릭할 때마다 counter가 1씩 올라가고 10000 < counter 가 참이면 플래그를 준다고 한다. 개발자도구를 켜서 counter = 10000 을 입력하고 클릭했더니 일단 플래그는 아닌 것 같은 문자가 출력된다. 코드를 다시 자세히보니 마지막 부분에 '#jack-target' 을 클릭하면 counter가 1 올라가고 counter가 10000보다 작고 100으로 나눴을때 0이 나오면(=클릭 100번마다) pumpkin에 있는 배열과 ..

dreamhack 2024.01.18