分类 upload-labs 下的文章

1.上传一句话木马 yijuhua.php,发现弹窗拦截。目测是js本地拦截

<?php @eval($_POST['hacker']); ?>     //php一句话木马

2.这里有两种办法绕过,

第一种最简单,直接在浏览器禁用javascript

上传成功,(那个图片框原本是显示上传后的图片的,因为我们上传的是php木马,所以不会显示出来)

菜刀连接成功

第二种办法:

先把后门文件的后缀改为合法的格式,比如.jpg,再打开burpsuite拦截,点击上传

已经拦截下了传给服务器的包

放行后就成功绕过上传了,使用f12查看器鼠标点下图片框那,会得出图片的路径

因为我上传的是一个phpinfo,所以直接打开路径,执行成功(当然你也可以像我之前一样传个一句话木马,这里为了演示效果就传phpinfo)

<?php phpinfo();?>          //phpinfo,里面会暴露你的服务器配置以及很多敏感信息

每次做完题后可以把上传的文件清下,防止重复弄混乱

1.直接上传 info.php,说文件类型不正确

2.查看了下网络包,发现文件已经发了出去,但是没有上传成功,说明是被目标服务器过滤了

3.那这次不是前端过滤而是后端过滤我们又该怎么办呢?

我们查看源码,发现是一个白名单类型过滤,过滤是根据请求包主体中 Content-Type 来决定。正如它的表面意思 “内容类型”,他这里标明了我们上传给服务器的数据类型。

因为我们传的是 info.php,所以这里标出了 application/octet-stream(二进制流数据) ,这显然是符合上传文件的条件,会被过滤。

4.那我们怎么办呢?可以通过修改 Content-Type 来实现上传。

直接打开burpsuite,把文件传给服务器的时候把包截下来

把Content-Type 改为image/jpeg 这个合法的类型,然后放行上传

可以看到已经成功上传了 info.php

我们可以右击图片地址那里然后选新建标签页打开,这样就执行了 info.php。

这样我们就通过手动修改上传文件的 MIME属性骗过了服务器检查

1.上传 info.php 提示不允许上传.asp,.aspx,.php,.jsp后缀文件

2.那么猜测是做了黑名单过滤,打开源码查看过滤规则

3.那这里我们可以通过修改文件后名为 .php5 .phtml .php3等等合法的php文件后缀名绕过,要使用这些后缀名,服务器容器必须为apache,并且是apache设置了这种解析方式。

我们先把 info.php 改为 info.php5,然后上传成功

打开没东西,应该是没解析

然后我改为 .php2 .php3 .php4 .php5 .phtml 都没法解析,估计是我这个phpstudy环境的问题,这也就验证了我之前说的,必须apache设置了这种解析方式才可以执行。那实在不行我又换了个旧点的phpstudy

更改后缀为 .phtml上传成功

执行成功

后来换了旧点的环境后也就 phtml 能解析成功,其他的都不行。我猜测可能是因为php所具有的权限过大,允许那些后缀合法可能会产生一些安全问题,最简单的就是我们现在搞这个文件上传,如果再把 phtml给禁了,只允许 php 作为php的合法文件名,那么我这不就不能执行恶意代码了。

所以从这些漏洞学习中,我们不仅要学会如何进行渗透测试,找到服务器的弱点所在,更是要学会如何去修补漏洞,加强防护。

这题有两个思路,第一个比较简单,第二个的可拓展性高

第一种方法

1.查看源码发现删除文件名末尾的点跟首尾去空只执行一次,那么我们可以构造文件名:info.php.空格. 进行绕过

黑名单过滤,直接引用的 $file_name ,程序先是去除文件名前后的空格,再去除文件名最后的.,再通过strrchar来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用类似info.php. .(两个点号之间有一个空格)绕过,如果重名名了文件的话应该会用$file_ext来进行拼凑文件,这样保存在服务器中的文件将没有后缀(去除了.空格)

2.可以看到上传成功

3.但是它实际在服务器中的存储文件名是没有最后那个点的

4.访问执行成功

5.原理就是,过滤程序会先过滤件文件名最后一个点,成为 info.php.空格,然后strrchr()函数截取最后一个点以及后面的字符串,剩下 .空格,接着再过滤尾部的空格,就只剩下一个点(.)了,. 与黑名单对不上,就绕过了服务器检测,服务器认为他是合法的就把他原来的文件名存入服务器。然后因为 Windows系统是不允许文件名最后面是 . ,会把最后面的点去掉,变成 info.php.空格,因为文件名后面跟空格也是不合法的,所以系统又会把空格去掉。那就还剩下 info.php. 最后把info.php. 后面的点也去掉了,就成了info.php

说的有点绕,我给图大家看下,我在Windows 下在文件名最后加空格和点大家猜猜会怎样

当我回车保存之后,文件名仍然是 info.php,这也就验证了windows下系统会自动删除文件名最后的点和空格这句话。

第二种方法

1.查看源码,发现是黑名单过滤。能用的后缀都被过滤完了

2.但是没有过滤 .htaccess ,那我们可以利用这个。.htaccess 是apache服务器下的控制文件访问的配置文件 ,能实现文件权限,解析,重定向等功能,更详细的解释可以看这里 .htaccess文件配置理解

windows下创建 .htaccess 的方法:

(1)先新建空白文本文档,写入下面我们需要的 .htaccess 规则

AddType application/x-httpd-php .jpg

规则意思是:在这个文件夹下把所有 .jpg 文件当作php文件解析。

(2)点击左上角 文件-->另存为,然后文件名填 .htaccess ,保存类型选所有文件

这样就创建完成了

3.有了思路,那么我们执行起来就简单了。

先把 .htaccess 传上去,上传成功

再上传 info.jpg,上传成功

那这时候我们去访问 info.jpg 会怎样呢

可以看到当作 php文件执行了

上传webshell 也是一样的原理