本文共 7796 字,大约阅读时间需要 25 分钟。
渗透测试与Web安全攻防指南
01. 渗透测试流程
渗透测试是攻击者通过合法或非法方式进入目标系统,获取控制权限的过程。其流程通常包括以下几个阶段:
- 项目前期准备工作:了解目标站点的业务逻辑、技术架构、用户权限等信息。
- 信息收集:通过WHOIS、网站源IP、旁站、C段网站、服务器系统版本等手段获取目标站点的基本信息。
- 漏洞扫描:使用工具如Nessus、AWVS进行漏洞扫描,识别潜在的安全漏洞。
- 手动挖掘:通过逻辑漏洞、注入点等手段进一步发现潜在的安全问题。
- 漏洞验证:确认发现的漏洞是否真实存在,并评估其危害程度。
- 修复建议:根据漏洞类型,提供修复方案或建议。
- 基线检查/复验漏洞:对修复后的系统进行全面检查,确保漏洞已完全闭合。
- 输出报告:将测试结果整理成详细的报告,供相关人员参考。
02. 绕过CDN查真实IP
当目标站点部署了CDN(内容分发网络)时,攻击者可以通过以下方法查找真实IP地址:
- 多地ping测试:通过ping不同地区的服务器,检测是否有CDN的反向DNS解析。
- 邮件订阅或RSS订阅:通过订阅站点的更新内容,获取真实IP信息。
- 二级域名解析:检查二级域名是否使用CDN,通常二级域名的IP地址更容易获取。
- DNS查询:使用nslookup工具查询目标站点的DNS记录,获取真实IP地址。
- 历史解析记录:通过查看域名的历史解析记录,获取CDN的真实源IP地址。
- PHP信息:通过phpinfo()函数获取网站运行的环境信息,包括IP地址。
- Cloudflare API:通过Cloudflare提供的API查询真实IP地址。
- 文件解析:通过分析服务器上的文件,获取真实IP地址。
03. SQL注入绕过sleep函数
在某些情况下,攻击者可能需要绕过sleep函数来完成SQL注入。常见的方法包括:
- BENCHMARK函数:通过执行计算密集型操作,使数据库查询时间变长,从而实现延时注入。
- Get_lock函数:利用Get_lock函数锁定数据库资源,导致其他查询无法正常执行。
- 信息_schema使用:如在MySQL中,通过信息_schema.columns和information_schema.columns等表结合BENCHMARK函数实现注入。
04. 防范XXE漏洞
XXE(XML外部实体注入)是一种常见的Web安全漏洞,通常通过XML解析中外部实体的使用来攻击。防范措施包括:
- 禁用DTD和实体解析:在XML解析库中禁用对外部实体的支持。
- 过滤用户输入:对用户提交的XML数据进行严格过滤,避免恶意实体的注入。
- 使用安全库:如在Python中使用lxml时,设置resolve_entities为false。
- 客户端防护:对客户端提交的数据进行实体转义处理,避免XXE漏洞的发生。
05. 绕过Http-only
Http-only是用于防止JavaScript从客户端读取cookie值的一种安全机制。攻击者可以通过以下方法绕过Http-only:
- 跨站请求伪造(CSRF):利用CSRF攻击绕过cookie的限制。
- HTTP头信息泄漏:通过查看HTTP头信息,获取cookie的值。
- 配置绕过:通过修改服务器配置,禁用Http-only的支持。
06. SQL二次注入
SQL二次注入是指在第一次注入成功后,通过对已存储的数据进行操作,进一步获取更高权限或敏感信息的过程。常见场景包括:
- 年龄填写注入点:如在交友网站中,通过填写年龄信息触发二次注入。
- 爆库和爆表:通过爆库和爆表语句获取数据库 schema 和表信息。
- 数据获取:通过IIoC(依赖注入原理)或命令执行注入获取具体数据。
07. 提权方法
在SQL Server中,攻击者可以通过以下方式获得更高权限:
- xp_cmdshell提权:通过xp_cmdshell执行系统命令,获取sa级别的权限。
- 启用xp_cmdshell:使用sp_configure配置启用xp_cmdshell。
- 沙盒提权:通过修改注册表或使用Jet.OLEDB技术在沙盒环境中执行命令。
- Agent Job提权:通过创建Agent Job在数据库中执行恶意命令。
08. 防范Webshell
Webshell是一种通过HTTP协议上传并执行命令的攻击方式。防范措施包括:
- 上传文件类型限制:限制上传文件类型,禁止脚本类型文件的上传。
- 文件权限控制:对上传文件夹中的脚本文件设置无读取及执行权限。
- 单独文件夹绑定:将上传文件夹绑定到一个独立的域名,限制文件类型解析。
09. Webshell检查思路
Webshell的检测可以通过以下方式进行:
- 静态检测:通过匹配已知的Webshell代码特征进行检测。
- 动态检测:通过监控异常的HTTP请求和B/S数据变化进行检测。
- 日志检测:通过分析Web服务器日志,发现异常文件访问记录。
- 自动化工具:使用如Burp Suite、ZAP等工具进行自动化检测。
10. 检查DNS解析记录
要查找DNS解析记录,可以通过以下方法:
- 浏览器缓存:清除浏览器缓存,重新进行DNS查询。
- 系统缓存:清除系统DNS缓存,刷新解析记录。
- 路由器缓存:检查路由器是否缓存了目标站点的DNS记录。
- 递归搜索:通过UDP请求递归搜索目标域名的IP地址。
11. 登录页面漏洞
登录页面可能存在的漏洞包括:
- 注入点:如用户名和密码字段的注入点。
- 敏感信息泄露:如密码提示信息或错误页面的信息泄露。
- 验证码绕过:通过分析验证码逻辑,绕过验证。
- 无限注册:通过注入点或其他方式实现无限注册功能。
- 权限越权:通过注入点获取管理员权限。
12. 判断XSS类型
XSS攻击可以分为存储型、反射型和DOM型三种类型。判断方法包括:
- 存储型XSS:检查数据库中的存储内容是否包含XSS代码。
- 反射型XSS:通过直接请求页面,观察返回包中的XSS代码。
- DOM型XSS:检查页面DOM结构,发现XSS代码注入点。
13. CSRF、SSRF和重放攻击区别
- CSRF(跨站请求伪造):通过客户端发起请求,伪造用户身份进行操作。
- SSRF(服务器端请求伪造):通过服务器伪造请求,获取内网资源。
- 重放攻击:截获并重放已授权的数据包,伪造用户身份。
14. XSS和CSRF的区别及修复方式
- XSS:通过修改或注入JavaScript代码,窃取用户信息或执行恶意操作。
- CSRF:通过伪造用户请求,执行非法操作。
- 修复方式:对输入数据进行校验,使用HTTP-Only、Secure和SameSite属性,嵌入防重放Token。
15. MongoDB注入方式
在MongoDB中进行注入攻击,可以通过以下方式:
- 利用正则表达式:如
db.items.find({name: {$regex:"^y"}})
。 - 使用payload:如
?login[$regex]=^&password[$regex]=^
。 - 利用操作符:如
?login[$not][$type]=1&password[$not][$type]=1
。
16. MySQL版本区别
MySQL 5.0以上和以下在以下方面有差异:
- 信息_schema表:MySQL 5.0以下没有information_schema系统表。
- 多用户支持:MySQL 5.0以下为多用户单操作,5.0以上为多用户多操作。
17. MySQL写Shell
在MySQL中写Shell可以通过以下方式:
- 使用outfile函数:如
select 'phpinfo()' into outfile 'C:/phpinfo.php'
。 - 使用dumpfile函数:如
select unhex('udf.dll hex code') into dumpfile 'c:/mysql/mysql server 5.1/lib/plugin/xxoo.dll';
。 - 目录权限控制:确保MySQL服务有写入目标目录的权限。
18. disable_functions绕过
要绕过disable_functions,可以通过以下方式:
- LD_PRELOAD:劫持系统函数,加载恶意动态链接库。
- ImageMagick漏洞:利用CVE-2016-3714漏洞绕过。
- COM绕过:通过Windows组件进行操作。
- PHP7.4FFI绕过:利用FFI功能执行命令。
- Bash破壳:利用CVE-2014-6271漏洞绕过。
19. Webshell不出网提权
在Webshell不出网的情况下,可以通过以下方法提权:
- reg上传:使用reg文件进行正向连接。
- 探测外网协议:通过DNS、icmp等协议检测目标站点是否有外网连接。
20. 脏牛提权漏洞
脏牛漏洞(Dirty COW,CVE-2016-5195)是针对Linux内核的漏洞,攻击者可以通过以下方式提权:
- 下载exp文件:下载并编译dirty.c,生成可执行文件。
- 执行命令:使用./dirty命令获取提权。
21. SQL注入写Shell
在SQL注入中写Shell可以通过以下方式:
- 使用outfile函数:如
select 'shell.php' into outfile 'C:/shell.php'
。 - 使用dumpfile函数:如
select 'shell.php' into dumpfile 'C:/shell.php'
。 - 宽字节注入:通过转义字符绕过单引号限制。
22. 宽字节注入原理
宽字节注入的原理是利用字符集的差异,通过特殊字符绕过数据库的过滤机制。常见方法包括:
- 转义字符:如%0a、%0b、%a0等。
- 字符集差异:不同字符集的转换可能导致字符被误解,绕过过滤。
23. img标签获取管理员路径
除了onerror属性外,img标签还可以通过以下方式获取管理员路径:
- 修改Apache配置:配置.jpg文件以php方式解析。
- 远程脚本获取referer:通过远程脚本获取目标站点的referer信息。
24.代码执行、文件读取、命令执行函数
常见的代码执行、文件读取、命令执行函数包括:
- 代码执行:eval、preg_replace、assert等。
- 文件读取:file_get_contents、fopen、readfile等。
- 命令执行:system、exec、shell_exec、passthru等。
25. ASP和ASPx木马权限差异
ASPx木马通常具有更高的权限,因为其基于.NET技术,而默认的ASP脚本权限较低。攻击者可以通过以下方式获取ASPx木马的权限。
26. 提权为何选择可读写目录
在提权过程中,攻击者通常选择可读写目录是因为:
- 空格界定:多数操作需要空格界定参数。
- 默认权限:通常可读写目录具有更适合的默认权限。
27. Webshell长久控制
在获得Webshell后,攻击者可以通过以下方式实现长久控制:
- 后台登录脚本:在登录页面添加JS脚本,记录登录账号和密码。
- 文件上传:将XSS脚本上传到目标站点的文件中。
- 定时任务:通过crontab定时执行恶意脚本。
28. 发现uid=100注入点提权
在发现uid=100注入点时,攻击者可以通过以下方式提权:
- 联合查询语句:使用
select ... into outfile
将查询结果写入文件。 - sqlmap –os-shell:通过sqlmap获取操作系统Shell。
- 后台登录:通过获取管理员账号和密码,登录后台。
29. 获得Webshell
获取Webshell可以通过以下方式:
- 上传脚本文件:如PHP、ASP、JSP等脚本文件。
- 数据库备份:通过数据库备份获取Webshell路径。
- 模板漏洞:利用已知的CMS模板漏洞直接创建Webshell。
- 注入写文件:通过SQL注入将Webshell代码写入文件。
30. 手工判断目标站点操作系统
通过以下方式判断目标站点是Windows还是Linux:
- 大小写敏感性:Windows不敏感,Linux敏感。
- Ping值TTL:Linux值为64或255,Windows值为32或128。
- Unix类型:Unix值为255。
31. SVN/GIT源代码泄露
SVN和GIT源代码泄露的常见方式包括:
- .svn隐藏文件夹:包含重要的源代码信息。
- .git/config文件:包含部署信息。
- 递归部署:配置不当导致.git文件夹部署到线上环境。
32. 项目上漏洞扫描注意事项
在进行漏洞扫描时,需要注意以下几点:
- 确认扫描权限:确保对目标站点有扫描权限。
- 控制扫描频率和线程数:防止过载。
- 通知客户恢复数据:扫描完成后,及时通知客户并恢复业务。
33. MySQL注入点工具
在MySQL中进行注入攻击,可以通过以下工具和方法:
- sqlmap:自动化注入工具,支持GET、POST、COOKIE等注入点。
- Burp Suite:手动抓包和注入。
- ZAP:自动化Web应用安全评估工具。
34. SQL注入防护方法
在防御SQL注入时,可以采取以下措施:
- 输入验证:对用户输入数据进行实时校验。
- 预处理和绑定:使用PDO预处理和绑定参数,避免SQL注入。
- 防注入插件:部署如360、阿里云、腾讯云等提供的防注入插件。
- 白名单策略:对输入数据进行格式化和白名单过滤。
35. SQL注入无回显绕过
在SQL注入无回显的情况下,可以通过以下方式构造注入payload:
- DNSlog注入:利用DNS日志记录获取注入结果。
- 自动化脚本:编写自动化脚本进行注入。
- 代理池:通过代理池减少IP封禁风险。
36. PHPAdmin写Shell
在PHPAdmin中写Shell可以通过以下方法:
- 数据表导出:创建数据表导出Shell脚本。
- 一句话导出:使用
select 'phpinfo()' into outfile 'C:/phpinfo.php'
。 - 日志备份:通过PHPAdmin日志备份获取Shell路径。
37. 预编译能不能防御SQL注入
预编译无法百分百防御SQL注入,因为注入攻击可以通过特定的字符和语句绕过预编译的防护。例如:
38. SQL注入绕过and或or过滤
在SQL注入中绕过and或or过滤,可以通过以下方式:
- 大小写混合:通过大小写变形绕过过滤。
- 编码:通过URL编码绕过过滤。
- 注释绕过:通过添加注释或者使用多余的注释绕过过滤。
- 浮点数和函数绕过:利用浮点数或函数绕过过滤。
39. 快速找文件下载漏洞
文件下载漏洞通常存在于以下形式:
- download.php?path=
- down.php?file=
- data.php?file=
- download.php?filename=
- &Src=
- &Inputfile=
- &Filepath=
- &Path=
- &Data=
40. 任意文件下载防范方法
防范任意文件下载可以通过以下方式:
- 过滤“.”:限制URL中不允许出现“.”。
- 正则表达式验证:严格判断文件路径格式。
- open_basedir限制:在php.ini中配置open_basedir,限制文件访问范围。
41. CORS利用方式
CORS(跨域资源共享)可以通过以下方式被利用:
- 跨域请求伪造:通过伪造Referer头信息绕过CORS限制。
- JSONP:通过JSONP获取目标站点的数据。
- WebSockets:通过WebSocket协议进行跨域通信。
42. XSS弹窗函数和绕过策略
XSS弹窗函数包括alert、confirm、prompt等,绕过策略包括:
- 大小写混合:通过大小写混合绕过过滤。
- 双写:通过双写绕过过滤。
- 编码:通过URL编码绕过过滤。
- 使用ontoggle属性:通过ontoggle属性绕过过滤。
43. SSRF利用Redis写Shell
在SSRF中利用Redis写Shell可以通过以下方式:
- 协议读取本地文件:利用协议如gopher进行本地文件读取。
- 云计算环境:通过AWS、Google Cloud的内网API操作ECS。
- Redis协议:通过Redis协议将反弹Shell写入crontab定时任务。
44. 登录页面漏洞
登录页面可能存在的漏洞包括:
- 注入点:如用户名和密码字段。
- 敏感信息泄露:如密码提示信息。
- 验证码绕过:通过分析验证码逻辑绕过验证。
- 无限注册:通过注入点实现无限注册。
- 权限越权:通过注入点获取管理员权限。
45. 第三方应用软件提权
在第三方应用软件中提权可以通过以下方式:
- Serv-u安全性测试:通过修改配置文件或servUDaemon.exe权限获取提权。
- FlashFXP安全性测试:通过下载quick.dat、sites.dat等文件替换获取提权。
- Gene6 FTP安全性测试:通过Webshell转发端口获取提权。
- PcanyWhere安全性测试:通过破解PcanyWhere密码获取提权。
- VNC安全性测试:通过读取VNC连接密码获取提权。
- Zend安全性测试:通过修改ZendExtensionManager.dll获取提权。
- 启动项和服务替换:通过启动项或服务替换获取提权。
- Dll劫持:通过Dll劫持获取提权。
- Perl安全性测试:通过低版本Perl执行系统命令获取提权。
46. xpcmdshell禁用后的提权
在xpcmdshell禁用后,可以通过以下方式提权:
- sp_configure:通过使用sp_configure重新启用xp_cmdshell。
- 使用master数据库:通过master数据库执行xp_cmdshell。
- 利用存储过程:通过创建存储过程调用xp_cmdshell。
47. Webshell获取方法
获取Webshell可以通过以下方式:
- 上传脚本文件:如PHP、ASP、JSP等脚本文件。
- 数据库备份:通过数据库备份获取Webshell路径。
- 模板漏洞:利用已知的CMS模板漏洞直接创建Webshell。
- 注入写文件:通过SQL注入将Webshell代码写入文件。
48. Fastjson不出网利用
Fastjson不出网利用可以通过以下方式:
- TemplatesImpl类:通过com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl类触发漏洞。
- BasicDataSource类:通过org.apache.tomcat.dbcp.dbcp2.BasicDataSource类触发漏洞。
- 特定触发条件:在解析JSON时使用特定的Feature选项触发漏洞。
49. XXE盲注处理
在遇到XXE盲注时,可以通过以下方式处理:
- DNS外带注入:通过攻击者自己的公网服务器,获取受害者服务器的内容。
- 外部参数实体注入:通过外部参数实体注入访问攻击者公网服务器的test.dtd文件。
- 日志分析:通过分析受害者服务器的日志,获取注入结果。
通过以上方法,攻击者可以有效地进行渗透测试和Web安全攻防。
转载地址:http://wvrfk.baihongyu.com/