业务漏洞挖掘笔记

VSole2022-01-15 22:42:21
多年的实战业务漏洞挖掘经验,为了让今后的业务漏洞挖掘工作更清晰,以及尽可能的把重复性的工作自动化、半自动化,所以花费很大精力做了这个笔记。
具体操作流程:
得到测试目标-目标资产范围确定-资产收集-资产管理-资产分类-具体业务功能理解-业务漏洞测试-逻辑漏洞测试-提交报告

资产管理

很多文章和大佬都讲过,渗透测试的本质就是信息收集,收集到的信息越多,发现漏洞的概率越大,这些信息被称为资产

那么常规的资产收集手段,思路已经千篇一律了,围绕着子域名和IP收集,其实资产收集的核心思想是,确定资产范围,确定资产范围就需要先分析出资产特征,然后通过各种手段全网寻找符合特征的资产,这叫做资产识别,把收集到的资产分类编辑的具有较高可用性,叫做资产管理

如当你要去干一个目标之前,首先第一步肯定是要知道目标是啥,了解目标是做什么的,凭借安全测试人员的常识和经验分析目标存在那些特征,来确定资产范围来收集符合特征的资产 就是资产收集

目标资产

确定资产范围/目标画像

需要收集到的信息

  1. 域名、子域名
  2. 网页内容特征信息
  3. ICP备案信息
  4. WHOIS联系信息
  5. SSL/TLS证书信息
  6. DNS解析信息
  7. WHOIS-NAMESERVER信息
  8. IP以及同IP其他端口和站点服务类型和版本等基础信息
  9. C段、B段、等相关ip段
  10. 目标全名、介绍、招股书、所在地/联系方式/邮箱/电话/github
  11. 目标负责人、法人、管理员、员工 姓名/所在地/联系方式/邮箱/电话
  12. 客户端应用windows/android/ios/mac/公众号/小程序
  13. 其他

收集这些信息、会大大增加挖到业务漏洞的成功率,但是遇到中大型政企相关目标,他们的业务是很多 业务线很长,通过手工去收集管理,无疑是个体力活,但有很多的资产收集工具,稍微能帮助安全测试人员降低些工作量,我用的都是自己开发的,哈哈哈,如图。

功能资产

收集到资产后,就要进行资产管理、资产分类,以便于安全测试,更好的可视化,可以帮助快速定位到风险点。


这些信息在安全测试时都是需要去测试的点和很可供参考的信息,如:

  1. 一个组建应用突然爆出0day,可以快速第一时间定位到目标资产中存在该组建的资产。
  2. 租用若干vps,7x24小时爆破目标资产中可以爆破弱密码的资产。
  3. 租用若干vps,7x24监控资产变化,以便发现高风险的点。

资产监控

仅仅是收集到这些资产是不够的,要持续监控业务的变化,在职业刷src或者apt攻击者的角度,单单过一遍刚收集到的资产是不能满足持续性业务漏洞挖掘;从职业刷src的角度,过一遍收集的资产,已经发现了所有漏洞并已经提交后修复,或者用当前漏洞测试方法并没发现有漏洞,这样业务是安全的,但这个安全是在当下时间的,企业要发展、要解决当前问题,就会出新业务、或者不断的修复更新旧问题,这就是业务的变化,通过持续性监控业务变化,最快速度的发现变化,对变化进行安全测试、漏洞挖掘。有经验的刷src的同学都知道,新业务和刚更新过的业务发现漏洞概率都很高。

业务变化主要分为三类:

  • web业务的变化
  • IP和端口的变化
  • 客户端软件的更新迭代

那么资产监控这么大的工作量,靠手工是不可能的必须要靠代码实现,至少半自动化、甚至自动化。

漏洞

业务面临的风险

数据被窃取、权限被控制、业务不能正常运行。

  • 机器权限
  • 功能权限
  • 相关应用服务权限
  • 数据泄露

