웹 해킹/Dreamhack Wargame
sql injection bypass WAF
몽골아덤벼라
2024. 5. 26. 15:12

SQL Injection 문제. WAF이 붙은 걸로 보아 웹방화벽에서 필터링을 거는 듯하다
Code
# init.sql

init.sql파일에서 flag가 admin의 upw임을 알 수 있다.
# app.py

union, select, from, and, or, admin, space, *, / 에 대해 필터링을 하고 있다.
lower()함수를 사용하지 않았으므로 대문자를 활용하면 우회할 수 있다.
space는 tab을 활용하면 우회할 수 있다.
Happy Path

uid에 값을 입력할 수 있다.
upw값을 구하기 위해서는 해당 sql문으로 구할 수 없으니
UNION으로 upw 속성 테이블을 붙여야겠다.
admin의 upw값을 구하려면 다음과 같이 sql문을 작성하였다.
SELECT * FROM user WHERE uid=’’ UNION SELECT upw FROM user WHERE uid=’ADMIN’
따라서 uid = ’ UNION SELECT upw FROM user WHERE uid=’ADMIN
space ⇒ tab으로 우회하면
uid = ' UNION SELECT upw FROM user where uid='ADMIN
하지만 해당 값을 입력해도 flag값이 출력되지 않는다.
UNION은 column 갯수가 동일해야 가능하기 때문에
뒤의 테이블도 같은 column수를 맞춰줘야한다.
따라서
uid = ' UNION SELECT null,upw,null FROM user where uid='ADMIN
FLAG
