해결된 질문
작성
·
278
2
안녕하세요. 크리핵티브님 MSSQL에 대한 Error-based 공격 실습 관련 질문 사항이 발생해서 질문 드리게 되었습니다.
Injection 공격 검증을 할 때 사용하는 쿼리문 내용 중 test%' and '%'=' 구문이 있는데 이런 구문이 있는 이유가 index.php 의 내용을 보면 아래와 같은 코드로 만들어져서 있는 것으로 알고 있습니다.
[index.php의 일부 코드]
(생략)
$query = "select * from {$tb_name}";
} else {
if($search_type == "all") {
$query = "select * from {$tb_name} where title like '%{$keyword}%' or writer like '%{$keyword}%' or content like '%{$keyword}%'";
} else {
$query = "select * from {$tb_name} where {$search_type} like '%{$keyword}%'";
}
--> 즉 우리가 입력한 test%' and '%'=' 은 if문 안에 들어가서 $query의 '%{$keyword}%'에 들어가게 되어서 최종적으로는 $query = "select * from board..tb_board where '%test%' and '%'='%'"; 이 되어서 test 이름이 들어간 모든 게시물을 보여주는 것으로 알고 있습니다.
공격 검증에 사용되는 test%' and '%'=' 구문은 현재 우리가 index.php의 $query의 내용을 알고 있어서 이렇게 test%' and '%'=' 작성 할 수 있지만 실제 실무에서도 이게 활용이 가능한지 궁금합니다.
혹시 대부분의 실무 환경도 $query = "select * from {$tb_name} where {$search_type} like '%{$keyword}%'"; 같은 구조로 개발이 되어서 대부분의 실무 환경에도 test%' and '%'=' 구문을 공격 검증 페이로드로 사용할 수 있는지 여부가 궁금합니다.
답변 1
1
안녕하세요.
위와 같이 쿼리를 작성하는 이유는 In-line 방식의 구문을 작성하기 위함이며, 굳이 In-line 구문이 아닌 Terminating 방식으로 작성을 해도 됩니다.
그러나 위와 같이 쿼리를 작성하는 이유는 Terminating 방식이 안되는 경우가 있기 때문이죠. 또한 우리는 서버측 쿼리 작성된 구조를 알고 올바른 방법으로 다양한 쿼리를 작성을 하기 위함도 있습니다.
실무 환경에서 만약 인젝션 취약점이 발생된다면, 위의 쿼리는 당연히 활용 가능합니다. 제 경험상 짧은 구문으로 취약점 테스트는 대부분 원활히 잘 됩니다.
다만 변수는 보안 솔루션, 시큐어 코딩 이 2가지입니다.
이 2가지도 환경에 따라 천차만별입니다. 굉장히 타이트하게 패턴을 검증하는 경우는 ' and '%'=' 이 구문만 넣어서 공격이라 판별하는 곳도 있긴합니다. 다만, 이 같은 경우는 오탐도 많기에 이렇게 타이트하게 보는건 드물긴합니다...
어느 정도 쿼리가 쌓이면(공격 구문이 길어지면) 공격으로 판별을 하겠죠. 이 또한 여려가지의 우회 방법들이 존재합니다.
최근에 바쁜일이 많아서 확인이 늦었습니다.
정성스러운 답변 감사합니다.
앞으로 더욱 열심히 학습하도록 하겠습니다.