代码执行命令执行详解
代码执行
什么是代码执行?
当应用在调用一些能将字符串转换成代码的函数时,没有考虑到用户是否能够控制这个字符串传入一些恶意代码,将造成代码注入漏洞
https://www.anquanke.com/post/id/229611 详细介绍
为什么存在代码执行漏洞?
应用有时候会考虑代码的简洁性,灵活性,会在代码中调用 eval之类的函数
利用方式
比如可以利用PHP的文件操作写入一个shell文件
PHP代码执行*
eval() //把字符串作为PHP代码执行
assert() //检查一个断言是否为 FALSE,可用来执行代码
preg_replace() //执行一个正则表达式的搜索和替换
call_user_func()//把第一个参数作为回调函数调用
call_user_func_array()//调用回调函数,并把一个数组参数作为回调函数的参数
array_map() //为数组的每个元素应用回调函数
python****代码执行
exec(string) # Python代码的动态执行
eval(string) # 返回表达式或代码对象的值
execfile(string) # 从一个文件中读取和执行Python脚本
input(string) #Python2.x 中 input() 相等于 eval(raw_input(prompt)) ,用来获取控制台的输入
compile(string) # 将源字符串编译为可执行对象
代码执行的分类
1.执行代码的函数
eval、assert
2.callback函数
preg_replace+/e模式
3.反序列化
unserialize()–反序列化函数
代码执行存在的危害
1.执行PHP代码
获取服务器内容或相关信息
2.让网站写shell
利用代码PHP代码功能,往服务器中写入shell脚本
3.控制服务器
利用shell脚本,上传大马,甚至控制服务器
代码执行漏洞查找
1.代码审计
为最主要的方式,借助代码审计工具,非常方便的审计出此类的漏洞
2.已知的CMS漏洞
已知CMS有很多每年都会爆出来很多此类的漏洞
3.页面传参查找
针对页面有传入参数的地方,可以重点关注传入恶意代码尝试,概率相对较小
代码执行的防御方法
1.尽量不要使用危险函数
使用json保存属组,当读取时就不要使用eval了
2.对数据进行黑白名单处理
对于必须使用eval的地方,一定要严格处理用户的数据
3.对传入的特殊字符转义
字符串使用单引号包括可控代码,插入前使用addslashes转义(addslashes、魔术引号、htmlspecialchars、htmlentities、msql_real_escape_string)
4.放弃使用Preg-replace的e修饰符
使用preg_replace_callback()替换(preg_replace_callback()),若必须使用preg_replace的e修饰符,则必须使用单引号包裹正则匹配出的对象
命令执行
什么是命令执行
当web应用需要调用一些外部程序去处理内容得情况下就会用到一些执行系统命令得函数。任意PHP中得system,exec,shell_exec等。当用户可以控制命令执行得命令时,可以可以执行想要得恶意命令
比如一些站点有ping功能就可以去构造恶意得命令让网站去执行
命令执行产生得原因
1.用户可以控制输入得内容
2.用户输入得内容被当作命令来执行
命令执行得危害
继承web应用程序得权限,执行系统命令
1.读写文件
2.反弹shell
3.控制整个网站和服务器
4.进行内网渗透
命令执行得防御
1.尽量不要使用系统命令
2.在进入执行命令函数方法之前,变量一定要做好过滤,对敏感字符进行转义
3.在使用动态函数之前,确保使用的函数时知道的函数之一
4.对PHP语言来说,不能完全控制的危险函数最好不要使用
PHP命令执行函数
system() //执行外部程序,并且显示输出
exec() //执行一个外部程序
shell_exec() //通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回
passthru() //执行外部程序并且显示原始输出
pcntl_exec() //在当前进程空间执行指定程序
popen() //打开进程文件指针
proc_open() //执行一个命令,并且打开用来输入/输出的文件指针
python命令执行函数
system() #执行系统指令
popen() #popen()方法用于从一个命令打开一个管道
subprocess.call #执行由参数提供的命令 spawn #执行命令
java
java.lang.Runtime.getRuntime(.exec(command)
Java中没有类似php中eval 函数这种直接可以将字符串转化为代码执行的函数,但是有反射机制,并且有各种基于反射机制的表达式引擎,如:OGNL、SpEL、MVEL等,这些都能造成代码执行漏洞。
常见注入(利用)方式
PHP命令执行(注入)常见可控位置情况有下面几种:
system("$arg");
//可控点直接是待执行的程序
如果我们能直接控制$arg,那么就能执行执行任意命令了。
system("/bin/prog $arg");
//可控点是传入程序的整个参数
我们能够控制的点是程序的整个参数,我们可以直接用&& || 或 | 等等,利用与、或、管道命令来执行其他命令(可以涉及到很多linux命令行技巧)。
system("/bin/prog -p $arg");
//可控点是传入程序的某个参数的值(无引号包裹)
我们控制的点是一个参数,我们也同样可以利用与、或、管道来执行其他命令,情境与二无异。
system("/bin/prog --p=\"$arg\"");
//可控点是传入程序的某个参数的值(有双引号包裹)
这种情况压力大一点,有双引号包裹。如果引号没有被转义,我们可以先闭合引号,成为第三种情况后按照第三种情况来利用,如果引号被转义(addslashes),我们也不必着急。linux shell 环境下双引号中间的变量也是可以被解析的,我们可以在双引号内利用反引号执行任意命令 id
system("/bin/prog --p='$arg'");
//可控点是传入程序的某个参数的值(有单引号包裹)
这是最困难的一种情况,因为单引号内只是一个字符串,我们要先闭合单引号才可以执行命令。如:system(“/bin/prog –p=’aaa’ | id”)
在漏洞检测中,除了有回显的命令注入(比如执行dir 命令或者cat 读取系统文件);还可以使用盲打的方式,比如curl远程机器的某个目录(看access.log),或者通过dns解析的方式获取到漏洞机器发出的请求。
当我们确定了OS命令注入漏洞后,通常可以执行一些初始命令来获取有关受到破坏的系统的信息。
Linux和Windows平台上常用的一些命令的摘要:
命令目的 | linux | windows |
---|---|---|
当前用户名 |
whoami
|
whoami
|
操作系统 |
uname -a
|
ver
|
网络配置 |
ifconfig
|
ipconfig /all
|
网络连接 |
netstat -an
|
netstat -an
|
运行进程 |
ps -ef
|
tasklist
|
代码执行命令执行详解相关推荐
- python调用cmd执行命令_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- RCE代码及命令执行漏洞简解
在 Web 应用中有时候程序员为了考虑灵活性.简洁性,会在代码调用 代码或命令执行函数去处理.比如当应用在调用一些能将字符串转化成代 码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏 洞 ...
- Linux 执行文件查找命令 which 详解
某个文件不知道放在哪里了,通常可以使用下面的一些命令来查找: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查 ...
- REC代码及命令执行代码全解
REC代码及命令执行代码全解 在Web应用中有时候程序员为了考虑灵活性.简洁性,会在代码调用代码或命令执行函数去处理.比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字 ...
- 第30天-WEB 漏洞-RCE 代码及命令执行漏洞全解
在 Web 应用中有时候程序员为了考虑灵活性.简洁性,会在代码调用代码或命令执行函数去处理.比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞.同样 ...
- 2021/12/15 RCE代码和命令执行
小迪 https://www.bilibili.com/video/BV1JZ4y1c7ro?p=29 https://www.cnblogs.com/ermei/p/6689005.html htt ...
- python实例化是什么意思_Python中实例化class的执行顺序示例详解
前言 本文主要介绍了关于Python实例化class的执行顺序的相关内容,下面话不多说了,来一起看看详细的介绍吧 Python里对类的实例化时有怎样的顺序 一般来说一个类里面有类变量和方法,比如我们定 ...
- oracle select执行顺序,oracle select执行顺序的详解
oracle select执行顺序的详解 SQL Select语句完整的执行顺序:1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子 ...
- java的for的执行顺序_对java for 循环执行顺序的详解
如下所示: for(表达式1;表达式2;表达式3) { //循环体 } 先执行"表达式1",再进行"表达式2"的判断,判断为真则执行 "循环体&quo ...
最新文章
- 网站设计怎样让搜索引擎对其另眼相待?
- HTML里的表格不能复制粘贴,表格之间无法复制粘贴怎么办_两个EXCEL表格为什么不能复制和粘贴-win7之家...
- 高效程序员的45个习惯 pdf_如何培养孩子高效学习?养成高效学习的7 个习惯。建议收藏...
- 知乎:现在做硬件工程师还有前途吗?
- 牛客练习赛60 ~ 斩杀线计算大师
- FPGA时序约束、时序分析(一)
- 算法设计 分治, 归并排序, 快速排序
- 学习笔记——web安全深度剖析
- 是==和!=相互依赖?
- 二维数组递归算法c语言,C语言课程设计--二维数组的按行求和及递归函数的编写简单家庭财务管理程序的设计.doc...
- tp5 + layui 上传图片[支持单张和多张 ]
- QT缓存QGraphicsView的背景图问题
- ZeroMQ之Request/Response (Java)
- MATLAB获取字符串中两个特定字符之间的内容
- vi+ctags 阅读源码
- 3dmax导出fbx事项注意
- 全自动解密解码神器 — Ciphey
- 《未来行业前景必看》大数据未来的发展趋势!
- 对于ARX的简单介绍
- 终于得空,写两句了......