upload—labs(9-12)

pass9

直接查看的源码,得知是黑名单过滤,而且过滤也都很全

通过查看wp,得知我们可以使用. .(点空格点)进行绕过

利用bp抓包进行更改

trim删除文件名末尾的点,得到shell.php.空格,然后进行首尾去空得到shell.php.,黑名单过滤并没有php.所以直接绕过黑名单检测

上传成功

连接成功

pass10

这关很奇特的哦,直接可以注入成功,肯定有坑

查看上传文件的文件夹,也有文件呀

最后查看提示源码才知道,这关过滤不完全,没有对上传文件做转换小写的处理只是会直接去除掉一些后缀名,我这里因为之前需要用到大小写过滤就没有改回来,凑巧绕过了

开了别人的wp才知道这里原来是要双写绕过,shell.pphphp,当上传过滤掉php后变成shell.php

哦哦原来我是小丑,上面截图的php文件是我上一题上传的,旁边的shell没有后缀名的文件才是第十关我上传的,丢脸

源码中用到的函数恰好有无视大小写的功能,看来要出一期upload-labs的代码解析了,这不加注释直接看不懂,还以为自己很牛嘞

还是要用到双写绕过,这次是把之前上传文件都删掉的,可以看见已经是上传成功

但是我觉得我这种直接更改后缀名的,不知道会不会出问题,之后还是利用bp改吧

蚁剑连接成功

pass11

这题是白名单哦

白名单的绕过方式,最近复习了一下目前会的只有00截断和结合文件包含上传图片马绕过

那这里就使用00截断咯,但是00截断有php版本限制

使用bp抓包后更改这两个地方应该没错,但是直接提示我上传失败是什么东西

我以为是php版本的问题,换了一个php5.3.29的还是出错

想着还是来理解一下源码的意思

$file_ext语句

substr()函数

返回字符串的一部分。

语法

substr(string,start,length)
  • string:必须,规定要返回数据的字符串

  • start:必须,规定在字符串的何处开始

  • 正数:在字符串的指定位置开始

  • 负数:从字符串结尾的指定位置开始

  • 0:在字符串的第一个字符处开始

  • length:可选,规定要返回的字符串长度,默认是知道字符串的结尾

  • 正数 - 从 start 参数所在的位置返回

  • 负数 - 从字符串末端返回

strrpos()函数

查找字符串在另一字符串中最后出现的位置(区分大小写)

语法

strrpos(string,find,start)
  • string:必需。规定被搜索的字符串。

  • find:必需。规定要查找的字符。

  • start:可选。规定开始搜索的位置。

$file_ext语句总结

这一句话的作用就是:

在我们上传的文件中获取我们上传文件的文件名和字后缀

利用strrpos函数从文件名和后缀中查找.返回点的位置作为substr函数的第二个参数

所以就直接查找到了我们上传文件,点之后的后缀名

大if语句

in_array函数

in_array() 函数的作用是搜索数组中是否存在指定的值。

这个函数是作为if函数的判断条件,如果返回为true就执行if语句,反之执行else

语法

bool in_array ( $mixed , $array [,$ bool = FALSE ] )

$mixed必需。规定要在数组搜索的值。

$array必需。规定要搜索的数组。

$ bool可选。如果该参数设置为 TRUE,则 in_array() 函数检查搜索的数据与数组的值的类型是否相同。

$temp_file

就是我们上传的文件

$img_path

就是定义的一个上传路径

save_path由GET的方式获取

在php中.点代表的是拼接字符串,说明此题的上传路径是可控的

最终的上传路径是save_path/(10,99)随机数字日期时间.(png/jpg/gif)

上传一个图片就可以很形象的看出这个路径发挥的作用

大if语句总结

这个if语句作用就是取出我们上传文件的后缀名

然后进行判断,如果我们的后缀名在白名单里就定义上传的文件和上传路径

小if语句

move_uploaded_file函数

move_uploaded_file() 函数把上传的文件移动到新位置。

如果成功该函数返回 TRUE,如果失败则返回 FALSE。

语法

move_uploaded_file(file,newloc)
  • file必需。规定要移动的文件。

  • newloc必需。规定文件的新位置。

