sql injection bypass WAF

2024. 10. 29. 14:46·DreamHack/WEB

 

 

 

 

 

 

 

 

 

 

 

문제 화면이다.

 

소스코드와 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')
app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user')
app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass')
app.config['MYSQL_DB'] = os.environ.get('MYSQL_DB', 'users')
mysql = MySQL(app)

template ='''
<pre style="font-size:200%">SELECT * FROM user WHERE uid='{uid}';</pre><hr/>
<pre>{result}</pre><hr/>
<form>
    <input tyupe='text' name='uid' placeholder='uid'>
    <input type='submit' value='submit'>
</form>
'''

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.execute(f"SELECT * FROM user WHERE uid='{uid}';")
        result = cur.fetchone()
        if result:
            return template.format(uid=uid, result=result[1])
        else:
            return template.format(uid=uid, result='')

    else:
        return template


if __name__ == '__main__':
    app.run(host='0.0.0.0')

 

keywords를 이용해서 필터링을 만들어 놓은 거 같다.

 

보면 대문자에 대한 내용은 적혀있지 않다.

 

uid 를 조회하는 SQL 명령어가 적혀있는 걸 확인할 수 있다.

 

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');
INSERT INTO user(uid, upw) values('admin', 'DH{**FLAG**}');
INSERT INTO user(uid, upw) values('guest', 'guest');
INSERT INTO user(uid, upw) values('test', 'test');
INSERT INTO user(uid, upw) values('dream', 'hack');
FLUSH PRIVILEGES;

 

SQL file 을 보면 user 테이블에 admin 이 존재하는 걸 확인할 수 있다.

 

admin의 upw 이 플래그에 내용을 담고 있다.

 

문제화면으로 돌아가 확인해 보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

대문자 ADMIN을 입력하니 uid 가 잘 출력이 되고 있다 

 

URL encode 도 잘 나오고 있다.

 

먼저 필터링을 우회하려면 공백( )을 우회해야 한다. -> Tab으로 대체

 

명령어 대문자 -> select -> SELECT , FROM , UNION

 

UNION을 사용하려면 SQL 쿼리의 규칙을 지켜야 한다.

 

반환시킨 칼럼의 수가 동일해야 한다.

 

Ex) UNION SELECT upw FROM user WHERE uid='ADMIN';

 

이런 식으로 명령어를 삽입하면 칼럼의 수가 동일하지 않아 에러를 일으킨다.

 

칼럼은 idx, uid, upw 가 있는데 upw 만 넣으면 안 된다는 것이다.

 

따라서

 

UNION SELECT NULL,NULL,upw FROM user WHERE uid='ADMIN';

 

이런 식으로 해야 정상적으로 upw 가 반환이 된다.

 

이걸 토대로 SQL injection을 하면...

 

 

 

 

 

 

 

 

 

 

 

'DreamHack > WEB' 카테고리의 다른 글

php7cmp4re  (0) 2024.11.05
blind sql injection advanced  (0) 2024.10.23
command-injection-chatgpt  (0) 2024.10.23
error based sql injection  (0) 2024.10.18
simple_sqli_chatgpt  (0) 2024.10.17
'DreamHack/WEB' 카테고리의 다른 글
  • php7cmp4re
  • blind sql injection advanced
  • command-injection-chatgpt
  • error based sql injection
G_OM
G_OM
최대한 설명 열심히 하려고 합니다. 궁금한 거 있으면 언제든지 물어보셔도 좋습니다.
  • G_OM
    끄적끄적
    G_OM
  • 전체
    오늘
    어제
    • 분류 전체보기 (138)
      • 모의해킹 (7)
      • Wargame (69)
        • Linux_bandit (33)
        • Webhacking.kr (36)
      • DreamHack (52)
        • WEB (14)
        • Reverising (9)
        • System (0)
        • CTF (22)
      • Android_security (5)
      • 정보보안기사 (2)
      • IT? (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • DreamHack 에 대한 문제들...
  • 인기 글

  • 태그

    bandit
    Dreamhack
    Android
    cookies
    리눅스 워게임
    bandit17
    Linux
    webhacking
    워게임
    bandit20
    php wrapper
    wargame
    Linux wargame
    insecurebankv2
    Cookie
    bandit30
    php
    bandit18
    정보보안기사
    sql injection
    overthewire
    union
    리눅스
    url encode
    안드로이드
    lfi
    drozer
    webhacking.kr
    난독화
    CTF
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
G_OM
sql injection bypass WAF
상단으로

티스토리툴바