九游网历史版本
热点资讯
你的位置:九游网历史版本 > 新闻动态 > CTFWEB-文件上传篇

新闻动态

CTFWEB-文件上传篇

发布日期:2025-02-04 00:39    点击次数:131

前言:由于我学习时使用的ctf平台是内部环境,不便公开,所以本文章只讲述做题思路和方法,练习平台大家自行选择,可以使用在线的ctf平台如:ctfshow、buuctf、bugkuctf等,也可以使用网上公开的靶场upload-labs学习。Web题目做题思路第一步拿到题目后,判断题目利用的漏洞方式为读取、写入、还是执行。在不能马上确定的情况下,就由从低到高,依次挖掘,即先找文件读取、再找文件写入、再找命令执行。这一步先确定出最终要拿到的权限,确定渗透方向。第二步判断漏洞的大概类型,或者题目大概的考点,比如,有登入框,就测试sql注入更具题目网站提供的功能点和网站的组件进行判断。这样一步步确定具体的利用思路,实现漏洞利用。第三步寻找敏感数据,拿到最终flag。什么是文件上传漏洞?如果对文件上传路径变量过滤不严,并且对用户上传的文件后缀以及文件类型限制不严,攻击者可通过 Web 访问的目录上传任意文件,包括网站后门文件(webshell),进而远程控制网站服务器。所以一般需注意:在开发网站及应用程序过程中,需严格限制和校验上传的文件,禁止上传恶意代码的文件 限制相关目录的执行权限,防范 webshell 攻击危害就是上传网站后门文件(获取webshell)注意:ctf中的文件上传题目大多数都为黑盒测试,做题流程通常都为一个个方法测试进行推测,所以本篇文章中的所有解题思路都有可能用上。网站检测机制与防护手段通常网站的检测机制是检查文件后缀,检查后缀分为两种情况白名单过滤:白名单过滤就是只允许上传它指定的文件后缀如:png、.jpg等,这种过滤在没有其他漏洞辅助的情况下几乎不可能绕过。黑名单过滤: 顾名思义就是不允许上传它指定的文件后缀,如php,phtml,phps,php3/4/5/6/7这种能解析php脚本的文件后缀,这种主要看他的黑名单写的全不全,因为有很多种办法能解析php。关键字替换双写绕过原理:服务端对黑名单中的内容进行处理,且仅处理一次,比如说使用str_replace()函数(函数具体使用自行了解),所以可以通过双写后缀绕过。使用brup抓包,我们直接上传一个1.php

图片

可以看到返回结果php被去空了,当时文件还是上传了,那么我们尝试使用双写绕过1.pphphp

图片

看到文件上传成功,我们用蚁剑连接即可

图片

如果php后缀替换为txt时,我们无法双写绕过,1.pphphp  1.ptxthpphp文件上传的00截断其实截断的原理也很简单,无论0x00还是,最终被解析后都是一个东西:chr(0)chr()是一个函数,这个函数是用来返回参数所对应的字符的,也就是说,参数是一个ASCII码,返回的值是一个字符,类型为string。那么chr(0)就很好理解了,对照ASCII码表可以知道,ASCII码为0-127的数字,每个数字对应一个字符,而0对应的就是NUT字符(NULL),也就是空字符,而截断的关键就是这个空字符,当一个字符串中存在空字符的时候,在被解析的时候会导致空字符后面的字符被丢弃。那么就可以知道00截断的原理了,在后缀中插入一个空字符(不是空格),会导致之后的部分被丢弃,而导致绕过的发生。如:在文件1.php.jpg中插入空字符变成:1.php.0x00.jpg中,解析后就会只剩下1.php,而空字符怎么插入的呢?通常我们会用Burp抓包后,在文件名插入一个空格,然后再HEX中找到空格对应的16进制编码“20”,把它改成00(即16进制ASCII码00,对应十进制的0),就可以插入空字符了这个漏洞比较老条件比较苛刻就不演示了00字符截断需要的版本php版本小于5.3.4  而最新的php版本已经达到8.1java版本小于7u40,而最新的java版本已经达到20以上iconv字符转换异常后造成了字符截断php在文件上传场景下的文件名字符集转换时,可能出现截断问题utf-8字符集  默认的字符编码范围的是0x00-0x7ficonv转换的字符不在上面这个范围之内,低版本的php会报异常,报了异常以后,后续字符不再处理就会造成截断问题123.php