sql injection bypass WAF Advanced 문제 풀이

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