CTF之web学习记录 -- 命令注入

概述

  web服务器后端代码有时会调用一些执行系统命令的函数,以常见的php语言为例,使用system/exec/shell_exec/passthru/popen/proc_popen等函数可以执行系统命令。因此一旦我们可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

常见攻击方式

使用管道符号

  我们以一段简单的php代码为例,如下代码所示,程序获取get参数ip,然后拼接到system函数中。

<?php
echo system("ping -c 2 " . $_GET['ip']);
?>

  利用上面的代码和管道符,我们可以轻松执行任意操作系统命令,现将管道符介绍如下。

# windows下管道符
|  前面语句的执行结果为后面语句的输入
|| 只执行一条语句,前面语句为真,则后一条语句不执行
&  两条语句都执行,前面语句为假不影响后面语句的执行
&& 两条语句都执行,但只有前面为真才不影响后面的语句

# linux下管道符
;  命令截断符,前面为假不影响后面语句执行
|  前面语句的执行结果为后面语句的输入
|| 同windows,只执行一条语句,前面语句为真,则后面不执行
&  同windows,两条语句都执行,前面为假不影响后面的语句
&& 同windows,两条语句都执行,但只有前面为真才不影响后面的语句

  对比windows和linux,我们发现linux下只比windows多了;截断,然后如果我们想要获取flag的话,可以这样拼接命令127.0.0.1 | cat flag

escapeshellarg和escapeshellcmd

  这两个函数本来是用于过滤字符使用的,简单理解两个函数的功能就是给参数两边加上单引号,并对我们传入的特殊字符如:引号、管道符进行转义,但仍然存在一些问题,所以这里积累一下。简单总结一下漏洞所在,escapeshellarg是用来过滤参数的,escapeshellcmd是用来过滤命令的,所以一般这两个函数会被配合使用,但一旦这样做就会出现漏洞。
  下面以一道实际的ctf例题进行分析,[BUUCTF 2018]Online Tool,这里做了简化,如下代码所示。代码中用get方式获取host参数,然后就使用了escapeshellargescapeshellcmd一起对参数做了过滤处理,此时存在问题,现分析如下。

<?php
$host = $_GET[&
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值