什么是漏洞?

一个产品的实现、总会有很多逻辑包括在内,如一个网购网站,他需要的功能,

  1. 商品展示、商品分类搜索、商品购买等。
  2. 网站后台管理 商品管理、订单处理、相关反馈处理等。
  3. 个人用户管理、用户注册、用户登录处理、用户个人资料编辑、收获地址管理、订单管理等。

这是一个最基础的网购平台网站,单纯用技术角度来描述,你买一件商品 其中用到经过多少技术。

我要开个网购网站,最基础的 首先要有一个域名、一台服务器、服务器上装相关web服务软件,如apache(web服务软件)+php(web脚本语言)+mysql(数据库)。

界面展示,需要前端开发做界面展示、前端程序员需要掌握的技术、html+css+javascript+ps等,为了适配移动端或者技术进阶需要html5+css3+jquery还有一些前端常用的框架vue\bootstrap\AngularJS\webpack等,还要尽量让前端浏览器处理更快 首屏速度更快,还要有一定的设计能力,让界面看着更美观吗,用户打开浏览器看见的页面就是通过这些技术实现。

后端开发、根据业务场景情况、最优选择一个适合业务的后端开发语言,如phpodejs\jsp\aspx\asp\其他web cgi等,就选php吧,资深后端程序员必须框架开发,请参考 PHP的25种框架 目前国内php最火框架ThinkPHP,后端开发主要为了实现 业务逻辑、如那些表单操作多的功能,商品搜索、用户登录注册、购买、个人信息修改、商品修改等功能,都需要通过前端页面通过http/s协议传输到后端 通过php之类后端开发语言进行处理。

数据库建设,根据业务场景情况、最优选择一个适合业务的数据库,数据库分为sql数据库、如MySQL\SQL server\Oracle\PostgrcSQL等,nosql数据库Mongodb\Redis等,用户的提交的数据就保存在这些数据库里,如账号密码、个人信息、订单信息等,管理员存放的商品信息 也都在数据库里,通过脚本语言的逻辑处理调用数据库里的数据 展示到前端页面。

选择一个靠谱的web服务、如apache\iis\Nginx\Lighttpd\Tomcat等其他web服务软件,还要考虑并发、扩容、灾备等相关技术问题,面对1w用户 10w用户 100万的用户 1000万乃至上亿,都有最优不同的应对方式方法策略,当然这都是架构师、全栈程序员考虑的问题,我们web黑盒测试的漏洞挖掘选手,只需要考虑,这些流程 这些点上,那些地方最容易 最常出现漏洞?

因为有了功能,所以有了漏洞,需要用到数据库的web业务就很有可能出现sql注入,需要有文件操作或系统命令执行的地方,就会出现命令注入或任意文件操作的漏洞,信息管理系统自然存在信息泄露的风险....

话归正题、什么是漏洞?比如一个登陆功能,我通过技术手段,未经许可登陆进其他用户或者管理员账号,那么这其中肯定是存在漏洞的,漏洞列表如下....

黑盒测试相关漏洞


如图所见,大多数技术相关漏洞都是因为注入非法字符串导致出现漏洞,xss是js代码注入,js可以控制当前浏览器页面;sql注入是注入的sql命令,sql是操作数据库的语言;命令注入,操作系统命令可以控制机器; 就因为用户输入的非法字符串,被不安全代码处理,让 操作系统/编程语言/数据库/浏览器 理解执行后,导致出现了漏洞。

  • Xss
echo $_GET[ 'xss' ];
?>
  • Sql
$id=$_GET["id"];
    if (isset($id)){
        //$statement = $link->prepare("SELECT * FROM users where id=".$id);
        $result = mysqli_query($link,"SELECT * FROM users where user_id=".$id);
        if (!$result) {
            printf("Error: %s", mysqli_error($link));
            exit();
            }
        while($row = mysqli_fetch_array($result)){
                echo $row['first_name'];
                echo "
";
            }
    }else {
        echo '{"text":"error"}';
    }
