记一次一波三折的众测SRC经历

( https://bbs.zkaq.cn

前言

先谈个人SRC心得体会吧,我虽然很早前就体验过挖掘SRC来锻炼自己,但真正坚持下来大概是从去年3月初开始。一开始主要是逛公益SRC平台和教育SRC,动作有点慢,经常遇到报告提交前人吃肉后人喝汤的局面,而且赚不到米,慢慢进入补天SRC开始挖掘小企业和众测。因为之前算是做过几个渗透测试的项目,所以自始至终我都把关注重点放在”交互”上,而且,关键也在于”信息收集”上,只要足够细心和耐心慢慢就有了产出。

本文下面记录一次不断碰到难题不断解决难题的的众测SRC实战,为期三四天,文章不算长,请耐心看完。开局发现是一个搞外贸的企业的信息发布网站。

图片[1]-记一次一波三折的众测SRC经历-华盟网

波折一:RCE漏洞利用失败

通过信息搜集发现网站框架为thinkphp。作为曾经的程序员,我知道ThinkPHP是一个广泛使用的PHP开发框架,但历史上存在多个安全漏洞,尤其是远程代码执行(RCE)漏洞非常好利用。

图片[2]-记一次一波三折的众测SRC经历-华盟网

于是第一反应就是祭出神器Liqun工具箱-1.5进行漏洞扫描与利用,奇怪的是,虽然利用exp工具能够扫描出来确实存在rce漏洞,但是无法成功利用执行命令whoami,多次尝试反弹shell到我的vps也是没有成功。

图片[3]-记一次一波三折的众测SRC经历-华盟网
图片[4]-记一次一波三折的众测SRC经历-华盟网

分析问题出现原因:

  • 可能是工具误报,目标系统并未真正存在该漏洞。
  • 可能是目标系统部署了WAF(Web应用防火墙),拦截了攻击请求。

时间宝贵啊于是只能放弃这里的进攻点,去寻找新的突破口。

波折二:SQL时间盲注

这里必须要安利一个好用的burpsuite插件,xia_sql,能够被动检测SQL注入漏洞。通过前端不断点击与后台交互的功能点,找到一处存在注入点,但坑的是没有数据回显,只能使用时间盲注。

图片[5]-记一次一波三折的众测SRC经历-华盟网

更坑的是后台居然过滤了OR 和 AND 关键字,还有空格字符,or可以用||替代,而and可以用&&替代,对于空格字符常见的绕过思路是:

  1. space2plus
    • 将空格替换为+。
    • 示例:UNION SELECT -> UNION+SELECT。
  1. space2hash
    • 将空格替换为%23(即#,URL编码)。
    • 示例:UNION SELECT -> UNION%23SELECT。
  1. space2blank
    • 将空格替换为其他空白字符(如%09、%0A等)。
    • 示例:UNION SELECT -> UNION%09SELECT。
  1. space2randomblank
    • 将空格替换为随机的空白字符(如%09、%0A、%0C等)。
    • 示例:UNION SELECT -> UNION%0ASELECT。

如下图,因为网站有关键字符过滤,所以sqlmap跑不出任何信息

图片[6]-记一次一波三折的众测SRC经历-华盟网

补充一个知识点:Tamper脚本是SQLMap中用于修改请求数据的脚本,能够对注入语句进行编码、混淆或其他处理,以绕过WAF或其他过滤机制。

最终编写了一个sqlmap的tamper脚本space2randomblank_and_keywords,成功绕过,获取到数据库信息,尤其是管理员账号密码

#!/usr/bin/env python

"""
Copyright (c) 2006-2023 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import random
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    将空格替换为随机的空白字符(如 %09, %0A, %0C 等)
    例如:UNION SELECT -> UNION%0ASELECT 或 UNION%09SELECT
    """
    if payload:
        # 定义可用的空白字符
        blank_chars = ["%09", "%0A", "%0C", "%0D"]

        # 替换空格为随机的空白字符
        payload = payload.replace(" ", random.choice(blank_chars))
        # 替换 OR 和 AND 关键字
        payload = payload.replace("OR", "||")  # 替换 OR 为 ||
        payload = payload.replace("AND", "&&")  # 替换 AND 为 &&
    return payload

利用tamper脚本跑出banner

图片[7]-记一次一波三折的众测SRC经历-华盟网

利用tamper脚本跑出数据库中所有表名,重要的是admin表和user表

图片[8]-记一次一波三折的众测SRC经历-华盟网

最终成功利用sqlmap跑出管理员账户密码为XXXX/XXXX888(因为数据敏感所以这里不放图了)

波折三:寻找管理后台

经常打SRC的大佬都知道接下来要扩大战果就是进管理后台了,但是我死活找不到该thinkphp网站的管理后台:

先是通过常规路径尝试,因为一般thinkphp框架的后台路径默认是/admin/但是这里报错显示无法加载模块admin

图片[9]-记一次一波三折的众测SRC经历-华盟网

接着通过路径扫描工具,如dirsearch/御剑等路径扫描工具fuzz后台路径,还是无果

图片[10]-记一次一波三折的众测SRC经历-华盟网

用了五六款工具和一个小时了,还是搞不进去,有点“难受香菇”啊。

只要努力奇迹还是可能出现的哈哈,最终通过C段扫描找到该公司下属的其他业务系统(即OA办公系统)管理后台。

图片[11]-记一次一波三折的众测SRC经历-华盟网
图片[12]-记一次一波三折的众测SRC经历-华盟网

利用之前获取的管理员账号密码是企业名称简写/企业名称简写+888,进一步生成若干组合弱口令攻击和撞库,成功进入OA办公系统后台。在获取管理后台权限后,可以进一步探索系统内部,寻找更多敏感信息或漏洞。

打完~~~~收工,最后提一句厂家给了中危300大洋,谢谢厂家审核大大哈哈!

总结

目标系统存在SQL注入漏洞,而且是比较难利用的时间盲注,过滤了or/and/空格等关键字符。在实际渗透测试中,Tamper脚本是非常有用的工具,能够显著提高SQL注入攻击的成功率。后台路径隐藏较深,增加了攻击难度。通过C段扫描和组合口令攻击,成功进入管理后台,暴露了系统的防御问题。

我觉得,渗透测试中要心平静气,仔细观察每一个服务器/客户端交互的数据包,一条道走不通灵活地换一条道,山穷水复疑无路,柳暗花明又一村。为了提高渗透效率,还要不断地提高工具编写能力,平时多学习网站前后台交互的底层原理。

申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,

所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容