上传参数名解析:明确哪些东西可以修改
content-disposition:一般可更改 表单的数据
name:表单参数值,不能更改 表单提交的值
filename:文件名,可以修改 上传的文件名
content-type:文件mime,视情况修改 上传文件名自带的参数类型
mime可以作为一个验证条件,验证mime来判断你个文件一个合法性的时候,可以通过更改mime来达到一个伪造,比如上传一个php文件,这时候可以更改为图片类来尝试绕过mime验证。
waf验证判断形势,主要是这样的一种形式是判断,检测文件里面的代码,如果代码立马有后门代码检测到会拦截,这个代码怎么编译绕过是后面要学的,我们只讲文件上传所以这里先不管它,文件上传一般检测的都是这种有参数后面有数据的,四个参数值比较关键的是filename,文件名,文件名里面包含了文件的后缀。
前期upload第二关的时候,判断的方式就是mime的类型的绕过,绕过miem是图片类型就可以上传,没有验证后缀,这是代码的判断,我们在来探针一下防护软件是怎么判断的,现在第二关上传一个图片上去,抓住数据包,mime满足就可以上传,所以把上传的文件名字改成php格式,本来这是可以正常上传成功的
但是由于安全狗的原因被拦截了。改了之后php之后不能上传,所以他对那个文件名后缀绝对是有一个检测的,
安全狗这里就有php后缀检测,所以拦截。绕过方法,就是检测不到这个php,要么换一个脚本类型能执行出php,最终目的都是能执行出脚本的后缀,php只是一种,asp也可以,因为这个网站是php所以php作为演示。
两只思路,第一种是让他检测不到成功上传一个可以执行出php的权利,尝试一下猜想,在中间加上一个空格ph p,返回源代码没有那个安全狗关键词了,文件也成功上传了,但这个文件又不可以直接访问了,因为多了一个空格之后,访问网站就显示成
两个浏览器访问返回结果,这样子上传也还是张图片,没有当作脚本,没有执行出来脚本,也不可以。
之前绕过是在php后面加上点和空格,现在这样上传,安全狗还是拦截了。
常见绕过方法
数据溢出,放匹配的
这个原理借助的溢出漏洞,这是老师自己取的名字,就比如让你在一万个人里面找一个人,几率很小,我们把这个数据搞大,让程序去一个一个匹配也是这样,它不会排除就挨个去匹配,数据太多了,程序会停止或者崩溃,数据溢出就是用的这个方法,因为他匹配的就是名字,所以在后缀名之前名字开始溢出比较好,乱写一堆一直重复,
apache服务被迫停止工作,但是数据太多了,数据包没有发出去,所以这文件名那个地方不要去搞,
换一种思路,写道filename前面来,因为他会慢慢检测吗,先检测上面的content-disposition,在往下检测,检测filenam的起那么加上一堆垃圾数据,
这样子上传成功了但是文件了没有,这个是什么原因造成的,
这样子在filename前面加上aa.jpg乱码绕过,但是上传的是一个aa.jpg。
再换一个地方写垃圾数据,
写到这个name前面来,注意垃圾数据的结尾要写一个;,然后可以该修改的fielname更改为x.php,然后写够垃圾数据到不拦截看结果
上传成功了
注意 结尾一定要加上个;,不然上传不成功。
学前面的知识为了不会乱插入,插入到不该插入大地方去,比如name:表单参数值,不能更改
第二种 符合变异,放匹配(" ' ;)
抓住数据包,数据包里面的符合都是有讲究的,冒号就代表的后面是值,分号加上结尾了一对一。
而name="file_upload",这个呢是数据包自带的冒号里面代表的是可以更改的不固定的, filename="1.gif 这个里面的值是可以更改的所以是双引号,基本程序开发里面都有单引号双引号,都可以,这是第一个可以变化的地方。