技术标签: 网络 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);
文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文
文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作 导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释: cwy_init/init_123..._达梦数据库导入导出
文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js
文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6
文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输
文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...
文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure
文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割
文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答
文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。
文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入
文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf