목록Web Penetesting/Web Vulnerability (23)
외로운 Nova의 작업실
이번시간에는 error based sql injection 문제를 풀어보도록 하겠습니다. https://dreamhack.io/wargame/challenges/412/ error based sql injection Description Simple Error Based SQL Injection ! dreamhack.io - 문제인식 뭔가 sql을 집어넣는 곳이 있는 것 같습니다. 문제 파일을 다운로드해보겠습니다. import os from flask import Flask, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost'..
이번시간에는 웹해킹 마지막 blind-command 문제를 풀어보겠습니다. - 문제 인식 flag file을 읽으라고합니다. 확장자도 파일 이름도 주어지지않습니다. 먼저 문제 파일을 보겠습니다. #!/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', p..
이번시간에는 웹해킹 마지막 에필로그의 첫번째 문제 carve party를 풀어보겠습니다. 정답은 가려놓겠습니다. - 문제인식 호박을 10000번 클릭하라고합니다. 문제파일을 다운해보겠습니다. 호박이 있고 클릭을하면 아래 10000이 하나씩 줄어듭니다. 자바스크립트로 짜져있으니 자바스크립트를 수정해서 해당 문제를 풀어봅시다. - 문제 풀이 자바크스립트 부분을 봐봅시다. 호박을 클릭하면 counter 가 1씩 늘어나고 counter의 값이 %100 했을때 0이되면 pie값이 변하는 것을 볼 수 있습니다. 즉 마지막에 pie값과 counter 값이 어떠한 검증에 맞아야 제대로된 플래그값을 알 수 있을 것 같습니다. 따라서 %100을 했을때 pie값이 바뀌게하기위해 counter += 1을 counter += ..
이번시간에는 SSRF 함께 실습을 리뷰해보겠습니다. 정답은 가려져 있습니다. - 문제인식 url을 /으로 시작하면 자기자신의 파일시스템에서 파일을 가져오게됩니다. 이때 해당 웹서버는 /app이 아닌 다른 경로에 위치하게됩니다. 따라서 /flag.txt를 입력하면 /app이 아니기때문에 notfound가 뜹니다. 하지만 /으로 시작하지않고 http:127.0.0.1:1598로 시작하게되면 다른 서버가 해당 요청을 받게됩니다. 이 해당 서버는 /app에서 실행되고 있다고 합니다. 이번 실습을 위해 드림핵에서는 이 다른 서버를 실행시켜놓았고 1500~1800사이에 포트를 적용했습니다. - 포트 알아내기 포트 코드를 이용해서 주소부분을 변경하여 알아내줍니다. #!/usr/bin/python3 import req..
안녕하세요, 이번시간에는 file-vulnerability 혼자 실습편 file-download-1 문제를 풀어보겠습니다. 정답은 가려져있습니다. - 문제인식 이 문제는 file download 취약점이 존재하는 웹서비스로 flag.py를 다운로드 받으라고합니다. 일단 코드를 봐보겠습니다. - 코드 리뷰 app.py 코드를 리뷰하겠습니다. #!/usr/bin/env python3 import os import shutil from flask import Flask, request, render_template, redirect from flag import FLAG APP = Flask(__name__) UPLOAD_DIR = 'uploads' @APP.route('/') def index(): file..
안녕하세요. 이번시간에는 command injection 혼자실습편 정리해보겠습니다. - 문제 인식 먼저 서버 파일을 보겠습니다. #!/usr/bin/env python3 import subprocess from flask import Flask, request, render_template, redirect from flag import FLAG APP = Flask(__name__) @APP.route('/') def index(): return render_template('index.html') @APP.route('/ping', methods=['GET', 'POST']) def ping(): if request.method == 'POST': host = request.form.get('hos..
안녕하세요. 이번 장은 web hacking 공격 기법을 정리하려고합니다. 계속 업데이트 예정입니다. - XSS Attack(cross-site scripting) 취약점 : 사용자가 임의로 html 문서에 값을 쓸 수 있을때, 사용자의 값을 검증하지않으면 자바스크립트를 삽입하여 실행되게 할 수 있습니다. 공격 목표 : 자바스크립트를 실행하여 할 수 있는 것들을 모두 포함합니다. 기본적인 대응책 : 사용자의 입력값에대해 검증을 꼭 거쳐야합니다. 특히 태그 기호 를 조심해야합니다. 실무에서 쓰는 구체적인 대응책 : reflected XSS Attack : 서버에 저장하지않고 악성 스크립트를 실행하는 기법입니다. stored XSS Attack : 서버에 악성 자바스크립트를 저장하여 불특정 다수가 서버의 악..
안녕하세요 이번 시간에는 dreamhack 문제 simple_sqli에 대한 기본적인 기초지식을 정리하려고합니다. 풀이의 경우 lecture에서 준 코드를 복사하고조금 수정해서 실행하면 풀어지기 때문에 풀이는 따로 하지 않겠습니다. Blind SQL injection : sql injection으로 타겟의 비밀번호를 알아내지 못할때, 스무고개하듯이 하나씩 찾아내는 기법 - sql 문법 데이터베이스 만들기 create database users; 데이터베이스 사용하기 use users; 테이블 만들기 create table users( userid VARCHAR(50) not null, userpassword VARCHAR(50) not null) 테이블에 값 추가하기 insert into users (u..
안녕하세요. 이번 시간에는 STAGE 5 혼자실습문제 CSRF-2를 풀어보겠습니다. 답은 가려져있습니다. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" users = { 'guest': 'guest', 'admin': FLAG } session_stor..
안녕하세요. 이번시간에는 STAGE 4 혼자실습편 XSS-2 문제를 풀어보도록 하겠습니다. 정답은 가렸습니다. - 서버측 코드 먼저 서버측 코드부터 봐보도록 하겠습니다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "va..