01
输入和输出流
这些用于将数据读入应用程序。它们可能是应用程序的潜在入口点。进入点可能来自外部来源,必须进行调查。这些也可以用于路径遍历攻击或DoS 攻击。
要搜索的字符串:
FilelnputStream |
ObjectinputStream |
FilterinputStream |
PipedinputStream |
SequencelnputStream |
StringBufferinputStream |
BufferedReader |
ByteArrayinputStrean |
javaio.FileOutputStream |
File |
OblectinputStream |
PipedinputStream |
StreamTokenizer |
getResourceAsStream |
java.io.FileReader |
ava.io.FileWriter |
java.io.RandomAccessFile |
java.io.File |
renameTo |
Mkdir |
02
Servlets
02
Servlets
接口调用可能的参数/header/URL/cookie 篡改, HTTP 响应拆分和信息泄漏的途径。审计Http请求中获取的参数。
要搜索的字符串:
favax.servlet. |
getParameterNames |
qetParameterValues |
qetParameter |
getParameterMap |
aetScheme |
getProtocol |
getContentType |
getServerName |
getRemoteAddr |
getRemoteHost |
getRealPath |
getLocalName |
getAttribute |
getAttributeNames |
getLocalAddr |
getAuthType |
getRemoteUser |
getCookies |
Secure |
HttpServletRequest |
getQueryString |
getHeaderNames |
getheaders |
getPrincipal |
getUserPrincipal |
isUserinRole |
getinputStream |
getOutputStream |
getWriter |
addCookie |
addHeader |
setHeader |
setAttribute |
putValue |
javax.servlet.http.Cookie |
getName |
getPath |
getDomain |
getComment |
getMethod |
getPath |
getReader |
getRealPath |
getRequestURi |
getRequestURL |
getServerName |
getValue |
getValueNames |
getRequestedSessionld |
qetParameterValues |
qetParameter |
favax.servlet. |
getParameterNames |
03
跨站脚本
要搜索的字符串:
Javax.servlet. ServletOutputStream.print |
strcpy |
04
响应拆分
响应拆分允许攻击者通过在报头中添加额外的 CRLF来控制响应体。在 HTTP 中,报头和正文由 2 个 CRLF 字符分隔,因此,如果攻击者的输入用于响应报头,并且该输入包含2 个 CRLF字符,则 CRLF 之后的任何内容都将被解释为响应正文。在代码审计中,确保系统过滤任何被放入标头的信息。
要搜索的字符串:
javax.servlet.http.HttpServletResponsesendRedire |
strcpy |
setHeader |
05
重定向
每当应用程序发送重定向响应时,都要确保所涉及的逻辑不会被攻击者的输入所操纵。尤其是当使用输入来确定重定向的目的地时。
要搜索的字符串:
sendRedirect |
setStatus |
addHeader |
etHeader |
06
SQL和数据库
搜索与 Java 数据库相关的代码应该有助于查明被审计的应用程序的持久层中涉及的类/方法。
要搜索的字符串:
java.sql.Connection.prepareStatement |
java.sql.ResultSetgetObject |
select |
insert |
java.sal.Statement.executeUpdate |
java.sqLStatementaddBatch |
execute |
executestatement |
createStatement |
java.sal.ResultSet.getString |
executeQuery |
fdbc |
java.sql.Statement.executeQuery |
java.sql.Statement.execute |
delete |
update |
java.sql.Connection.prepareCall |
07
SSL
寻找利用 SSL 作为点对点加密媒介的代码。下面的片段应该指出 SSL 功能是在哪里开发的。
要搜索的字符串:
com.sun.net.ssl |
SSLContext |
SSLSocketFactory |
TrustManagerFactory |
HttosURLConnection |
KeyManagerFactory |
08
会话管理
要搜索的字符串:
getSession |
invalidate |
getId |
09
命令交互
可能容易受到命令注入攻击或操作系统注入攻击。Java 连接到本机操作系统可能会导致严重问题,并可能导致服务器整体受损。
要搜索的字符串:
java.lang.Runtime.exec |
java.lang.Runtime.getRuntime |
getId |
10
日志记录
通过审计应用程序中包含的以下代码,可能会遇到一些信息泄漏。
要搜索的字符串:
java.io.PrintStream.write |
log4j |
iLo |
Lumberiack |
MonoLog |
qflog |
just4loa |
log4Ant |
JDLabAgent |
11
查找 Ajax 的用法和可能的JavaScript 问题
要搜索的字符串:
document.write |
eval |
document.cookie |
window.location |
document.URL |
document.URL |
参考资料
扫码加个好友进
cisp系列考证备考群
请备注进群
原文始发于微信公众号(HACK之道):Java代码审计关键点
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论