Hacking/Web.

SQL Injection table 이름 모를 때

2018. 2. 8. 23:11

SQL Injection을 할 때 보통 where 에서 취약점이 많이 터지지만, table 에서 터지는 경우도 심심찮게 나온다. 그래서 table 명을 갖고 올 수 있는 방법들을 정리해본다. 


information_schema.tables

 information_schema 데이터 베이스에서 table을 갖고 오는 방법이 사실 제일 많이 쓰는 방법이다. 해당 테이블에는 다음과 같은 정보들이 들어있다. 


참고로, table_name에 테이블명이 들어있다. 버그바운팅하는 서비스가 대규모일 경우, 테이블이 무지막지하게 많으니 where 구문으로 table_schema = database()를 하고 나서 table을 뽑는 것을 추천한다. 


근데 CTF 같은 경우에는 information은 대부분 많이 막고 시작하기 때문에 사실 별로 소용이 없을 것이다.

mysql.innodb_table_stats

 해당 테이블은 CTF에서 그렇게 많이 막고 있지 않아서 유용하게 쓸 수 있을 듯 하다. 해당 테이블에는 다음과 같은 정보들이 들어있다. 


똑같이 table_name 에 테이블명이 들어있다. 


information_schema.processlist

 만약 information이나 schema가 막히지 않았다면 다음과 같은 방법으로 테이블을 빼내는 것이 가능하다. 

mysql> select * from information_schema.processlist;
+------+------+-----------+--------------------+---------+------+-----------+----------------------------------------------+
| ID   | USER | HOST      | DB                 | COMMAND | TIME | STATE     | INFO                                         |
+------+------+-----------+--------------------+---------+------+-----------+----------------------------------------------+
| 4924 | root | localhost | performance_schema | Query   |    0 | executing | select * from information_schema.processlist |
+------+------+-----------+--------------------+---------+------+-----------+----------------------------------------------+
1 row in set (0.00 sec)

사실 테이블말고도 쿼리를 한 번에 빼내는 방법이긴 하다ㅋㅋ 테이블명을 이렇게도 알 수 있다. 

information이 필터링되어 해당 쿼리를 실행하지 못한다면, 다른 DB를 사용하면 된다. 

sys.processlist

 이것도 위의 information_schema.processlist 과 똑같긴 한데 더욱 시스템 관리자에게 치중된 테이블이다. 


근데 root 권한이 없으면 해당 DB를 못보기 때문에,, 이것은 안타깝게도 user()를 확인하고 나서 써보도록 하자. 

사실 root면 이 것 말고도 할 수 있는게 많을 것 같긴 하다ㅋㅋ 




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

CTR 웹해킹 문제 풀 때 확인해야하는 것들  (0) 2018.03.02
XXE to SSRF  (0) 2018.02.15
Flask에서 SSTI 나오면 답 없는 점  (0) 2018.01.14
'1=1'-- - 가 참이 되는 이유  (0) 2018.01.04
워게임 문제 아이디어  (0) 2017.12.09