本文最后更新于 197 天前,其中的信息可能已经有所发展或是发生改变。
CSRF
一般需要先检查框架对CSRF的防护方案,包括请求是否有token、csrf-token等关键字,是否存在替换token值并重复请求漏洞、重复使用token、对referer校验等漏洞。
对Referer过滤不严导致的CSRF漏洞
String referer = request.getHeader("Referer");
if ((referer!=null) &&(referer.trim().startWith("www.testdomain.com"))) {
......
}
如果是通过startWith过滤,可以利用www.testdomain.com.hacker.com绕过。
token可重用导致CSRF漏洞
token被泄露或盗用,可能导致CSRF漏洞发生。
SSRF
敏感函数
HttpClient.execute()
HttpClient.executeMethod()
HttpURLConnection.connect()
HttpURLConnection.getInputStream()
URL.openStream()
HttpServletRequest()
BasicHttpEntityEnclosingRequest()
DefaultBHttpClientConnection()
BasicHttpRequest()
支持协议
http
https
file
ftp
mailto
jar
netdoc
- CVE-2019-9827
- CVE-2014-4210
URL跳转
常见参数名
url
site
host
redirect
domain
target
link
常见函数
sendRedirect
getHost
redirect
setHeader
forward
文件操作漏洞
文件包含
动态包含
%@include file="test.jsp"%
静态包含
<jsp:include page="<%=file%>"></jsp:include>
通常危害只有文件下载,不包括代码执行
文件上传
File
lastIndexOf
indexOf
FileUpload
getRealPath
getServletPath
getPathInfo
getContentType
equalsIgnoreCase
FileUtils
MultipartFile
MultipartRequestEntity
UploadHandleServlet
FileLoadServlet
FileOutputStream
getInputStream
DiskFileItemFactory
文件下载、读取
FileInputStream
getOutputStream
文件写入
文件解压
Web后门漏洞
直接调用
系统命令执行函数
java.lang.Runtime.exec() # 无回显
java.lang.ProcessBuilder.start()
反射调用
BASE64Decoder()
Class.forName()
getMethod()
JDK特性
利用Lambda表达式编写JSP一句话木马
逻辑漏洞
前端配置不当漏洞
CORS
CSP
拒绝服务攻击漏洞
ReDos
压缩包炸弹
点击劫持漏洞
HTTP参数污染漏洞
WEB服务器 | 参数获取函数 | 获取到的参数 |
PHP/Apache | $_GET | 最后一个 |
JSP/Tomcat | getParameter | 第一个 |
Perl(CGI)/Apache | Param | 第一个 |
ASP/IIS | QueryString | 所有 |
Python/Apache | getvalue | 所有 |