【第十八天 - 命令执行】

Q1. 什麽是命令执行

指令是与电脑互动的一种方式,一般来说作业系统会包含至少一个 Shell 程序,例如 Linux 常见的 bash 、 Windows 内建的 cmd 。使用者可以在 Shell 中执行命令,藉此指挥作业系统处理任务。

这些命令可能是 Shell 自带的功能,例如 pwdtestcd 等,又或者是执行档,例如 nslookupipgrep 等。

有些时候,网页程序欲达成的功能早已有相当成熟的指令可以使用,如果要重新实作,除了需要开发时间之外,还可能开发出来的执行效率、稳定性皆不如现有的指令。为了避免重复造轮子,网页工程师便可能选择直接呼叫现有的指令。此时,若前端使用者的输入能够影响到指令参数,便有可能改变指令行为,甚至呼叫其他额外的指令。

Q2. 命令执行原理

  • 工程师为了方便处理,可能会直接撰写执行外部程序的函数,若未对输入做过滤,骇客就能注入恶意指令,造成危害

  • 在 PHP 中,下列是常被用於呼叫外部指令的方法:

    • system 函数
    • exec 函数
    • shell_exec 函数
    • passthru 函数
    • Backtick Operator(```)
  • 例如网页的 PHP 如下:

    <?php
    	$dir = $_GET['cmd'];
    	system("echo ".$dir);
    ?>
    
    • 如果请求网址为 <网址>?cmd=hello,页面会显示 hello。此时骇客注入 <网址>?cmd=hi && ls 页面除了显示 hi,也会显示当前目录底下的档案
  • bash 为例,连接多条指令的方法:

    • aaa && bbb 为例,只有在 aaa 成功执行时, bbb 才会跟着被执行。 (echo 基本上都为 true) (&& 在 URL 编码中为 %26%26)
    • aaa || bbb 为例,只有在 aaa 执行失败时, bbb 才会跟着被执行。 (|| URL编码 %7C%7C)
    • aaa ; bbb 为例,无论 aaa 成功与否,都会执行 bbb
    • aaa %0a bbb 为例,无论 aaa 成功与否,都会执行 bbb。 (%0a\n )
    • aaa %0d bbb 为例,无论 aaa 成功与否,都会执行 bbb。 (%0d\r )
  • 此外, "$(指令)""指令" 也会执行中间的指令 (注意,若将双引号改成单引号,例如'$(指令)''指令' 则会将单引号中的内容视为字串)

  • 若网页服务器是使用 Windows 作业系统,以 cmd 为例,可以使用 &&||%0a ,用法与 bash 相同。

  • 在 Windows 中的跳脱字元为 ^ ,Linux 的跳脱字元为 \ ,可以把特殊符号(例如 &&|| )变成一般字串处理


<<:  Day17# panic & recover

>>:  Day17 - [丰收款] 永丰API虚拟帐户付款与PayToken查询与更新状态

[Day2]安装VirtualBox及汇入Oracle 11gR2

VirtualBox是一套由甲骨文公司进行开发的免费中文版Virtual Machine,在虚拟机中...

【Side Project】 (老板)订单清单-未完成餐点提示

原本程序的部分打算到上一篇就结束了, 不过有小夥伴问到如何在更改状态的同时<span>中...

《DAY 30》天气 App 实作(完)

最後一天来把天气 App 的剩余部分给完成,冲啊! 当一开始进入 App 会直接显示宜兰县在第一个时...

Firebase来帮忙登入画面 Day 11

因为昨天安装了Firebase的资料库,那麽今天就来使用Firebase实作登入画面的操作 在Fir...

Cotex-M55 首篇

ARM技术听前辈说是包山包海,想了好久才尘埃落定,决定下笔来写写去年才发布、有Helium向量处理技...