前台头像上传的地方任意文件上传
public
function
upload() {
//
创建图片存储文件夹
$dir
= SYS_UPLOAD_PATH.'/member/'.$this->uid.'/';
@dr_dir_delete($dir);
!is_dir($dir)
&& dr_mkdirs($dir);
if
($_POST['tx'])
{
$file
= str_replace('
',
'+',
$_POST['tx']);
if
(preg_match('/^(data:\s*image\/(\w+);base64,)/',
$file,
$result)){
$new_file
= $dir.'0x0.'.$result[2];
if
([email protected]file_put_contents($new_file,
base64_decode(str_replace($result[1],
'',
$file))))
{
exit(dr_json(0,
'目录权限不足或磁盘已满'));
|
接收txt的参数.然后匹配了正则.最后取出内容和文件后缀部分。再直接存盘.文件名都是统一的0x0
仅仅是需要记住当前用户的id就可以搞定了
webshell http://xxx.com//uploadfile/member/uid/0x0.php
修复方案:
if
(preg_match('/^(data:\s*image\/(png|jpg|jpeg);base64,)/', $file, $result)){
本地实验:
上传一个->图片木马->抓包->然后将图片后缀改为php->上传->访问
http://xxx.com//uploadfile/member/uid/0x0.php->菜刀链接->结束
|