代码执行漏洞

原理:

用户输入的数据被当做后端代码执行

例如一句话木马<?php eval($_REQUEST[8])?>,就是一个标准的代码执行

RCE(远程命令或者代码执行):渗透的最终情况可以实现执行命令或者是代码都属于RCE

PHP代码执行的函数:

1、eval()        可以多行执行,例:eval('echo 1;phpinfo();echo 2;');

2、 assert()    只能单行执行,例:assert(file_put_contents('1.php','<?php var_dump(8);phpinfo();?>'))或者assert(eval('echo 1;phpinfo();echo 2;'))这样就能多行执行了

3、 preg_replace()  正则替换函数 ,只能单行执行,例:preg_replace('/a/e',$_REQUEST[6],'abc'),/e特殊修饰符,把要去替换的值代码执行,如果没有要替换的值,就不会代码执行

4、create_function()  匿名函数,自定义函数要被调用才能执行,如果没有调用,我们就需要帮他闭合,然后输出我们想要的数据,例:

1、有调用的情况
<?php
$a = create_function('$id','echo $id;');
$a(8)?>
2、无调用的情况
<?php
$a = create_function('$id',$_REQUEST[666];);//其实这个就相当于 funation a ($id) {$_REQUEST[6]}
?>    

 5、array_map(要调用的函数,要传的值)   回调函数,这个函数调用不了eval,eval他不是一个函数,是PHP的特殊写法,例:array_map('assert',array($_REQUEST[666])

6、双引号二次解析PHP的5.5以上版本才能用   例:"${phphinfo()}",一般这个漏洞会在安装网站的时候出现,你写的数据库名,数据库账号这些都会被双引号包裹,这个时候就能测一下有没有这个漏洞了

我们进入靶场:

这次的靶场是一个douphp的cms,我们在本地安装测试

想要重新进入到网站的安装页面,我们必须删除掉install.lock这个文件,这个文件在data目录下,而删除文件是需要一些权限的,所以我们可以在后台页面找一下,有没有删除文件的功能点

我们在手机版的这里找到了一个删除LOGO的地方,我们抓包,看能否删除网站的install.lock文件

 我们通过抓包可以看到这个删除LOGO的代码的路径,我们去这个文件看一下

 我们可以看到unlink这个删除函数,而它那一行的是路径,就是下图所示的路径,而变量mobile这个是要删除的文件,他在数据库里的config表里面,name等于mobile_logo的这个数据,其实这个就是logo.jpg这个文件

现在我们要删除这个install.lock这个文件,我们已经知道了路径,而现在的关键就是要让config这个表里面mobile_logo里面的值变成../../../../data/install.lock,这里面的值以前是logo.jpg,现在想让它变为其他的,所以我们要让他里面的logo.jpg这个值变成我们想要删除的install.lock这个文件,我们全局搜索$dou->table('config')这个东西,看它里面的传参我们能不能控制,可以看到这个name和value的传参都是通过POST来进行传递的,我们只需要让name=mobile_logo,value=../../../../data/install.lock,

 我们向上看,触发这个的条件是什么。当$act == update 的时候,执行下面的代码,所以在我们上传文件的时候,他会触发

 我们上传文件,然后抓包,可以看到,满足以上的条件,我们传入我们构造的数据,将------WebKitFormBoundaryUlFgRWoB0mbM8ySE
Content-Disposition: form-data; name="mobile_description"这个复制,然后将name的值改为mobile_logo,再在下面传入../../../../data/install.lock,然后放包,再点击删除logo,就可以重装网站了,然后再在数据库账号的地方写入一句话木马

 本地测试成功,上靶场,按照之前的步骤走一遍就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值