Hook 函数列表
本文档列出了我们挂钩的函数列表
Java 版本
攻击检测
其中,SQL注入检测点为 execute/executeUpdate/executeQuery/executeBatch/executeBatchInternal/addBatch 方法之一,具体请看我们在github的源代码,这里不在赘述
检查内容 | 方法名称 |
---|---|
文件上传 | org.apache.commons.fileupload.disk.DiskFileItem.setHeaders() |
org.apache.commons.fileupload.FileUploadBase.parseRequest() | |
文件读取 | java.io.FileInputStream(File file) |
文件写入 | java.io.FileOutputStream() |
java.io.FileOutputStream(String name, boolean append) | |
文件重命名 | java.io.File.renameTo() |
文件遍历 | java.io.File.list() |
SSRF | org.apache.commons.httpclient.URI.parseUriReference() |
org.apache.http.client.methods.HttpRequestBase.setURI() | |
com.squareup.okhttp3.HttpUrl.parse(String) | |
com.squareup.okhttp.HttpUrl.parse(String) | |
sun.net.www.protocol.http.HttpURLConnection.connect() | |
反序列化 | java.io.ObjectInputStream.resolveClass |
命令执行 | java.lang.UNIXProcess.<init> |
java.lang.ProcessImpl.<init> | |
OGNL 表达式执行 | ognl.OgnlParser.topLevelExpression() |
XXE | com.sun.org.apache.xerces.internal.util.XMLResourceIdentifierImpl() |
org.apache.xerces.util.XMLResourceIdentifierImpl的setValues() | |
JSTL import | org.apache.taglibs.standard.tag.common.core.ImportSupport.targetUrl() |
DubboRPC | com.alibaba.dubbo.rpc.filter.ContextFilter.invoke() |
com.alibaba.dubbo.rpc.filter.GenericFilter.invoke() | |
SQL 注入 | com.mysql.jdbc.StatementImpl |
com.mysql.jdbc.PreparedStatement | |
com.mysql.cj.jdbc.PreparedStatement | |
org.sqlite.Stmt | |
org.sqlite.PrepStmt | |
org.sqlite.jdbc3.JDBC3Statement | |
org.sqlite.jdbc3.JDBC3PreparedStatement | |
oracle.jdbc.driver.OracleStatement | |
oracle.jdbc.driver.OraclePreparedStatement | |
com.microsoft.sqlserver.jdbc.SQLServerStatement | |
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement | |
org.postgresql.jdbc.PgStatement | |
org.postgresql.jdbc1.AbstractJdbc1Statement | |
org.postgresql.jdbc2.AbstractJdbc2Statement | |
org.postgresql.jdbc3.AbstractJdbc3Statement | |
org.postgresql.jdbc3g.AbstractJdbc3gStatement | |
org.postgresql.jdbc4.AbstractJdbc4Statement | |
com.ibm.db2.jcc.am | |
com.ibm.db2.jcc.am.Connection |
基线检查
检查内容 | 方法名称 |
---|---|
数据库连接账号 | com.mysql.jdbc.NonRegisteringDriver.connect() |
com.mysql.cj.jdbc.NonRegisteringDriver.connect() | |
org.sqlite.JDBC.connect() | |
com.microsoft.sqlserver.jdbc.SQLServerDriver.connect() | |
org.postgresql.Driver.connect() | |
oracle.jdbc.driver.OracleDriver.connect() | |
com.ibm.db2.jcc.DB2Driver.connect() |
服务器启动检测点
用途 | 方法名称 |
---|---|
Tomcat | org.apache.catalina.startup.Catalina.start() |
Jetty | org.eclipse.jetty.server.Server.doStart() |
JBoss 4 | org.jboss.system.server.ServerImpl.start() |
JBoss 5 | org.jboss.bootstrap.AbstractServerImpl.start() |
JBoss 6 | org.jboss.bootstrap.impl.base.server.AbstractServer.start() |
Resin | com.caucho.server.resin.Resin.initMain() |
WebSphere | org.eclipse.core.launcher.Main.run() |
Tomcat/Jetty/JBoss/Resin/WebSphere 通用
用途 | 方法名称 |
---|---|
preRequest | apache.catalina.connector.CoyoteAdapter.service() |
request | apache.catalina.core.ApplicationFilterChain.doFilter() |
缓存body | org.apache.catalina.connector.InputBuffer.readByte(int) |
org.apache.catalina.connector.InputBuffer.read(byte[],int ,int) | |
HTML 注入 | org.apache.catalina.connector.OutputBuffer.close() |
Resin 服务器
用途 | 方法名称 |
---|---|
preRequest | com.caucho.server.http.HttpRequest.handleRequest() |
com.caucho.server.http.HttpRequest.handleResume() | |
request | com.caucho.server.dispatch.ServletInvocation.service() |
com.caucho.server.dispatch.ServletInvocation.doResume() | |
缓存body | com.caucho.server.connection.ServletInputStreamImpl.read(int) |
com.caucho.server.connection.ServletInputStreamImpl.read(byte[],int ,int) | |
com.caucho.server.http.ServletInputStreamImpl.read(int) | |
com.caucho.server.http.ServletInputStreamImpl.read(byte[],int ,int) | |
HTML注入 | com.caucho.server.connection.AbstractHttpResponse.finish() |
com.caucho.server.connection.AbstractHttpResponse.finishInvocation() | |
com.caucho.server.http.AbstractHttpResponse.finish() | |
com.caucho.server.http.AbstractHttpResponse.finishInvocation() |
Jetty 服务器
用途 | 方法名称 |
---|---|
preRequest | org.eclipse.jetty.server.Server.handle() |
request | org.eclipse.jetty.server.handler.HandlerWrapper.handle() |
缓存body | org.eclipse.jetty.server.HttpInput.read(int) |
org.eclipse.jetty.server.HttpInput.read(byte[],int ,int) | |
HTML注入 | org.eclipse.jetty.server.HttpOutput.close() |
WebSphere 服务器
用途 | 方法名称 |
---|---|
preRequest | com.ibm.ws.webcontainer.WebContainer.handleRequest() |
request | com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters() |
缓存body | com.ibm.ws.webcontainer.srt.http.HttpInputStream.read(int) |
com.ibm.ws.webcontainer.srt.http.HttpInputStream.read(byte[],int ,int) | |
HTML注入 | com.ibm.ws.webcontainer.srt.SRTServletResponse.finish() |
PHP 版本
攻击检测
检查内容 | 方法名称 |
---|---|
webshell callable | array_walk |
array_map | |
array_filter | |
ReflectionFunction::__construct | |
命令执行 | passthru |
system | |
exec | |
shell_exec | |
proc_open | |
popen | |
pcntl_exec | |
命令执行(webshell) | passthru |
system | |
exec | |
shell_exec | |
proc_open | |
popen | |
pcntl_exec | |
目录遍历 | dir |
scandir | |
opendir | |
XSS(echo) | echo |
文件读取 | file |
readfile | |
file_get_contents | |
fopen | |
SplFileObject::__construct | |
文件写入 | file_put_contents |
fopen | |
SplFileObject::__construct | |
文件写入(webshell) | file_put_contents |
文件拷贝 | copy |
文件移动 | rename |
文件上传 | move_uploaded_file |
文件包含 | include |
文件运行(webshell) | eval |
assert(仅PHP5) | |
SQL注入 | mysql_query(仅PHP5) |
mysqli_query | |
mysqli::query | |
mysqli_real_query | |
mysqli::real_query | |
mysqli_prepare | |
mysqli::prepare | |
PDO::query | |
PDO::exec | |
PDO::prepare | |
pg_query | |
pg_send_query | |
pg_prepare | |
SQLite3::query | |
SQLite3::exec | |
SQLite3::querySingle | |
SSRF | curl_exec |
基线检查
检查内容 | 方法名称 |
---|---|
数据库连接账号 | mysql_connect (仅PHP5) |
mysql_pconnect (仅PHP5) | |
mysqli::__construct | |
mysqli::connect | |
mysqli_connect | |
mysqli::real_connect | |
mysqli_real_connect | |
PDO::__construct | |
pg_connect | |
pg_pconnect |