본문 바로가기
  • True knowledge exists in knowing that you know nothing. -Socrates-
web/웹 해킹 및 보안

SQLI WAF Bypass with '~~' Operator

by intadd 2020. 9. 7.

 

안녕하세요.

 

몇 달전,  친한 형님을 통해 신기한 SQL Injection WAF Bypass에 대해서 들었습니다. 

구체적으로 어떻게 Injection을 수행했는지는 듣지 못했고,  Operator 에 대해서만 들었습니다. 

 

오랜만에 연구도할 겸, 글을 작성해볼려고 합니다.

 

결론 적으로 말하면 아래와 같습니다. (제가 들은 연산자.)

위 쿼리가 어떤 동작으로 활용될지 아시는 분은 Skip 하셔도 될 것 같습니다. 

["~~" 가 무엇인가 ]

~ 연산이 있었는지도 몰랐던 1인.

 

Mysql 형님한테 한 번 연산에 대해서 물어봤습니다. Mysql 형 이거 뭐야? 

비트 뒤집어 버리기야.

대충 이론은 알았으나 비트를 어떻게 반전하는지 테스트 해보겠습니다.

 

0 --> 1, 1-->0 으로 반전 시키는 것입니다. 

저 1 들은 무엇인가? 

나 64비트야 ㅎㅎ. 이거 구름

아무튼, "~" 연산을 통해 비트 단위로 반전 시킨다는 것을 알았습니다. 

 

사실 "~" 의 역할은 크게 중요도가 높지 않습니다. 

이 "~" 연산자를 어떻게 활용할 것인지가 중요합니다. 

그러면 "~~" 는 무엇일까요?  순차적으로 해석을 해보면 , ~ 를 통해 비트를 반전 시키고, 반전시킨 비트 데이터를 다시 ~ 를 통해 반전 시킨다는 의미입니다. 

 

 

테스트 해보겠습니다. 

bin(2)와 bin(~~2)는 같은 값을 반환합니다. ㅈㄴ 신기하긴 하네.

여기 까지만 수행하면 결론적으로는 어디에 어떻게 활용할지에 대해서 의문점이 생깁니다. 

 

어쩌라고? 

 

["~~" 조지기]

예를 들어 SQL Injection 공격을 테스트한다고 가정해보겠습니다. 

 

Setting Of Table

[0] 정상 쿼리.

 

hi

[1] False값 발생 

True &&(AND) False --> False 

 

[2] True값 발생

True &&(AND) True --> True 

 

hi

위의 검증 값이 패턴 기반  WAF에 걸릴경우. 

 

[3] ~~ 활용 False값 발생 

[4] ~~ 활용 True값 발생 

hihi

이 정도만 이해하면 완벽히 이해한 것이라고 생각합니다. 

아직까지도 저게 무슨 의미가 있는지에 대해 궁금하실 수 있습니다. 

 

[5] 쿼리 어렵게 만들어버리기.

요게 가능하다는 것입니다.

 

ㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋ

[6] 진짜 조지기

신기해버리기 ㅋㅋ  (mysql Version 5로 시작합니다. (*)___,,______(*) )

 

결론은 "~~" 를 반복하면 마지막 연산은 비트를 얼마나 뒤집든 본 데이터 값이 되는 점을 이용합니다. 

 

위의 형태로 WAF 등을 우회 테스트를 해보면 아주 유용할 것 같습니다. 

위와 같은 패턴이 기존에 존재했는지는 모르겠지만, 저는 본적이 없었던 거라 저도 하면서 매우 흥미로웠습니다.

 

일단 모의해킹에서 WAF 를 우회할 때 많이 사용될 거 같고, 뭔가 위 공격기법이 대중화되면 스케너들도 쿼리를 숨기기? 위해서 많이 사용될 거 같숩니다. (추측)

 

Thanks 서비형.

 

 

그럼 이만 나가보겠습니다. 

댓글