CTF学习3(upload)

第一关

无法上传以php为结尾的文件

查看前端js代码,发现进行了前端校验,修改判断文件类型的onsubmit 改成return true绕过

第二关

检查源码发现条件判断里['upload_file']['type']只检查了content-type

可以直接将文件后缀改成 .jpg 然后用bp抓包,将发送的。jpg改成.php

第三关

检查代码发现用了黑名单,且将文件后缀名进行了处理,无法用大写绕过,但是黑名单不全,可以将后缀改为 .php5 绕过

第四关

黑名单较全面,无法用第三关方法绕过,但是没有禁用.htaccess文件

补充知识:

.htaccess

作用:分布式配置文件,一般用于URL重写、认证、访问控制等(文件夹密码保护,用户自动重定向,自定义错误页面,改变文件扩展名等)

作用范围:特定目录(一般是网站根目录)及其子目录

优先级:较高,可覆盖Apache 的主要配置文件(httpd-conf)

生效方式:修改后立即生效

常见配法:

Sethander application/x-httpd-php 将该目录及子目录的所有文件均映射为php文件类型

AddHandler php5-script .jpg  使用php5-script 处理器来解析所匹配到的文件

AddType application/x-httpd-php .jpg  将特定扩展名文件映射为php文件类型

.httpd-conf

作用:“包含Apache HTTP 服务器的全局行为和默认设置

作用范围:整个服务器

优先级:较低

生效方式:管理员权限,重启服务器生效

因此可以先上传一个htaccess的文件使扩展名 .jpg 的文件映射为php的文件,然后上传扩展名为.jpg的文件绕过

第五关

本关拒绝上传.htaccess的文件,因此无法用上一关的方法进行绕过

但可以利用.user.ini

补充知识:

.user.ini

作用:特定于用户或特定目录的配置文件,通常位于Web应用程序的根目录下。它用于覆盖或追加全局配置文件(如php.ini)中的PHP配置选项

作用范围:存放该文件的目录以及其子目录

优先级

:较高,可以覆盖 phpini

生效方式:立即生效

前提条件:服务器脚本PHP,服务器使用CGI/FastCGI模式,上传目录下要有可执行的php文件

php.ini

作用:存储了对整个PHP环境生效的配置选项。 他通常位于PHP安装目录中

作用范围:所有运行在该PHP环境中的PHP请求

优先级:较低

生效方式:重启php或web服务器

在.user.ini文件中写auto_prepend_file=123.jpg

使所有的php文件都自动包含123.jpg文件

然后再上传123.jpg里的一句话木马

或者利用取文件扩展名的方式伪造 .php. . (在执行时php后边的.和空格会自动省略) ,这样看可以绕过后端的扩展名检验

第六关

过滤掉了前两关的文件扩展名

检查代码发现没有过滤大小写,可以将扩展名改为.Php进行绕过

第七关

没有去除空格,可以用bp抓包 在扩展名加空格绕过

第八关

没有去除文件末尾的 . 同样可以使用bp抓包添加. 进行绕过

第九关

补充知识:

php在window的时候如果文件名+“::$DATA”会把其之后的数据当成文件流处理,不会检测后缀名,且保持其之前的文件

检查源码发现其并没有过滤 ::$DATA 因此可以通过bp抓包来修改扩展名进行绕过

第十关

检查源代码

发现其用了deldot()函数该函数会从末尾检测字符串删除点,并且遇到空格时会停止,因此可以运用.php. .的构造方式绕过

函数move_upload_file(file,newloc)作用是检查并确保file指定的文件是合法的上传文件,如果其合法,则将其移动为由newloc指定的文件,如果不合法将返回false

第十一关

在这进行了判断

将黑名单里的名字替换为空格,因此可以进行双写绕过

第十二关

补充知识:php的一些函数的底层是c语言,而move_upload_file就是其中之一,遇到0x00会截断,0x表示十六进制,URL中%00解码成16禁制就是0x00

strrpos(string,find[,start]) 函数查找字符串在另一字符串中最后一次出现的位置(区分大小写)

substr(string,start[,length])函数返回字符串的一部分(从start开始[长度为length])

magic_quotes_gpc 着重偏向数据库方面,为了防止sql注入,但magic_quotes_gpc开启还会对$_REQUEST,$_GET,$_POST $_COOKIE输入的内容进行过滤

检查代码发现是白名单,不好直接通过修改扩展名绕过

$_GET['save_path']:这部分代码从$_GET超级全局数组中获取名为save_path的参数的值。通常,$_GET用于从 URL 中获取参数的值。在这里,假设save_path是一个保存上传文件的目录路径。

因此可以使用bp抓包

  • ?save_path=../upload/:表示查询字符串,包含了参数save_path和其对应的值../upload/。查询字符串通常用来向服务器传递额外的参数。

修改上述内容加入%00是使解析程序在处理文件的时候被误解为文件名的终止符

加上123.php%00,规定文件路径

第十三关

与上类一样,同样是白名单,但文件路径是根据post获取

可以利用bp抓包修改Post内容

在upload路径下加上123.php+,+是为了方便后面修改Hex值,再将filename改为png,最后找到加号的Hex改为00截断

第十四关

补充知识:

1.Png图片文件包括8字节:89 50 4E 47 0D 0A 1A 0A 即为 .PNG(无损压缩格式,头字节0x89 0x50)

2.JPG图片文件包括2字节:FF D8

3.Gif图片文件包括6字节:47 49 36 38 39 37 61(支持动画的图像格式,头两个字节为0x47 0x49 )

4.Bmp图片文件包括2字节:42  4D即为bm(windows位图格式)

Utf-8中一个英文字符占一个字节,中文(含繁体字)占三个字节

如果通过前两个字节判断文件类型,则可以通过添加不同的头字节标识来进行绕过

可以在这个页面进行测试

?file=./upload/……将这个文件包含在此页面,并以php形式运行

 

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值