sql注入
SQL注入原理
SQL 注入的攻击行为可以描述为通过用户可控参数中注入SQL 语法,破坏原有SQL 结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结为以下两个原因叠加造成的:
- 程序员在处理程序和数据库交互时,使用字符串拼接的方式构造SQL 语句
- 未对用户可控参数进行足够的过滤,便将参数内容拼接到SQL 语句中。
SQL注入危害
- 攻击者可以利用SOL 注入漏洞,可以获取数据库中的多种信息,例如,后台管理员账密,从而脱取数据库中的内容(脱库)。
- 在特别的情况下还可以插入内容到数据库、删除数据库中的内容或者修改数据库内容
- 如果数据库权限分配存在问题,或者数据库本身存在缺陷,攻击者可以利用SOL 注入漏洞直接获取WebSheLl或者服务器权限。
sql注入流量特征
- 会有sql查询语句的关键字,如union、database()、select等,以及url编码。
以DVWA为例
- 进行sql注入
- 使用wireshark抓包
XSS
漏洞原理
- XSS 通过将精心构造的代码(Javasript)注入到网页中,并由浏览器解释运行这段 J 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。整个XSS 攻击过程,涉及三个角色:
- 攻击者
- 客户端浏览器用户
- 服务器
漏洞危害
- XSS是利用 JS代码实现攻击,有很多危害:
- 盗取各种用户账号
- 窃取用户Cookie 资料,冒充用户身份进入网站
- 劫持用户会话执行任意操作
- 刷流量,执行弹窗广告
- 传播蠕虫病毒
XSS流量特征
- 会有
以DVWA为例
- 利用XSS漏洞盗取cookie
- 使用wireshark抓包
文件上传
漏洞成因
- 服务器配置不当,开启了 PUT 方法
- web 应用开放了文件上传功能,没有对上传的文件做足够的限制和过滤
- 在程序开发、部署时,没有考虑以下因素,导致限制被绕过:
- 代码特性
- 组件漏洞
- web容器漏洞
- 系统特性
- …
漏洞危害
- 上传恶意代码(文件,程序),并执行恶意代码(文件,程序):
- 直接上传后门文件并执行,导致网站沦陷
- 通过恶意文件,利用其他漏洞拿到管理员权限《提权),导致服务器沦陷
- 通过文件上传漏洞获得的网站后门,叫 webshell
文件上传流量特征
- 该流量中包含文件名和后缀,以及类型,如果不能直接判断,还可以直接看上传文件的内容
以DVWA为例
- 上传图片码
- 使用wireshark抓包
文件包含
文件包含概述
-
程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。
-
程序开发人员都希望代码更加灵活,所以会把被包含的文件的路径设置为变量,来进行动态调用(包含),但正是由于这种灵活性,如果被包含文件的路径客户端可控,造成任意文件包含漏洞。
-
几乎所有的脚本都会提供文件包含的功能,文件包含漏洞在 PHP 的Web 应用中居多,在JSP/ASP/ASPNET 程序中比较少。
文件包含语句
- php提供了四个文件包含语句,四个语句直接略有不同
语句 | 区别 |
---|---|
include() | 多次包含,多次执行; 如果包含失败,脚本产生警告,继续运行 |
include_once() | 多次包含,一次执行 如果包含失败,脚本产生警告,继续运行 |
require() | 多次包含,多次执行; 如果包含失败,脚本产生警告,继续运行 |
require_once() | 多次包含,一次执行 如果包含失败,脚本产生警告,继续运行 |
相关配置
- 文件包含是PHP 的基本功能之一,有本地文件包含与远程文件包含之分。简单来说,本地文件包含就是可以读取和打开本地文件,远程文件包含就是可以远程(方式)加载文件。可以通过php.ini 中的选项进行配置。
allow url fopen = On/off #通过远程方式打开文件
allow url include = On/off #通过远程方式包含文件
流量特征
- 文件包含的流量特征是请求包中有非服务器允许访问的文件路径,或者文件路径中出现 data://、ftp:// 等协议或者目录穿越的关键字 …/…/ 等
以DVWA为例
- 输入poc
http://10.9.47.73/dvwa_2.0.1/vulnerabilities/fi/?page=../../../phpinfo.php
- 使用wireshark抓包
shiro反序列化
漏洞原理
在 Apache shiro 的框架中,执行身份验证时提供了一个记住密码的功能(RememberMe),如果用户登录时勾选了这个选项。用户的请求数据包中将会在 cookie 字段多出一段数据,这一段数据包含了用户的身份信息,且是经过加密的。加密的过程是:用户信息=>序列化=>AES加密(这一步需要用密钥key)=>base64编码=>添加到 RememberMe Cookie 字段。勾选记住密码之后,下次登录时,服务端会根据客户端请求包中的 cookie 值进行身份验证,无需登录即可访问。那么显然,服务端进行对 cookie 进行验证的步骤就是:取出请求包中 rememberMe 的cookie值 => Base64解码=>AES解密(用到密钥 key )=>反序列化。
靶场搭建
- 启动docker
service docker start
- 拉起shiro镜像
docker pull medicean/vulapps:s_shiro_1
- 启动靶场映射到80
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
- 访问靶场
- 用户名密码随便写,勾选remember me
- 查看bp抓取数据包
使用shiro工具
- 命令执行
- 使用wireshark抓包
base64 解码>解密>反序列化后为利用链的 exp
暴力破解
以dvwa为例
- 使用bp进行爆破
- 使用wireshark进行抓包
命令执行
以dvwa为例
- 进行命令执行
- 使用wireshark抓包