?>
  • Ssrf
ini_set("display_errors", "On"); 

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
#curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
#curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_exec($ch);
curl_close($ch);
?>
  • 服务端通过内网访问用户输入的url链接就是ssrf
  • 文件读取
  • Xxe
  • xml注入
  • 逻辑漏洞
  • 命令注入
/*
命令注入案例
*/
if( isset( $_GET[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'cmd' ];

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ls  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'dir ' . $target );
    }

    // Feedback for the end user
    echo "
{$cmd}
";
}

?>
  • 代码注入
  • php/nodejs/jsp/aspx/asp/python/golang/c/c++等等编程语言的写入与拼接。
  • 信息泄露
  • 上传漏洞
  • 上传可执行文件到可执行目录,或者被服务端执行。

那么这些漏洞都是由http协议传输,测试漏洞存在的第一步,修改请求参数值,重放判断响应包是否与正常请求的响应包有所不同,如:

正常


异常

这是一个很典型的sql报错注入判断方式。

当然,判断是否存在漏洞依据很多,大体分为:

  • 响应内容
  • 响应时间
  • Dnslog/Httplog判断
  • 浏览器Dom渲染后的Html
  • 浏览器DevTools Console

根据实际情况,选择最适合的判断方式,其实常见的、标准化的http传参方式,完全可以依照以上列举的规则,做出一个减轻工作量漏洞测试工具,如下图

  1. 通过修改请求参数值后追加 单双引号 逐个重放,遍历每个参数,确认那个参数会引起响应异常。

  2. 对异常的参数,通过修改请求参数值后追加payload 来检测命令注入、ssrf、代码注入、sql注入、信息泄露等漏洞。

  3. 如果响应Content-Type=html,用浏览器重放请求来检测domxss、和抓取dom渲染后页面url、domain等相关信息。

对于一些点击,和页面的表单,其实打开浏览器挖洞时 你可以加个参数--remote-debugging-port=9222 然后远程调试 可以做一些,便捷的工具,如自动表单填写,自动点击页面等功能,辅助测试,减少不必要的重复工作。

调试浏览器

自动表单填写


对于常规的业务场景,从目标范围确定,资产收集到漏洞检测,尽可能的规范化,流程化,工具化,做黑客绝对不应该是整天去手工修改http通信里的参数,在url里加单引号 加</span></code><span style="outline: 0px;max-width: 100%;font-size: 16px;box-sizing: border-box !important;overflow-wrap: break-word !important;">,修改id遍历,能不能酷一点 做个帅一点的黑客?</span></p><p style="outline: 0px;max-width: 100%;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><img class="rich_pages wxw-img" data-ratio="0.8972477064220183" data-s="300,640" src="https://mmbiz.qpic.cn/mmbiz_jpg/GzdTGmQpRic0nmYuOqib9blgwWj39Ks56C7WFnCkiax3YBSNQKHRaeia0ZBP3Q4LY62SU09s4NmjDs2FuAx63qiccwA/640?wx_fmt=jpeg" data-type="jpeg" data-w="545" style="outline: 0px;box-sizing: border-box !important;overflow-wrap: break-word !important;visibility: visible !important;width: 262px !important;"></p><p style="outline: 0px;max-width: 100%;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);text-align: left;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;font-size: 16px;box-sizing: border-box !important;overflow-wrap: break-word !important;">一直幻想着通过自动化挖洞躺赚的一天....</span></p><p style="outline: 0px;max-width: 100%;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;background-color: rgb(255, 255, 255);box-sizing: border-box !important;overflow-wrap: break-word !important;"><br style="outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"></p><section class="code-snippet__fix code-snippet__js"><ul class="code-snippet__line-index code-snippet__js"><li></li></ul><pre class="code-snippet__js"><code style="outline: 0px;max-width: 1000%;text-align: left;white-space: pre-wrap;display: flex;font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span class="code-snippet_outer" style="outline: 0px;max-width: 1000%;box-sizing: border-box !important;overflow-wrap: break-word !important;">作者:guimaizi,文章来源:先知社区</span></code></pre></section><p><br></p><p style="outline: 0px;max-width: 100%;text-align: center;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="outline: 0px;max-width: 100%;font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;white-space: normal;font-size: 16px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="outline: 0px;max-width: 100%;color: rgb(255, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;">推荐关注(红队方向):</span></strong></p><section class="mp_profile_iframe_wrp"><mpprofile class="js_uneditable custom_select_card mp_profile_iframe" data-pluginname="mpprofile" data-id="Mzg5OTY2NjUxMw==" data-headimg="http://mmbiz.qpic.cn/mmbiz_png/2tA4hG6O9pyRtgZD1QZjuZKGousFdK6w43nmK1fPKzTrwgJ1ZzVDkJrz2zQ5bDxJ2icbJN5R70PUXx3IKibzwNtQ/0?wx_fmt=png" data-nickname="橘猫学安全" data-alias="" data-signature="每日一干货?" data-from="0"></mpprofile></section>

