打靶日常-upload-labs(21关)
准备工作:选择低版本,高版本可能有问题
注意参数设置中这几个选项,如有其他问题,可以留言,博主看到会回复.
准备一个10乘10像素的照片,(尽量小一点),一个一句话木马,执行以下指令:
结果:
1.发现是一个前端验证:直接上传c.jpg,然后在bp里面改个包
用重放器把c.jpg改成c.php即可:
然后访问图片页面,再修改URL为c.php:看见下面页面就说明是成功了
因为我的一句话木马使用的是request,参数是x,所以get和post都可以测试:
get测试:
post测试:这里工具为hackbar
当然也可以蚁剑连接:
2.操作如上,屡试不爽
注意要自己会找图片的位置
3.黑名单
我们发现php为后缀已经让禁止了
可以随便修改一个php3
在找图片地址的时候,发现他在存的时候自动取名:
我们查第一回返回的包
然后成功
4.也是黑名单验证
没有禁用.htaccess文件
解释:.htacesss相对于一个apache的子配置文件,可以放在单独的目录下(路径下)去控制当个访问路径的行为。
漏洞前提:
<FilesMatch "c.jpg">
setHandler application/x-httpd-php
</FilesMatch>
然后成功
5.做之前要切换版本
使用前提:1、要求php版本大于5.3,2、并且使用fastcgi模式(phpstudy里面nts代表fastcgi模式)3、上传目录下必须已经存在可以被执行的php文件
.user.ini,默认修改时间是5分钟生效
auto_prepend_file=d.jpg
d.jpg写一句话木马
6.啥也不用改,大小写绕过:window不区分大小写
7.虽然已经增加了大写-->小写转换,但是没有使用trim()去除空格,所以可以使用空格绕过黑名单
8.加.绕过
9.利用windows特性:文件流特殊字符:
::$DATA,如果文件名+::$DATA,windows会把这个文件当成文件流处理,不会检
测具体的后缀名。且保留::$DATA之前的文件名
10.deldot函数:从后往前检测,当检测到末尾的第一个点时会继续它的检测,但遇到空格就停止检测
码源:
所以我们用. .绕过
11strireplace会把检测到的黑名单列表里面的后缀名替换为空(只会替换一次,从前往后识别)
12.白名单验证,00截断
利用move_uploaded_file函数漏洞(C语言的特性:PHP执行引|擎底层就是C语言)
C语言的特性:遇到0x00会截断(十六进制的00代表结束符),URL编码:%00
前提:需要php版本小于5.3.4,magic_quotes_gpc关闭
在文件上传的时候添加%00
显示为404
修改URL即可
13.也是00截断,不过是post请求
把2b改为00
14.文件包含漏洞
15.方法同上
16.php扩展的php_exif要打开
过程同上
17.是对图片进行了两次编译:
后序更新第二种解法
18.白名单
条件竞争问题:
条件竞争:多个程序或者进程争取同一个资源。最后的结果取决于程序对资源操作的先后顺序
关键逻辑:在于判断文件类型到删除文件是需要一定时间的,如果此时有一个进程去访问上传的文件,可能导致访问文件
的进程和删除文件的进程造成了条件竞争。如果访问文件的进程抢在删除文件之前成功访问了。那么文件就已经被加载到
内存中执行了
可以用多线程发包,一边不停的上传文件,一边不停的去访问上传的文件路径
19.白名单
7z后缀没有在mime类型里面规定。利用apache未知文件解析漏洞
上传—个b.php.7zI
20.黑名单
move_uploaded_file: 会忽略文件末尾的 / .
可以把文件名后缀改为 Iphp/ .
拦截改这里即可
21.数组绕过
explode(a,b)函数以a为分割,把b转为数组。
reset()函数把数组内部指针移动到数组第一个元素,并返回值。
end()把数组内部指针移动到数组最后一个元素,并返回值。
count()函数数组元素的数量。
Sfile = explode(', strtolower($file);
把文件名通过点号进行分割为数组。
收官!!!