从webshell到代码审计
字数 1632 2025-08-11 21:26:27
从Webshell到代码审计:实战渗透与漏洞挖掘指南
1. 前期信息收集与侦查
1.1 目标识别
- 目标系统特征:PHP + MySQL组合,FreeBSD服务器
- 识别动态传参点:重点关注登录口等用户输入点
- 初始测试:尝试万能密码(如
admin' or '1'='1等常见payload)
1.2 目录爆破
- 工具推荐:dirsearch、gobuster、dirb等
- 关键发现:
- info.php(phpinfo页面):泄露服务器配置信息
- phpmyadmin(数据库管理界面):版本2.6.1
2. phpMyAdmin漏洞利用
2.1 认证绕过漏洞(版本2.6.1)
- 漏洞利用方式:
- 用户名:
localhost'@'@' - 密码:留空
- 用户名:
- 限制:获得的权限较低,操作受限
2.2 弱口令利用
- 测试root账户空密码成功
- 安全建议:数据库账户必须设置强密码
2.3 获取Web绝对路径
- 从phpinfo页面查找
_SERVER["DOCUMENT_ROOT"]或相关路径信息 - 其他路径泄露点:错误日志、包含文件失败信息等
3. 数据库到Webshell的转换
3.1 通过phpMyAdmin获取Webshell的方法
-
日志文件写入:
- 设置全局日志文件为网站目录下可访问的文件
- 执行SQL语句包含PHP代码
-
直接写入文件:
SELECT "<?php system($_GET['cmd']); ?>" INTO OUTFILE '/var/www/html/shell.php'- 需要知道绝对路径和写权限
-
通过数据库获取管理员凭证:
- 查找用户表(如admin、users等)
- 常见密码存储方式:MD5、SHA1等,可能可破解
3.2 后台上传Webshell
- 发现后台入口:"管理区"明显链接
- 上传功能无过滤:
- 可直接上传加密Webshell(如哥斯拉、冰蝎等)
- 绕过WAF技巧:使用加密、混淆的Webshell
4. 代码审计方法论
4.1 审计准备工作
- 获取源码:通过Webshell打包下载或漏洞利用获取
- 环境搭建:本地搭建测试环境
4.2 关键函数搜索
-
文件操作相关:
readfile():任意文件读取file_get_contents()file_put_contents()fopen()/fwrite()
-
代码执行相关:
eval()assert()system()exec()passthru()
-
数据库操作相关:
mysql_query()mysqli_query()PDO::query()
4.3 漏洞实例分析
4.3.1 任意文件读取漏洞
- 漏洞代码特征:
$file = $_GET['file']; readfile($file); - 利用方式:
- 读取系统文件:
/etc/passwd - 读取数据库配置文件:
my.cnf(通常包含数据库凭证) - 读取源码文件:获取更多审计线索
- 读取系统文件:
4.3.2 SQL注入漏洞
- 漏洞代码特征:
$ID = $_GET['id']; $sql = "SELECT * FROM users WHERE id = $ID"; - 测试方法:
- 单引号测试:
'引发错误 - 布尔测试:
and 1=1vsand 1=2 - 时间盲注:
sleep(5)
- 单引号测试:
- WAF绕过技巧:
- 大小写混淆
- 注释分割:
SEL/*xxx*/ECT - 编码绕过:十六进制、URL编码等
5. 防御建议
5.1 针对渗透的防御
-
phpMyAdmin安全:
- 及时更新到最新版本
- 限制访问IP
- 使用强密码认证
-
上传安全:
- 文件类型白名单验证
- 文件内容检测
- 随机重命名上传文件
-
代码安全:
- 所有用户输入必须过滤
- 使用预处理语句防止SQL注入
- 禁用危险函数(如eval、assert等)
5.2 安全配置建议
- 禁用phpinfo等敏感信息页面
- 数据库账户使用最小权限原则
- 定期安全审计和漏洞扫描
6. 扩展漏洞挖掘思路
- 框架漏洞:识别使用的框架(如ThinkPHP、Laravel等)并检查已知漏洞
- 组件漏洞:检查使用的第三方组件版本是否存在漏洞
- 逻辑漏洞:业务流程中的权限、验证等逻辑缺陷
- 配置漏洞:检查.htaccess、nginx配置等安全问题
通过本案例的系统性分析,可以建立起从信息收集到漏洞利用再到代码审计的完整渗透测试方法论,为安全研究和防御提供实践指导。