웹 & 시스템 49

Dreamack - Dream Gallery

문제 소스 입력받은 URL로부터 데이터를 읽어와 저장하는 기능이다. from flask import Flask, request, render_template, url_for, redirect from urllib.request import urlopen import base64, os app = Flask(__name__) app.secret_key = os.urandom(32) mini_database = [] @app.route('/') def index(): return redirect(url_for('view')) @app.route('/request') def url_request(): url = request.args.get('url', '').lower() title = request.arg..

Wargame - 웹 2023.10.23

Dreamhack - crawling

단축 URL (Shortened URL) 긴 URL을 단축하고 단축된 URL을 클릭하면 원래의 긴 URL로 이동하는 웹 기술이다. URL Redirection 기법을 이용한다. 문제 설명 드림이는 웹 크롤링 사이트를 구축했습니다. 크롤링 사이트에서 취약점을 찾고 flag를 획득하세요! 소스 로컬 호스트로 /admin 페이지를 접속하면 flag를 출력한다. 하지만, check_get에서 필터링을 적용한다. #app.py import socket import requests import ipaddress from urllib.parse import urlparse from flask import Flask, request, render_template app = Flask(__name__) app.flag ..

Wargame - 웹 2023.10.20

Tomcat Manager

Tomcat은 웹 환경의 관리자 콘솔을 제공한다. 관리자 콘솔이 외부로부터 침해되는 경우 웹에 관련된 모든 권한을 누출할 수 있으므로 관리에 주의해야 한다. 관리자 인증을 위한 페이지가 쉽게 인지 가능하거나 유추로 인해 접근 되어지는 경우에는 취약하다. 접근 방법 IP주소/manager IP주소/admin -> 164.122.2.61/manager 풀이 메인 페이지 개발자 도구로 확인해보니 image.jsp?file=working.png에 대한 요청 확인 image.jsp?file=../image.jsp로 접근 이를 통해서 ../를 사용해 경로 이동이 자유로운 것을 확인 Dockerfile 확인 tomcat-users.xml 파일에는 사용자 이름, 역할, 패스워드를 포함한 정보가 있다. 위 파일을 브라우..

Wargame - 웹 2023.10.18

basic_rop_x86

풀이 이 문제와 동일하지만 32-bit라는 점이 다르다. https://dreamhack.io/wargame/challenges/29/ basic_rop_x64 Description 이 문제는 서버에서 작동하고 있는 서비스(basicropx64)의 바이너리와 소스 코드가 주어집니다. Return Oriented Programming 공격 기법을 통해 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" 파일의 dreamhack.io 소스 #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvb..

Wargame - 시스템 2023.06.06

filestorage

Javascript Prototype 자바스크립트는 프로토타입(Prototype) 기반 언어라고도 불린다. 자바스크립트는 객채지향 언어이지만 C++이나 Java처럼 class가 없다. 대신 프로토타입이라는 개념이 등장한다. 1. Prototype vs Class 클래스(class)라는 개념은 객체지향 언어에서 빠질 수 없는 개념이다. 하지만 자바스크립트에는 클래스라는 개념이 없다. 대신 프로토타입(Prototype)이라는 개념이 존재한다. 클래스가 없으니 기본적으로 상속이 불가능하다. 그래서 보통 프로토타입 기반으로 상속을 흉내내도록 구현해 사용한다. 최근의 ECMA6 표준에서는 Class 문법이 추가되었습니다. 하지만 문법이 추가되었다는 것이지, 클래스 기반으로 바뀌었다는 것은 아닙니다. 2. 사용법 ..

Wargame - 웹 2023.06.03

Exploit Tech: Return Oriented Programming

1. 서론 많은 개발자가 system 함수가 공격 벡터로 사용될 수 있음을 알고 있으며, 여러 개발 도구들에서도 해당 함수의 사용을 지양하도록 경고하고 있다. 그래서 실제 바이너리에서 system 함수가 PLT에 포함될 가능성은 거의 없다. 따라서 현실적으로, ASLR이 걸린 환경에서 system 함수를 사용하려면 프로세스에서 libc가 매핑된 주소를 찾고, 그 주소로부터 system 함수의 오프셋을 이용하여 함수의 주소를 계산해야 한다. ROP는 이런 복잡한 사항을 유연하게 해결할 수 있는 수단을 제공한다. 2. Return Oriented Programming ROP는 리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 기법이다. 공격자는 이를 이용해서 문제 상황에 맞춰 return to library..

Exploit Tech: Return to Library

1. 서론 XS를 우회하는 공격 기법으로 널리 알려진 Return To Library(RTL)를 소개한다. 매우 중요한 공격 기법이므로 주의를 기울여 학습하는 게 좋다. 2. Return To Library NX로 인해 공격자가 버퍼에 주입한 쉘 코드를 실행하기는 어려워졌지만, 스택 버퍼 오버플로우 취약점으로 반환 주소를 덮는 것은 여전히 가능하다. 공격자들은 실행 권한이 남아있는 코드 영역으로 반환 주소를 덮는 기법을 고안했다. 프로세스에 실행 권한이 있는 메모리 영역은 일반적으로 바이너리 코드 영역과 바이너리가 참조하는 공유 라이브러리 코드 영역이다. 몇몇 라이브러리에는 공격에 유용한 함수들이 구현되어있다. 예를 들어, 리눅스에서 C언어로 작성된 프로그램이 참조하는 libc에는 system, exec..

NX & ASLR

1. 서론 공격자가 메모리에서 임의 버퍼 주소를 알기 어렵게 하고, 메모리 영역에서 불필요한 실행 권한을 제거하는 보호 기법을 추가로 도입해야 한다. 이와 관련하여 시스템 개발자들은 Address Space Layout Randomization (ASLR)과 No-eXecute(NX)을 개발하고 시스템에 적용했다. 2. ASLR Address Space Layout Randomization (ASLR)은 바이너리가 실행될 때마다, 스택, 힙, 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법이다. ASLR은 커널에서 지원하는 보호 기법이며, 다음의 명령어로 확인할 수 있다. $ cat /proc/sys/kernel/randomize_va_space 2 리눅스에서 이 값은 0, 1, 또는 2의 값을 ..

Static Link vs. Dynamic Link

1. 라이브러리 라이브러리는 컴퓨터 시스템에서, 프로그램들이 함수나, 변수를 공유해서 사용할 수 있게 한다. 자주 사용되는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램이 공유해서 사용할 수 있도록 지원하고 있다. 2. 링크 많은 프로그래밍 언어에서 컴파일의 마지막 단계로 알려져 있다. 프로그램에서 어떤 라이브러리의 함수를 사용한다면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결된다. 리눅스에서 C 소스 코드는 전처리, 컴파일, 어셈블 과정을 거쳐 ELF 형식을 갖춘 오브젝트 파일(Object file)로 번역된다. $ gcc -c hello-world.c -o hello-world.o 오브젝트 파일은 실행 가능한 형식을 갖추고 있지만, 라이브러리 함수들의 정..