pikachu文件上传

Client check

打开靶场尝试直接上传一句话木马发现无法上传

又看到此道题目题名为Client check,猜想是在前端对上传文件进行判断,我们直接禁止使用js,再尝试上传文件,发现上传成功

使用phpinfo()来确认木马的可用性

MIME type

这里我们看到标题是MIME type就可以想到通过更改文件content-type来成功上传小马

成功上传,检验小马的可用性

getimagesize()

直接尝试上传小马发现上传失败

尝试%00截断

也失败了

这里提示上传的是个假图片,应该是对文件内容头部进行了检测,我们在文件内容头部添加"GIF89a?"来绕过检测

成功上传,但文件名后缀为jpg,小马无法直接连上,看了其他的wp才意识到可以利用前面的本地文件包含利用此小马

小马可用,最后看源代码,这里是无法使用%00截断的,因为文件后缀名已经是指定的类型了

1

if(isset($_POST['submit'])){

2

$type=array('jpg','jpeg','png');//指定类型

3

$mime=array('image/jpg','image/jpeg','image/png');

4

$save_path='uploads'.date('/Y/m/d/');//根据当天日期生成一个文件夹

5

$upload=upload('uploadfile','512000',$type,$mime,$save_path);//调用函数

6

if($upload['return']){

7

$html.="<p class='notice'>文件上传成功</p><p class='notice'>文件保存的路径为:{$upload['save_path']}</p>";

8

}else{

9

$html.="<p class=notice>{$upload['error']}</p>";

10

11

}

12

}

1

function upload($key,$size,$type=array(),$mime=array(),$save_path){

2

3

//获取后缀名,如果不存在后缀名,则将变量设置为空

4

$arr_filename=pathinfo($_FILES[$key]['name']);

5

if(!isset($arr_filename['extension'])){

6

$arr_filename['extension']='';

7

}

8

//先验证后缀名

9

if(!in_array(strtolower($arr_filename['extension']),$type)){//转换成小写,在比较

10

$return_data['error']='上传文件的后缀名不能为空,且必须是'.implode(',',$type).'中的一个';

11

$return_data['return']=false;

12

return $return_data;

13

}

14

15

//验证MIME类型,MIME类型可以被绕过

16

if(!in_array($_FILES[$key]['type'], $mime)){

17

$return_data['error']='你上传的是个假图片,不要欺骗我xxx!';

18

$return_data['return']=false;

19

return $return_data;

20

}

21

//通过getimagesize来读取图片的属性,从而判断是不是真实的图片,还是可以被绕过的

22

if(!getimagesize($_FILES[$key]['tmp_name'])){

23

$return_data['error']='你上传的是个假图片,不要欺骗我!';

24

$return_data['return']=false;

25

return $return_data;

26

}

27

28

}

29

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值