文件上传之白名单绕过及文件渲染
白名单绕过之00截断
原理
0x00是字符串的结束标识符,0x是16进制的标识符,0x00在ASCII码表中对应的字符是空字符。
在c语言中,空字符代表字符串的拼接结束。本文中讲述的是php高级语言,底层是靠c语言来实现的,因此空字符的字符串拼接结束功能在php中也能实现。但是在url中不能直接使用空字符,因此我们需要使用16进制的00来代替空字符,来截断后面的内容。
攻击者可以利用手动添加标识符的方式来将后面的内容进行截断,而后面的内容可以帮助我们绕过检测
上传路径为:
?save_path=../upload/test.php%00
%是16进制的标识符0x进行url编码之后的格式(每个字节转为百分号(%
)加上两个大写的十六进制)
我们上传的aa.php文件中的内容会保存到test.php中,但是检测的filename后的文件名是保存在 …/upload/test.php%00 后面的:../upload/test.php%00aa.jpg
检测的是filename后的文件名
条件
- php版本<5.3
- php.ini配置文件中,Magic_quotes_gpc必须为off
- 上传路径可控的情况下:必须将保存的路径显示到请求包中,如下图
必须满足上述条件才能使用00截断
注意
如果上传路径不在请求头的第一行的路径位置,在其他的一些地方,可能需要在16进制中将text.php后的符号改为00
hex值是由字符的ASCII码值转换成16进制而来,在线转换网站
例如upload-labs/pass-13
靶场利用
upload-labs/pass-12
白名单绕过之图片马
条件
必须包含有解析漏洞或者文件包含漏洞,才能解析图片里面包含的php代码
生成图片马的方式
- 利用copy命令生成
打开cmd,输入:
copy 图片名称 /b + 木马名称 /a 生成后的木马的名称
- 记事本方式打开图片
可以删除除了图片前几行标识以外的内容,将一句话木马添加进去
但是有些情况不适用,有些需要前6行,有些需要前9行
3.图片木马制作工具(010 Editor)
靶场利用
upload-labs/pass-14|15|16
注意
图片中可能存在文本干扰解析的情况出现,要换图片再上传,如上图
图片中的东西删的太多了,可能会导致,识别不到图片的格式
文件上传之文件渲染
简介
很多网站都允许用户进行 .jpg .png .gif文件上传,但是它会根据你上传的图片进行渲染操作(更改上传的图片)
目的是为了防止一些图片马
原理
将网站已渲染过的图片下载下来,利用010工具与未更改的图片进行对比,然后在下载下来后的图片的未更改的地方插入一句话木马
靶场利用
upload-labs/pass-17
010工具使用
点击tools后会出现compare files,点击
上传要对比的两张图片
点击compare