命令执行和代码执行

简介

命令执行

web应用提供调取外部应用、执行系统命令功能。用户利用这些功能执行系统命令,从而读取敏感信息、拿到系统权限。

代码执行

应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval(),eval可以将字符串当做函数进行执行)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。一般很难通过黑盒查找漏洞,大部分都是根据源代码判断代码执行漏洞。

危险函数 

命令执行函数:

system(): 执行一个外部的应用程序并显示输出的结果

exec(): 执行一个外部的应用程序,以数组形式保存结果,回显需要echo

shell_exec(): 执行shell命令并返回输出的结果的字符串,回显需要echo

passthru(): 执行一个unix系统命令并显示原始的输出

popen

proc_open

pcntl_exec() (需要开启pcntl扩展) ob_start:打开输出控制缓冲

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

代码执行函数:

eval():将字符串当做函数进行执行(需要传入一个完整的语句)。
assert():判断是否为字符串,是则当成代码执行。php官方在php7中更改了assert函数。在php7.0.29之后的版本不支持动态调用。
call_user_func():回调函数,可以使用is_callable查看是否可以进行调用call_user_fuc_array():回调函数,参数为数组
create_function():创建匿名函数
preg_replace()::当php版本小于7时,当为/e 时代码会执行
array_map():为数组的每个元素应用回调函数
array_iter():依次将array数组中的每个值传递到callback函数。如果callback函数返回true,则 array数组的当前值会被包含,在返回的结果数组中。数组的键名保留不变。
usort():使用自定义函数对数组进行排序。
${}:中间的php代码将会被解析。

preg_replace

利用方式

1.eval

eval():将字符串当做函数进行执行(需要传入一个完整的语句)

2.assert

assert():判断是否为字符串,是则当成代码执行

3.call_user_func

call_user_func():回调函数,可以使用is_callable查看是否可以进行调用

4.call_user_fuc_array

call_user_fuc_array():回调函数,参数为数组

5.create_function

create_function():创建匿名函数

string create_function(string $args,string $code)

args是要创建的函数的参数,code是函数内的代码

6.preg_replace

preg_replace():当为/e时代码会执行

7.system

system:可以执行系统命令并将其输出

8.passthru

passthru:执行命令并输出

9.shell_exec

shell_exec:执行命令,但无回显

10.反引号

反引号:执行shell命令,并返回输出的字符串

参考链接

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值