move_uploaded_file()在遇到%00时候会截断,也就是说move_uploaded_file(shell.php%00/123.jpg)=move_uploaded_file(shell.php)

绕过方法:上传正常的文件名,抓包,修改save_path为shell.php%00即可绕过

实践

我都服了我说怎么一直弄不上,一直给我回显上传失败

说明上传是成功的,但是move_uploaded_file函数判断除了问题,上网查别人的wp注入方式也都一样。只不过都提到magic_quotes_gpc

特地了解了一下,这个函数的作用是在字符前添加反斜线作为转义字符理解,这就将我们后面修改的数据变成了字符串而不是以代码解析,怪不得报错信息会这样显示

我一开始查看的时候是关闭的,但是切换php版本后,这个选项会自动打开,所以导致注入失败

关闭之后抓包更改两个数据

注入成功了

pass12

12也是白名单过滤,害真不知道该怎么判断是什么注入,看11题wp的时候早就把12瞟到了,这关是POST类型的00截断

这两种方法的区别为POST不会对里面的数据自动解码%00解码后和00 hex解码后的值相同,所以修改为00即可需要在Hex中修改为00 即可成功绕过

还是要查看别人的wp,这里有两种方法都很简单

首先还是要跟上一题一样,要进行抓包然后修改路径和后缀

然后因为不会自动转码的原因,我们可以将%00选中然后打开bp右侧的窗口,手动将它编码后的字符将原先的数据包里的%00给替换掉

换掉之后它是看不见的,没有关系我们可以直接发包

上传成功

还有一个方式就是,在php后添加一个字符,随便什么应该都可以只是做个标记,然后点击Hex进入十六进制编码格式

找到刚刚标记的位置,将原先+的十六进制编码替换为00,就可以了

关于怎么着位置,一行对一行然后每个字符都对应一个编码从左往右数就好

(我这里是因为已经做过两次所以+编码的位置比较靠后)

修改后直接发包也是可以上传成功的

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

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

相关文章

Java并发高频面试题

分享50道Java并发高频面试题。 线程池 线程池:一个管理线程的池子。 为什么平时都是使用线程池创建线程,直接new一个线程不好吗? 嗯,手动创建线程有两个缺点 不受控风险频繁创建开销大 为什么不受控? 系统资源有…

【机器学习基础 3】 sklearn库

目录 一、sklearn库简介 二、sklearn库安装 三、关于机器学习 四、sklearn库在机器学习中的应用 1、数据预处理 2、特征提取 3、模型选择与评估 五、常用的sklearn函数 1、数据集划分 2、特征选择 3、特征缩放 4、模型训练 5、模型预测 一、sklearn库简介 Scikit-l…