漏洞挖掘box-sizing
本作品采用《CC 协议》,转载必须注明作者和本文链接
跨站脚本英文全称(Cross Site Scripting跨站脚本),为了不和css层叠样式表(英文全称:Cascading Style Sheets)混淆,因此将跨站脚本缩写为XSS。本期我们讲解一下XSS漏洞原理和利用检测。
绕过登录页面的七种常见方法这篇文章是关于绕过由于网站的弱点而发生的登录页面功能。常见的七种方式绕过 SQL 注入通过跨站点脚本通过操纵响应返回包绕过爆破攻击限制绕过目录爆破攻击默认凭据绕过通过删除请求中的参数绕过 SQL 注入我以 Mutillidae 为例进行演示。我们以管理员身份登录。在您的情况下,当它不起作用时尝试其他payload,并使用 SQLMap 工具dump用户名和密码。并显示弹出窗口,因此您可以通过 XSS 尝试 CSRF 并查看受害者凭据。这是它的 CSRF payload
业务漏洞挖掘笔记
2022-01-15 22:42:21
功能资产收集到资产后,就要进行资产管理、资产分类,以便于安全测试,更好的可视化,可以帮助快速定位到风险点。租用若干vps,7x24监控资产变化,以便发现高风险的点。有经验的刷src的同学都知道,新业务和刚更新过的业务发现漏洞概率都很高。漏洞业务面临的风险数据被窃取、权限被控制、业务不能正常运行。网站后台管理 商品管理、订单处理、相关反馈处理等。
为什么会有这篇文章,其实是一个非常有意思的事情。在安全领域,有非常多涉及Word、Execl、PDF、CHM、PPT等等文档的攻击手法,从Web领域到红队领域,使用各种文档来进行攻击的姿势层出不穷,本文希望起到一个抛砖引玉的功能,尽量把各种使用“文档“的攻击姿势讲全。那么废话不多说,让我们先从最经典的使用文档进行钓鱼的功能讲起。
0x01 苦逼的测试任务 某一天,我照常在学校的CTF群和学长吹水,突然管事的学长在群里发了一张图,这个月轮到我们学校对省内的某旅游相关企业进行漏洞测试。上面的老师自然而然把这个任务分配给我们CTF战队,要求是找到漏洞,能Getshell的点证明能Getshell即可,不要深入利用。
这篇文章主要是通过前端JS来寻找接口进行测试,寻找漏洞成功进入后台后,进行后台文件上传html。仅供学习。
也可以输入多个域名、C段IP等,具体案例见下文。功能齐全的Web指纹识别和分享平台,内置了一万多条互联网开源的指纹信息。
VSole
网络安全专家