前台头像上传的地方任意文件上传
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
(!@
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->菜刀链接->结束
|