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 |