Day13
示例代码:
1 | public class UploadFileController extends HttpServlet { |
初步看到代码是上传漏洞,只对ContentType的值做了校验,轻松绕过。可是上传文件后,发现并没有返回路径。
然后看到"String file = uploadPath + File.separator + item.getName();"
,此处的文件名用户可控,且未做任何过滤,可通过"../"
来控制上传路径,从而获取webshell。
上传webshell,post包部份数据如下:
1 | ntent-Disposition: form-data; name="filename"; filename="../shell.jsp" |
成功收到shell。
Day14
示例代码:
1 | import java.io.PrintWriter; |
该示例代码为dde漏洞,响应的数据格式为"text/csv"
格式,在传入的数据中,参数"description"
可控,可构造以"="
或"-"
打头的恶意语句,如:"description==cmd |'/C calc' !A0"
。
执行结果:
Day15
示例代码:
1 | public class FindOnSystem extends HttpServlet { |
看到敏感的方法"processBuilder.start()"
,典型的命令执行漏洞。可发现"options"
传入的值全部拼接在find命令后,尝试"; pwd"
、"||"
、"&&"
等常见命令,发现都不能返回正常结果,(但是在终端可以正常执行,不是很明白为啥)。看了下官方提示,使用的是"options=-exec pwd ;"
,可正常执行。
注find -exec用法:"find ./ -type f -exec ls -l {} \;"
。 以;
为结束标志,由于各个系统中分号会有不同的意义,因此在前面加上反斜杠。{}
代表前面find查找出来的文件名
执行结果:
Day16
示例代码:
UserEntity.java
1 |
|
FindController.java
1 | public class FindController { |
给出了两个java文件,第一个主要是实体的创建,忽略掉。在FindController文件中,sql语句为"from UserEntity where firstName ='" + escapeQuotes(name) + "'"
,确定为hql注入漏洞。在用户传入的"name"
参数,只通过escapeQuotes方法将"'"
替换成了"''"
,和Hibernate处理字符串文字的单引号方法一致,都是对其进行转义。此时可通过转义"'"
的方式绕过限制。
构造payload,执行结果: