upload-labs通关

 前记:

在这里面我们使用一句话木马时使用php里的一个函数phpinfo(),该函数能显示出网页具体的php版本和有关的信息。

pass-01(js前端验证)

方法1:禁用js/删除js验证

      1.禁用js

           按f12,在“调试器”右端的设置中,禁用js,上传成功后右键图片,在新页面中打开图片即可

         

       2.删除js

               把网页源码中的return checkFile删除后上传打开即可。(和删除代码是一样的)

方法2:bp抓包改文件后缀

传一个允许上传类型的文件,bp抓包以后,修改后缀回.php即可

方法3:删除代码

将选中部分的源码删除掉,再上传即可,如果找不到路径,可在f12的“网络”模块中找到

pass-02(MIME验证)

方法1:修改文件类型

上传一个php文件,bp抓包后修改Content-Type为image/jpeg(常用)、image/png、image/gif,另外两个是源码中承认的

方法2:上传合法文件和改后缀

上传一个合法的文件,例如jpg,bp抓包后再把文件的后缀改回来即可(可能需要多次放包,直至出现上传成功的框)

pass-03(黑名单验证,特殊文件类型)

查看源码后发现禁止上传.asp|.aspx|.php|.jsp,修改文件后缀为php1,php2,php3,php4.php5,phtmI, pht上传即可

注意:phpstudy_pro在此上传成功后不能正确显示,如果要正确显示,需要回溯2018版本,选择php版本不带nts的,如果是其他的可以尝试修改httpd.conf配置文件,Pro版本不知道改了能不能,可以试一下

pass-04(.htaccess)

这个和ctfhub上的那个一样,在源码中许多后缀都被禁用了,我们这里使用.htaccess是因为在我们上传了一个.htaccess文件后再上传一个某类型的文件,后面上传的文件就可以变成php解析过的,详情请搜索“分布式配置文件”或者“.htaccess”。所以我们再上传了.htaccess后就再上传一个.jpg再访问就行了

.htaccess文件内容有以下几种(常见)

AddHandler php5-script .png  //使用 php5-script 处理器来解析所匹配到的文件
AddType application/x-httpd-php .png  //将特定扩展名文件(这里是.png)映射为php文件类型
SetHandler application/x-httpd-php    //将该目录及子目录的所有文件均映射为php文件类型

pass-05(黑名单验证,.user.ini)

.user.ini是php的一种配置文件,相当于一个用户自定义的php.ini,它可以在(你在语句中定义的那个)php文件执行之前将其包含,然后获取shell,细节去搜索,展开讲有点多。

上传目录存在php文件(readme.php),再先上传.user.ini后,修改php.ini配置文件,上传后面的图片码,最后访问这个(readme.php)或者图片码文件的路径即可

auto_prepend_file=文件名
auto_append_file=文件名

 修改如下

pass-06(大小写绕过黑名单)

查看源码,发现大小写绕过这种方式没有被禁止,我们就可以利用,上传文件后缀为Php这类

pass-07(收尾去空)

查看源码和上面的相比,收尾去空这一项没有了,我们可以利用bp抓包后在后缀后添加空格,就可以上传成功。

 

pass-08(字符绕过)

查看源码,与前面的相比,没有了删除文件名后的点那项,我们在bp抓包以后可以再文件后缀后加一个.这样的字符就可以绕过了

 

pass-09(::$DATA绕过黑名单)

还是看源代码,与之前的相比,没有了去除字符串那项,用::$DATA绕过

 

pass-10(点空格点绕过黑名单)

查看源码:deldot()函数从后向前检测,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来,因此我们在文件后缀后加“. .”后上传即可。

 

pass-11(双鞋绕过)

str_ireplace()函数:此函数无视大小写, 如果文件名含有黑名单里面的字符串就替换为空,而且只替换一次,它从左往右读,所以替换为空后还是php,可以双写为pphphp,phphpp

 

pass-12(%00截断-get型)

源码中有一个很重要的点,上面的 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;这行代码规定了组成上传路径的方法,这里就是我们要操作的地方。

注意:因为这个是自己搭的网站,而且是比较老的了,所以要修改一些配置

在php.ini中修改magic_quotes_gpc=On为magic_quotes_gpc=Off

 还有php的版本需要修改或者说版本号要<5.3.29,在phpstudy2018中点击切换版本,将其改为php-5.2.17+Apache注意:前文说过我们不选后面带nts的版本,我们访问上传页面时会出错。

上传php文件后,在开始save-path那行,把上传的方式改为get,然后在upload后加上文件名和%00,下面的filename=的后缀改为.jpg,再上传,用蚁剑连接即可

pass-13(%00截断-post型)

和第12题一样,上传php文件后,在开始save-path那行,把上传的方式改为post,然后在upload后加上文件名和%00,将filename=后面的后缀改为.jpg,再上传,用蚁剑连接即可

小结

1.重回php解析

pass-04,05这两个关卡都是用php的配置文件将我们修改过后缀的php一句话木马重新变为php解析

2.函数

pass-06:strtolower() 函数把字符串转换为小写

pass_07:trim()去除空格

pass-08:deldot()过滤文件名末尾的点,当检测到末尾的第一个点时会继续它的检测,但是遇到空格会停下来

pass-09:  ::$DATA之后的数据会被当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名 他的目的就是不检查后缀名。

pass-11:str_ireplace()函数寻找文件名中存在的黑名单字符串,将它替换成空(即将它删掉)

3.window文件名规则

pass-07/08/09都利用了window的文件名规则,文件名后的空格和点会被删除,我们在文件名上直接修改是行不通的,因此,我们必须抓包来修改

4.%00截断

这是一个大类,00截断是操作系统的漏洞,因为windows系统是用c语言或汇编语言写的,他们都是以\0即0x00结尾的,这样就可以截断字符串,因此,我们也可以用来绕过web的软waf白名单限制。

5.为什么

为什么我们要用phpinfo和文件上传,我们其实是通过上传文件时web的漏洞上传木马来进入内部,从而获得我们想要的信息。包括一系列的绕过,其实我们的最终目的就是成功的文件上传,然后进去内部。phpinfo可以显示php版本和配置信息,更方便我们入侵,也会有web的路径,这些都是很有帮助的。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 23:32:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 23:32:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 23:32:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 23:32:01       20 阅读

热门阅读

  1. Android ANR 日志导出及分析

    2024-04-28 23:32:01       14 阅读
  2. SpringBoot集成Redis

    2024-04-28 23:32:01       11 阅读
  3. 【Python】python中isinstance的用法

    2024-04-28 23:32:01       14 阅读
  4. 【计算机网络】计算机网络概念

    2024-04-28 23:32:01       9 阅读
  5. 商城数据库(49-52)

    2024-04-28 23:32:01       12 阅读
  6. mybatis-plus报错:Can not find table primary key in Class

    2024-04-28 23:32:01       13 阅读
  7. 解决Qt在线安装过慢的问题

    2024-04-28 23:32:01       11 阅读