• 命令注入


    命令注入

    命令注入(Command Injection)也可以成为远程命令执行漏洞,通常是一种高危漏洞。通过该漏洞,可以获取敏感信息、甚至直接获取到shell。该类漏洞通常产生在由应用系统给用户提供远程命令操作的接口上,见得多的是web管理界面的ping功能,在路由器、防火墙、入侵检测系统的web管理界面上可能会有。

    关于命令注入的使用,像pikachu靶场中说的那样,应该先捋清&,&&等的运算关系,这个需要对Windows和Linux系统的shell命令有一定了解。

    &,&&,|,||

    像上面说的那样,存在命令注入较多的是ping命令,但也可能是其他功能。这些功能很可能因为业务功能的需要,对我们的命令注入造成了限制,你不能说人家是网络检查的ping功能,你却输入whoami。这个时候就用到了系统中的命令行拼接符。

    命令拼接符在Windows和Linux上写法一样,但具体表达的意思还是有点区别。

    windows linux
    & 两条命令没有制约关系,互不影响 从后面的命令开始往前执行并显示正确命令的执行结果
    && 前一个命令执行成功才会执行后一个命令 第一条命令正确,才开始执行,执行并显示所有正确的命令
    | 管道符,将第一条命令语句的输出,作为第二条命令语句的输入 当第二条命令正确时,执行第二条命令并显示结果
    || 两条命令,如果都正确,只执行前一条命令;如果第一条不正确,执行第一条后再执行第二条 如果两条命令都正确,只执行第一条,如果其中一条正确,执行正确命令并显示结果

    该表源于网络和个人总结,如果话术描述不准确或不清晰,可以直接联系我。

    从表中可以看到Windows和Linux系统在拼接符上面的区别,如果有疑问最好还是自己在自己的计算机上实验一下,像我在渗透中,使用较多的是&&||,这两个比较好理解。

    利用方式

    如果我们确定我们测试的系统中存在命令注入了,可以直接执行系统命令,那我们能做的事还是挺多的。比如:

    • 新建用户(如果服务器有安全软件,会弹窗拦截)
    • 写入webshell
    • 查看系统信息

    靶机上的实验


    如果要写入webshell,需要echo "<?php @eval($_POST[cmd]);?>" >> xxx.php,这里尤其注意的是得用双引号"",如过是单引号'',执行会失败。测试环境DVWA_low,测试用例分别是127.0.0.1 && echo '<?php @eval($_POST[cmd]);?>' >> command.php && echo 1127.0.0.1 && echo "<?php @eval($_POST[cmd]);?>" >> command.php && echo 1,他们之间唯一的区别就是单引号和双引号的区别,测试结果如下(具体原因我并不知道,也无从下手去找,欢迎知道的师傅评论点拨):

    如果要找写入webshell的路径,可以使用dir /s/b d:command.php,代表在d盘中搜索command.php文件。


    其他

    忘记在什么地方,看到这么一个命令:cmd.exe /c "ping 127.0.0.1/../../../../../../../../windows/system32/calc.exe"。这一条命令只是感觉有意思,具体使用场景未知。

    这里说一下cmd.exe /c 与 /k 的区别,/c 在运行命令之后会关闭窗口,而 /k 会保留窗口。参考链接:https://jingyan.baidu.com/article/cd4c2979266c30756e6e6091.html

    本博客虽然很垃圾,但所有内容严禁转载
  • 相关阅读:
    HTML5中meta属性的使用详解
    前端部分兼容性问题汇总
    position元素定位详述
    jquery简单实现轮播图
    事件委托-选项卡案例
    async、await
    前端会遇到的算法
    arguments实参个数
    前端知识点整理(三)
    var、let、const
  • 原文地址:https://www.cnblogs.com/ahtoh/p/14538747.html
Copyright © 2020-2023  润新知