文件上传
Last updated on 6 months ago
文件上传
靶场:upload-labs
1 |
|
在upload-labs目录下创建新目录upload
一
上传1.jpg,bp抓包,把1.jpg改成1.php,在content-type下另起一行
1 |
|
content-type改为imag/png
,原来的application/octet-stream
是内容类型未知的意思
二.
.php可能被直接加黑名单,出现就禁止,选择更改为别名: php3 phtml等等
从这个图可以看出来,大小写也是绕过的一种方法(Php)
三.
上传.htaccess文件,让.jpg .png 等文件以php的方式运行(图片马运行原理)
1 |
|
1 |
|
.htaccess配置
打开apache的httpd.conf文件,ctrl f 搜搜AllowOverride ,把null全改为All,允许.htaccess全局覆盖
图片马
直接在1.jpg文件内,以笔记本方式打开,写入一句话木马(有可能报错)
在cmd(不是powershell),
1 |
|
生成图片马pass.jpg
.user.ini配置
.htaccess文件只能用于绕过apache,而且要求apache版本很低,而.user.ini则可以绕过绝大部分中间件(要求php的server api是FASTCGI,其这个跟.htaccess相反,这个要求php版本尽量高些)
1 |
|
php.ini是php的总配置文件,而.user.ini是用户自己定义的.ini文件,具有一定的权限,这条代码是让pass.jpg被插入同目录下的任意一个(默认是index.php) .php文件解析并执行,所以想用.user.ini绕过就必须确定同目录下已经有.php文件,否则就没有了
四.
1 |
|
1 |
|
上传的文件名后缀不允许是.php 但如果.php后面加个空格 就允许上传,但是服务器解析时会自动删除空格,达到绕过的效果
常见限制函数
trim()
删除字符串两端所有空格
1 |
|
strrchr()
string right most character 最右边开始的某个字符,一般用于提取文件后缀名,会输出索引及其后面的值,比如”.”是索引,输出就是.及之后的
1 |
|
strtpos()
string right most position 会输出索引的位置
1 |
|
str_replace()
替换函数
1 |
|
第一个位置是原有的(要被替换的),第二个是进行替换的,第三个是原来的字符串
五.空格绕过( )和点绕过(.)
原理:.php会被ban掉,但是.php 和.php.不会被ban掉,但是系统执行.php 和.php.时会自动去掉.和 继续执行文件,所以可以加以绕过
比如判断是先删空格再删点,那就可以”.php. .”删掉点后的” “和”.”会被自动忽视掉
upload的6.7.8.9都是这个思路
第八关这个思路也可以,但是之前的源代码相比于之前少了一行关于”::$DATA”的限制,所以这关用”::$DATA”也可以进行绕过
1 |
|
六.双写绕过
有些规则可能是读取文件名,若存在php就直接删掉php而不是禁止上传,所以可以双写绕过
原理:pphphp,在删掉”php”后正好让其它的字符组成”php”
七.文件路径修改
第11关不再是黑名单,而是白名单,类似第一关,但是注意到抓包时第一行多了一个文件的上传路径,所以可以更改文件上传路径的后缀来修改,在添加1.php后紧接着加上%00
,ascii值意思是null,有截断函数执行的效果
第12关也类似,但是把请求改为post请求,get会自动解码,post不会
1 |
|
改为get请求没有用
这里的很多坑
新版小皮面板
这个漏洞只要php版本<5.3才可以,但是新版小皮面板一下载php5.2.17就会显示网络不稳定不让下载,遂改为旧版
旧版
旧版小皮面板确实也有5.2.17,但是一直找不到更改php版本的选项,不过有php5.2.17版本的文件夹,所以直接ctrl cv到新版小皮的目录下
新版
在cv完文件后,在网站–>管理–>php版本初可以更改php版本,但是修改到5.2.17后,显示80端口被占用,并且在点击尝试关闭80端口后,把bp给关了,不过bp开了之后就可以正常用了
还有就是要选择magic_quotes_gpc()这个函数关闭,在php扩展里没找到,打开5.2.17目录下的php.ini,ctrl f搜索magic,发现是On,改成Off,收工