목록Web Penetesting (24)
외로운 Nova의 작업실
- 문제 인식 따로 코드는 없습니다. 그럼 접속해보겠습니다. - 문제 설계 먼저 간단한 sql injection으로 로그인을 하면 통하지않습니다. 모든 특수문자들을 escape 처리하는 것으로 보입니다. 회원가입 폼에서도 통하지 않습니다. 또한, id는 admin으로 회원가입을 하면 admin이 존재한다고합니다. 이는 서버상에서 id부분을 admin인지아닌지 검증하는 코드가 있다고 추측할 수 있습니다. 이문제는 sql injection 문제가 아닙니다. 이 문제의 취약점은 바로 mysql의 CHAR 자료형에 있습니다. CHAR 자료형은 고정된 길이 문자열을 저장하는데 사용하는 자료형입니다. 따라서 문제에서 32바이트를 할당했는데, 그보다 짧으면 공백을 채워넣고 그보다 길면 32바이트만 잘라서 사용하게됩니..
- 문제 인식 #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for from selenium.common.exceptions import TimeoutException from urllib.parse import urlparse from selenium import webdriver from hashlib import md5 import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FL..
- 문제 설명 플래그는 / 디렉터리에 flag 파일로 존재한다고 합니다. - 소스코드 const express=require('express'); const bodyParser=require('body-parser'); const ejs=require('ejs'); const hash=require('crypto-js/sha256'); const fs = require('fs'); const app=express(); var file={}; var read={}; function isObject(obj) { return obj !== null && typeof obj === 'object'; } function setValue(obj, key, value) { const keylist = key.spli..
- 문제 인식 CSP를 우회하는 문제임을 알 수 있습니다. 문제 코드를 보겠습니다. #!/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) nonce = os.urandom(16).hex() try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.upda..
- 문제인식 세션값을 알아내서 admin 계정으로 로그인 해야하는 것 같습니다. 서버 코드를 봐보겠습니다. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' users = { 'guest': 'guest', 'user': 'user1234', 'admin': FLAG } session_storage = { } @app.route('/') def index(): session_id = request.cookie..
- 문제인식 xss 필터링을 우회하는 문제입니다. 그럼 서버코드를 보겠습니다. #!/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": "value"}): cookie.update({"domain": "127.0.0.1"}) try:..
- 문제인식 파일 업로드 기능을 활용하는 문제인것같습니다. 문제파일중에 index.php와 upload.php를 보겠습니다. index.php먼저 보겠습니다. Online File Box Choose a file... No file uploaded 간단하게 파일을 업로드할 수 있는 form이 구현된 index.php입니다. submit 버튼을 누르게되면 upload.php를 실행하게되므로 upload.php를 봐보겠습니다.
안녕하세요. 이번시간에는 node-serialize 문제를 풀어보도록 하겠습니다. - 문제인식 /app/flag에 플래그가 있다고 하는군요. 문제 파일을 보겠습니다. const express = require('express'); const cookieParser = require('cookie-parser'); const serialize = require('node-serialize'); const app = express(); app.use(cookieParser()) app.get('/', (req, res) => { if (req.cookies.profile) { let str = new Buffer.from(req.cookies.profile, 'base64').toString(); // Sp..
안녕하세요. 이번시간에는 sql injection bypass WAF Advanced 드림핵 문제풀이를 해보겠습니다. - 문제인식 별다른 설명은 없네요.. 문제파일을 보겠습니다. CREATE DATABASE IF NOT EXISTS `users`; GRANT ALL PRIVILEGES ON users.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpass'; USE `users`; CREATE TABLE user( idx int auto_increment primary key, uid varchar(128) not null, upw varchar(128) not null ); INSERT INTO user(uid, upw) values('abcde', '12345'); IN..