基于卷积神经网络进行股价预测(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 CNN是一种人工神经网络,CNN的结构可以分为3层: 卷积层(Convolutional Layer) - 主要作用是提取特征。 …

C语言基础——流程控制语句

文章目录一、流程控制语句 -- 控制程序的运行过程 9条(一)、条件选择流程控制语句:if语句if……else……语句if……else if……语句switch语句(二)、循环流程控制语句:for语句while语句do while……语句co…

Linux学习之端口、网络协议及查看端口占用情况

端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则。 HTTP协议:   HTTP协议(超文本传输协议)是一种网络通信协议,它允许将超…

Mac和Linux安装Mongodb教程

Mac教程 在mongodb的官网中有mac环境的安装配置说明 在mac上安装mongodb有两种方式: (1)使用Homebrew来安装,如果电脑中有Homebrew,安装起来就比较简单,如果没有可以安装一个,以后安装其他的…

【C++学习】多态

🐱作者:一只大喵咪1201 🐱专栏:《C学习》 🔥格言:你只管努力,剩下的交给时间! 多态🍕多态🍟构成多态的条件🍟C11 final override🍟重…

thinkphp+vue水果购物商城网站

需要解决的主要问题: 1、网页编程环境和工具。 2、后台数据库的管理。 3、网站的基本功能建设。 4、对比实际应用中的购物网站的功能和运作流程,完善程序功能。 水果购物商城系统的主要使用者分为管理员;个人中心、用户管理、水果分类管理…

支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了

支持RT-Thread最新版本的瑞萨RA2E1开发板终于要大展身手了 熟悉RT-Thread和瑞萨MCU的朋友都知道,当前RT-Thread仓库的主线代码是不支持RA2E1这个BSP的。刚好,最近我在联合瑞萨推广一个叫《致敬未来的攻城狮计划》,使用的就是RA2E1开发板&…

ES6技术总结与测试用例

一、介绍 ES6全称是ECMAScript ECMAScript 和 JavaScript 的关系 一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? 要讲清楚这个问题,需要回顾历史。1996 年 11 月,JavaScript 的创造者 Netscape 公司&#xff0c…

连接数据库的方法和方式

前景说明: 在我们刚开始使用数据库的时候,发现只能在mysql编辑器里面使用sql语句来完成对数据库的操作,那我们怎么来通过Java来操控数据库呢?这个时候就有了JDBC的出现。 1.什么是JDBC JDBC 指java数据库连接&#xff08…

c#文案语音配图片一键生成视频

高手略过吧,功能太简单,我自己都不好意思。。 这个是我自己的需要,做产品类的短视频,东搞西搞剪辑啊啥的,特别麻烦,所以先搞这个最简版,以后再一步步丰富功能。 需求:几张图片生成…

网络安全行业0-5年规划,零基础如何入门网络渗透?

前言 网络安全这个行业优势有:需求量大,人才紧急,门槛低,工资高。对于许多未曾涉足IT行业「小白」来说,深入地学习网络安全是一件十分困难的事。 关于我 本人是一位90后奇安信驻场网络安全工程师。上海交通大学软件…

Web前端学习:章四 -- JavaScript初级(四)-- BOM

138:Object数据格式简介 1、object对象 JS中独有 的一种数据格式 名字可以随便取,值一般就那几种数据格式 139:BOM - JS跳转页面 BOM Browser Object Model:浏览器对象模型 使用JavaScript控制浏览器交互 控制浏览器里面的内…

【数据结构与算法】队列和栈的相互实现以及循环队列

目录🌔一.用队列实现栈🌙1.题目描述🌙2.思路分析🌙3.代码实现⛈二.用栈实现队列☔1.题目描述☔2.思路分析☔3.代码实现🌈三.实现循环队列🌔一.用队列实现栈 🌙1.题目描述 我们先看一下题目链接…

大数据技术之Hive SQL题库-初级

第一章环境准备1.1 建表语句hive>-- 创建学生表 DROP TABLE IF EXISTS student; create table if not exists student_info(stu_id string COMMENT 学生id,stu_name string COMMENT 学生姓名,birthday string COMMENT 出生日期,sex string COMMENT 性别 ) row format delim…

STM32学习(九)

IWDG的本质 Independent watchdog,即独立看门狗。 本质是:能产生系统复位信号的计时器。 递减的计数器。时钟由独立的RC振荡器提供(不是来自于主时钟HSE或HSI),可在待机或者停止模式下运行。看门狗被激活后&#xff…

【云原生 • Docker】cAdvisor+Prometheus+Grafana 10分钟搞定Docker容器监控平台

文章目录cAdvisorPrometheusGrafana 10分钟搞定Docker容器监控平台cAdvisor部署Prometheus部署Grafana部署cAdvisorPrometheusGrafana 10分钟搞定Docker容器监控平台 cAdvisor(Container Advisor) 是 Google 开源的一个容器监控工具,可用于对容器资源的使用情况和性…

【网络安全必备知识】本地提权漏洞分析

0. 前言 CVE-2023-21752 是 2023 年开年微软第一个有 exploit 的漏洞,原本以为有利用代码会很好分析,但是结果花费了很长时间,难点主要了两个:漏洞点定位和漏洞利用代码分析,欢迎指正。 1. 漏洞简介 根据官方信息&a…

【数据结构】二叉树的遍历以及基本操作

目录 1.树形结构 1.概念 2.二叉树 2.1概念 2.2 两种特殊的二叉树 2.3二叉树的存储 2.4二叉树的基本操作 1.手动快速创建一棵简单的二叉树 2.二叉树的遍历 (递归) 3.二叉树的层序遍历 4.获取树中节点的个数 5.获取叶子节点的个数 6.获取第K层节点的个数 7.获取二叉…