技术标签: 网络 web安全 安全 安全架构 网络安全 威胁分析 安全性测试
目录
1.1.1.call_user_func() 和 call_user_func_array()
1.1.5.array_map(), array_walk(), array_filter()
1.1.6.register_shutdown_function() 和 register_tick_function()
1.1.8.ReflectionFunction和ReflectionMethod
1.1.9.shell_exec(), exec(), system(), passthru()
2.2.2.4.subprocess.check_output()
2.2.2.5.subprocess.getstatusoutput()
这两个函数可以调用一个用户定义的函数,如果传递的是含有系统命令的字符串,可能被用来执行代码。
call_user_func('system', 'id'); // 等同于执行系统命令 id
该函数可以创建一个匿名(匿名)函数,但如果函数的代码是由用户输入构造的,可能会执行不安全的代码。
$func = create_function('$a', 'return system($a);');
$func('id');
注意:create_function()已在PHP 7.2.0中废弃,建议使用匿名函数代替。
该函数会检查指定的字符串代码是否为true,如果不是,则抛出一个警告。字符串会被当作PHP代码执行。
<?php
$a='a'.'ssert';
$a($_POST['a']);
?>
当preg_replace()使用/e修饰符时,它会执行替换参数中的PHP表达式。但需要注意的是,/e修饰符在PHP 5.5.0以后废弃,PHP 7.0.0中移除。
preg_replace('/.*/e', 'system("id")', '');
这些函数可以对数组的每个元素应用回调函数,若回调函数内容由用户控制,存在代码执行可能。
array_map('system', ['id']);
这些函数用于注册会在PHP脚本结束时或在declare中指定的代码块执行时运行的函数。具有执行命令的能力。
register_shutdown_function('system', 'id');
在ob_start系统的callback函数中,如果指定的callback函数包含执行代码,那么也可能是执行代码的来源。
ob_start('system');
echo 'id';
ob_end_flush();
反射API允许你对函数进行内省,并可以用来执行函数。
$function = new ReflectionFunction('system');
$function->invoke('id');
这些都是直接在操作系统层面执行命令的函数。
shell_exec('id');
exec('id');
system('id');
passthru('id');
允许你执行一个命令并且打开用于输入/输出的文件指针。
$process = proc_open('id', [1 => ['pipe', 'w'], 2 => ['pipe', 'w']], $pipes);
PHP 的反引号与 shell_exec() 函数等效,执行外部 shell 命令。
$output = `ls`;
python中执行命令的函数不多,但是输入参数走以下函数可能就会有命令执行漏洞
这个函数可以执行存储在字符串或文件对象中的Python语句。它适用于动态执行Python程序。
code_str = "print('Hello, exec!')"
exec(code_str)
eval()用于执行单个Python表达式,并返回表达式的值。
result = eval('5 * 5')
print(result) # 输出: 25
这个函数用于在Python 2中执行文件里的Python代码。在Python 3中,可以用exec()和open()组合的方式来达到相同效果。
Python 2:
execfile('script.py')
Python 3 替代方法:
with open('script.py') as file:
exec(file.read())
JAVA中能够直接执行代码的函数基本没有,都是调用反序列化来动态执行字符串.所以这里暂时没有.
执行一个外部程序,并返回最后一条输出行。
exec('ls', $output, $return);
执行通过 shell 环境的命令,并将全部输出作为字符串返回。
$output = shell_exec('ls');
执行外部程序,并显示输出。
system('ls', $return);
执行外部程序,并直接显示原始输出。
passthru('ls');
更复杂的执行外部程序的方法,允许双向通信,读写进程的 STDIN 和 STDOUT。
$handle = popen('/usr/bin/grep ' . escapeshellarg($pattern), 'r');
在当前进程的空间执行指定程序。
pcntl_exec('/path/to/executable', $args);
2.2.1.1.os.system(
这个函数接受一个命令字符串,并在子shell中执行该命令,返回命令的退出状态。
import os
exit_status = os.system('ls -l')
2.2.1.2.os.popen()
该函数用于从指定的命令打开一个管道。它根据是读模式('r')还是写模式('w')返回一个连接到管道的文件对象。
import os
stream = os.popen('ls -l')
output = stream.read()
2.2.2.1.subprocess.run()
这是Python中推荐用于运行shell命令的主要函数。它允许你运行命令,等待其完成,并收集所有输出。
import subprocess
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, text=True)
print(result.stdout)
2.2.2.2.subprocess.call()
类似于os.system(),subprocess.call()运行一个命令,等待它完成,然后返回返回码。
import subprocess
return_code = subprocess.call(['ls', '-l'])
2.2.2.3.subprocess.Popen()
提供了更多的控制,你可以指定如何运行命令,如何处理输入输出以及如何设置程序的环境。
import subprocess
process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
output, errors = process.communicate()
2.2.2.4.subprocess.check_output()
设计用来捕获命令的输出并作为字节字符串返回。
import subprocess
output = subprocess.check_output(['ls', '-l'])
2.2.2.5.subprocess.getstatusoutput()
返回(returncode, output)元组,类似于结合使用os.popen()和os.system()。
import subprocess
status, output = subprocess.getstatusoutput('ls -l')
Runtime.exec() 方法可以用来执行操作系统的命令。这个方法有多个重载版本,可以执行不同类型的命令和环境配置。
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("cmd /c dir"); // 在Windows中执行
ProcessBuilder 类提供了一个更灵活的方式来创建操作系统进程。与 Runtime.exec() 相比,它可以更容易地设置环境变量和工作目录,并且可以重定向输入和输出流。
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "dir");
Process process = processBuilder.start();
ProcessBuilder 还可以将多个命令合成一个管道执行:
ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir && cd ..");
builder.redirectErrorStream(true);
Process process = builder.start();
Process 类并不直接用来执行命令,但通过一个 Process 对象,你可以控制正在运行的进程,并查询进程信息。
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "dir");
Process process = processBuilder.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
int exitCode = process.waitFor();
System.out.println("Exited with code: " + exitCode);
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数