记一次渗透测试——从 Fofa 信息收集到 SQL 注入手工Bypass 📅 2026/6/30 22:34:03 前言很多时候目标主站看起来固若金汤业务功能单一连登录口都找不到。这时候信息收集就成了突破口。本文记录一次从 Fofa 资产搜索到后台 SQL 注入的完整过程重点分享一些手工注入时的踩坑细节。一、主站没功能那就找资产打开目标主站发现页面简陋几乎没有什么交互功能。这时候不要放弃开始寻找该单位的其他资产站点。信息收集思路HTML 正文搜索在主站页面源码中寻找具有唯一性的关键字——比如公司简称、备案号、特定的 CSS 类名或注释信息。注意这些关键字通常出现在 HTML 的body中而不是 title。Fofa 语法实战Fofa 搜索网页正文语法bodyxxxxxx但直接复制一大段正文内容搜索结果往往是0 条记录。原因是正文内容太长Fofa 无法精确匹配。正确做法删减关键字长度提取最独特的标识。比如从主站提取到一个简短标识在 Fofa 中搜索最终命中记录成功找到目标的其他资产。二、意外的后台打开搜索出来的第一个链接是一个业务平台申请绑定接口。抱着试一试的心态乱填一通信息直接提交——没想到居然直接进入了后台啥也不是还以为是弱口令结果是前端校验都没有 但进去后发现大部分功能都没权限只有问题统计模块可以访问。三、SQL 注入从发现到利用1. 发现注入点在故障统计页面点击今天查看数据。抓包发现请求中包含一个日期参数。在日期处测试单引号2021-08-10 2021-08-10 2021-08-10随着单引号数量的增加响应状态码和返回长度呈现周期性变化——经典的 SQL 注入特征确认存在注入。2. 为什么不能用and先尝试构造 POC尝试and条件2021-08-10 and 11但发现无论条件成立与否返回都是空。原因是今天的故障统计本来就没有数据所以and逻辑无法通过页面差异判断真假。改用or2021-08-10oraa成功返回数据确认or逻辑可用。3. 获取当前用户2021-08-10orsubstr(user(),1,1)r通过逐字符判断最终得到用户名为rootlocalhost。四、手工注入的踩坑记录坑 1号与空格尝试用like构造 payload 时...orsubstr(user(),1,1)liker结果报错。初步怀疑是号的问题。直接将换成空格...or substr(user(),1,1) like r成功结论字符串和like之间不能用连接必须直接用空格。坑 2%通配符被过滤开始跑数据库名长度2021-08-10or length(database()) like 9确认数据库名长度为 9 位。接下来跑数据库名需要用到通配符%。但在这个注入点一加%就报错疑似被过滤或转义。替代方案用下划线_代替%%表示任意长度_表示单个字符。既然知道长度是 9那就用9 个下划线2021-08-10or database() like s________通过逐位替换爆破得到第 1 位s第 2 位l盲猜前四位是sldl...后续继续跑即可。五、总结表格阶段关键技巧信息收集主站没功能时提取 body 唯一关键字用 Fofabody语法搜索资产后台进入不要忽视业务接口有时乱填就能绕过前端校验注入发现单引号数量变化导致响应周期性差异是判断注入的可靠依据逻辑选择无数据场景下优先用or而非and绕过过滤换空格%换_灵活替代被过滤字符结语渗透测试很多时候不是技术碾压而是信息收集的耐心加上手工注入的细心。当你觉得目标没洞的时候可能只是还没找到正确的资产入口。希望这篇记录能对你有所帮助提示以上两篇均为技术分享仅供安全研究与学习交流请勿用于非法用途。