关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Web安全——命令注入漏洞详解

发布时间:2023-06-26 09:59:56
本文将针对以下问题逐条进行解答: 01 命令执行漏洞是什么? 02 为什么会有命令执行漏洞? 03 命令执行漏洞可以用来做什么? 04 我们该如何使用命令执行漏洞? 05 修复方案是什么? 06 什么情况下考虑命令执行漏洞? 01 命令执行漏洞概念 简单来说, 命令执行漏洞就是黑客能够通过控制外部参数可以达到执行系统命令的效果。 相较于代码执行漏洞来说,代码执行漏洞是 靠执行脚本代码调用操作系统命令,而命令执行漏洞是直接调用系统命令的漏洞,也叫做os命令执行漏洞。 02 命令执行漏洞产生的原因 原因主要有二: 1.外部参数可控 应用程序调用了执行系统命令的函数,比如服务器程序通过 system、eval、exec等函数直接或者间接地调用 cmd.exe。 而 黑客能控制这些函数中的参数,比如可以通过浏览器或者其他客户端软件提交一些cmd命令(或者bash命令)至服务器程序。 2.内部拼接命令 服务器将 输入的恶意参数拼接到正常命令中 ,从而执行命令造成攻击 03 命令执行漏洞的危害 黑客如果能够利用命令执行漏洞,那么黑客就可以像电脑用户控制自己电脑一样, 自由地对电脑进行操作,比如开启防火墙、添加路由、开启远程服务等等操作 04 命令执行漏洞的利用方式 这里以一道CTF题举栗子 1.找到一个可以自己输入参数的页面 如攻防世界中的一道Web题目 页面场景如下: 尝试输入本地地址127.0.0.1,观察回显内容 发现返回内容相似命令行下ping命令返回结果,初步判断可能存在命令执行漏洞 2.利用管道符辅助测试 在场景利用前,我先岔开话题分享一下有关于管道符的一些知识在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。下面列举windows系统 和linux系统**支持的管道符命令: windows系统支持的管道符: 示例 用法 a \ b 直接执行命令b a \ \ b a为假 ,才执行b a & b a可真可假,若为假则直接执行b a &&b a为真,b才能执行 linux系统支持的管道符: 示例 用法 a;b 执行完再执行b a \ b 直接显示b的执行结果 a \ \ b a错,b才执行 a & b a可真可假,若为假则直接执行b a && b a为真才能执行b 很多时候,我老是忘记符号之间的区别,于是我花心思想了个小技巧记忆,在这里也分享给大家: |是棍子,单打独斗:a | b : b是主角,一根棍子的时候不在意a的死活,执行自己的就完事a || b :b是主角,两根棍子的时候,戾气很重,非要打死a,只有a死了才能执行自己的 &是拉手,和谐共处:a & b : b是主角,一次拉手是表面朋友,不管你a是死是活,我都会执行a & b : b是主角,两次拉手是死党,只有a过得好好的,我才会也执行的好好的 好,回到这个web场景。我们在第一步的时候判断此处存在系统命令执行漏洞,于是我们使用管道符|进行测试,发现果然可以执行系统命令。 经过了后续的命令执行,我们很容易的获得了本题的flag 总结一下,这道题就是简单考察我们对命令注入漏洞中管道符的使用,较为简单。 05 修复命令执行漏洞漏洞的方案 1.设计者尽可能少设计使用一些命令执行函数, 2.若有必要使用,那么必须对特殊函数做过滤,对用户输入的命令做检查,对客户端提交的变量在进入执行命令前做好过滤和检查等 06 什么情况下考虑命令执行漏洞? 作为一个安全老司机,当我们看到一个可输入参数的位置,心里就要有点痒痒 这时候我们可以尝试使用SQL注入、命令注入试试手,然后查看返回结果,如果返回的内容是命令执行返回的内容,那我们尝试使用管道符辅助测试,比如 127.0.0.1 | whoami

/template/Home/leiyu/PC/Static