분명 SQLi는 웹에서 제일 기초적인 공격 방법이랬는데.. 뭐든 간에 깊이 공부하면 공부할 수록 어려워지는건가!
어찌 보면 재밌기도 하다. 나중에 실제로는 Quine query 같은 건 거의 사용되지 않고 CTF용이다 라고는 하지만 그래도 무언가를 알아 놓는 것과 모르는 건 차이가 있을 테니! 화이팅!
메타데이터는 데이터에 대한 데이터라고 한다. 이렇게 정의하니 좀 헷갈리는 것 같기도 하지만 데이터들의 집합이라고 보면 된다.
MySQL은 이 메타데이터들을 종류별로 묶어서 테이블을 만들고, 이 테이블들을 모아서 데이터베이스들을 만든다. 굉장히 친숙한 데이터베이스명인 'information_schema'가 바로 그것이다!
information_schema
이 DB는 MySQL 서버 내의 DB의 메타데이터들을 모아둔 DB이다. 그래서 SQLi를 할 때 이 데이터베이스를 이용하여 메타 정보(table, column)를 가져올 수 있었던 것이다. 읽기 전용이라 변경은 불가능하다고 한다.
MySQL에서 information_schema db의 테이블을 show한 결과는 상상 이상으로 많았다;;
진짜 많다.. (긴 사진으로 글이 길어보이는 효과!!)
저 많은 것 중에서 내가 사용해본건 딱 3개.. columns, tables, schemata 뿐 ㅠㅠ 나중엔 더 많아지려나?
제목은 메타데이터지만 저 중에서 이번에 알아볼 것은 PROCESSLIST다.
processlist 테이블에는 서버 내에서 실행 중인 thread에 대한 정보가 들어있다. 테이블을 조회하여 수행 중인 작업을 볼 수 있다.
자세한 건 요 밑에서
Information Schema PROCESSLIST Table
Thread information.
mariadb.com
갑작스럽게 근데 processlist를 공부하는 이유?? 그렇다 ㅡㅡ Quine가 사람 잡아요 ㅠㅠ 게다가 난 시스템 테이블을 보고Routines로 Quine를 할 수 있을 줄 알고 시간만 내다버렸다. 아무리 봐도 아니길래 제일 의심스러운 이 친구로 했다가 푼 문제가 있음.
processlist 테이블의 컬럼들을 select 해봤다. 저 컬럼들 말고도 TIME_MS, STAGE 등이 있는데 그보다 중요한 것은 저 INFO 칼럼이다. 내용을 보면 방금 입력한 쿼리가 담겨 있다. info 컬럼을 한 번 이용해서 명령어를 입력하면
키야 기가 막히게 입력한 구문이 결과로 그대로 나온다. 이걸로 (replace가 밴 당한) Quine 쿼리를 만들어 볼 수 있겠다! 훨씬 쉽고 간편하다.
'SQL Injection' 카테고리의 다른 글
Quine (0) | 2022.11.17 |
---|