文件上传
黑名单
- 名单上的东西会拦截
检测是否前端后端检测
前端验证可以利用抓包进行修改
后缀替代
- jsp、jsx、jspf都会被当作 jsp 执行
- asp、asa、cer、asps都会被当作 asp 执行
- php、php3、php4、php5、phtml都会被当作 php 执行
- exe、exee都会被当作 exe 执行
修改文件类型
上传php文件时,会要求匹配图片类型的,如果不符,上传失败

.htaccess绕过
- 利用条件
- apache版本2.4.0~2.4.29中默认使用了该方式
- 必须是php+apache+mysql搭建的web环境
- php+mysql+nts+apache【就不可以】
AddType application/x-httpd-php .jpg // jpg文件被当做php文件解析
SetHandler application/x-httpd-php //也会将jpg文件当php执行
大小写绕过
pHp phP Php
空格绕过
.php后面加一个空格 .php
小数点绕过
1.php 1.php.
::$DATA(Windows文件流)
a.php => a.php::$DATA 两者是相互等价的 所以 上传a.php::$DATA
- 小技巧
echo 123 > a.txt:1.txt 只会创建一个a.txt,没有1.txt,打开a.txt里面什么都没有,但是打开a.txt:1.txt就会看见里面的内容
逻辑错误(只校验一次)
php. . (先检测一次".",在检验一次空格,最后剩下php.,也可以绕过)
双写绕过
pphphp (遇到发现php替换成空格,由于只检测了一次,剩下php了)
白名单
- 名单上的会放行
GET传参
- %00截断【PHP<5.3.29,且 GPC 关闭】

%00截断只有在PHP5.3版本以下才会出现

通过修改保存修改路径,后面添加php文件名加上%00进行截断,上传的图片本应该会按照代码直接移动到保存路径,例如192.168.30.250/uploads/1.php%00/asdas123.jpg,但是windows读到%00会认为结束了,不会考虑后面的,所以就把文件赋值到了1.php中
POST传参
- 00截断【PHP<5.3.29,且 GPC 关闭】

POST传参想要进行截断%00是不能的(%00专属于GET请求),需要修改必修对其16进制进行修改
GIF图片绕过
- 利用GIF的前几行不会被重新渲染进行制作图片马

条件竞争
-
先上传,之后移动,最后检测合格不合格(合格重新修改名字,不合格就删除)
-
- 所以就出现了如果一个不停上传,一个不停访问,就会访问到上传上的文件
需要两个数据包
- 访问上传的数据包

- 访问上传后图片位置的数据包

之后进行跑数据包
- 上传包的线城是80、访问上传地址的数据包线程60

浙公网安备 33010602011771号