Boolean-based SQL injection
블라인드 SQL 인젝션의 한 유형으로, 웹 애플리케이션이 SQL 쿼리 실행 결과로 데이터베이스의 실제 내용을 직접 출력하지 않고 참과 거짓의 결과에 따라 웹 페이지의 응답이 달라지는 것을 이용하는 것이다.
>>가장 많이 쓰인다( 특히 브루트포싱 )
Time Based SQL Injection
블라트트 SQL 인젝션의 한 유형으로, 시간 지연을 이용하여 쿼리가 참인지 거짓인지 판별하는 공격이다. 결과는 항상 동일하게 나오므로 결과를 보고 공격의 성공 여부를 결정하는 것이 아닌 시간 지연이 되는지를 보고 성공 여부를 결정한다.
>> boolean-based SQLi를 사용할 수 없는 특수 상황에 많이 쓰인다
WAF
웹 어플리케이션 방화벽을 의미한다. 웹 방화벽은 외부로부터 유입되는 웹 프로토콜을 필터링 하여 SQL Injection 공격 등을 탐지 및 차단하는 역할을 한다.( waf bypass는 waf를 뚫는것 )
sql injection bypass WAF Advanced 문제

일단 메인 화면이다
코드를 바로 보겠다

mysql을 사용하고있고

필터링을 참 많이한다( 실제로 처음봤을때 이걸 도대체 어떻게 하지 라는 생각이 들었다 )

핵심 코드로 보인다
다음으로는 sql을 보겠다

계정이 좀 많다
일단 '는 안막길래 넣어봤다.

500에러가 뜨긴했다
이제 뭐 어떻게 해야될까
풀이
일단 평소에 쓰는 코드들을 생각해봤다
'or 1=1 -- 1
가장 먼저 떠오른 코드였다
근데 저걸 쓸수는 없다 ( or , 공백, - ,셋다 필터링 )
그래서 '||1# 으로 해보았다

오 된다! 이런식으로 하면 될것같다!
일단은 admin으로 로그인을 해야될것 같은데
admin 이라는 글자 자체도 필터링이 되어있다
그래서
'||(uid)like("admi_")#'
이런식으로 짜주었다
처음에는 괄호가 sql에서 띄어쓰기 역할을 하는지 몰라서
0x0b 나 0x0c같은 sql에서는 공백의 역할을 할수있는 코드를 찾아다녔다
근데 거의 모든것이 필터링 되어있었다....(일단 내가 찾은건 다 필터링 되어 있었다 )
그래서 찾고 찾다가 괄호라는 구원자를 만났다
아무튼 해보면

잘 되는 것을 볼 수가 있다
이제 upw만 알아내면 된다
생각 나는 방법은 문자열 길이를 알아내서 브루트 포싱으로 푸는 방법이다
해보겠다
근데 문자열 길이를 알아낼때도 애를 먹었다
'||length(upw)like("44")# 일단 결과적으로 이 코드로 하긴했다
이 코드를 작성한 후 정상 작동이 되어서( 길이가 44가 아닐시 500에러가 나온다) 길이가 44라는것을 알았는데
어떻게 나는 44인것을 알고 저 코드를 작성 하였을까??
정답은 14부터 그냥 쭉 수작업으로 브루트 포싱을 해주었다
( request 코드를 짤까 했지만 어짜피 60이하일텐데 코드 짤 시간에 할 수 있을것 같았다 )
다행히도 44에서 웹 사이트가 정상 작동을 하며 upw의 길이가 44인것을 알게 되었다
그러면 결국
ipw = DH{"40글자"}
이런 상황인것이다
그러면 지금 할 수 있는 수단은 버프스위트를 쓰던가 파이썬 request 코드를 짜는건데
나는 후자를 택했다

코드를 실행해보면

플래그가 나오는 것을 볼 수가 있습니다
'web > 웹 해킹' 카테고리의 다른 글
| baby-union 문제 풀이 + 여러 sql injection 방식 (0) | 2025.11.08 |
|---|---|
| simple_sqli_chatgpt 문제 풀이 (0) | 2025.11.06 |
| BypassIF 문제 풀이 (0) | 2025.11.06 |
| sqli, command injection 문제 풀이 (1) | 2025.11.05 |
| XSS , CSRF 문제 풀이 (0) | 2025.11.04 |