纪实:校内线上训练——WEB

近日,学校俱乐部举办了有关网安的比赛,不去不知道,真的是一句“我好菜”走天下……在此就是记录一下那些我做过的和没做上的题,其实看了一下别人的wp总是就差临门一脚,心情很糟 v_v 

接下来会按照顺序呢会连续记录PWN、REVERSE、MISC、WEB、CRYPTO的……

 

WEB部分只说几道题,原因是有几道感觉过于简单,所以就略过了。

Trick trick

  Hint:一个反序列化的小trick

index.php源码:

<?php
error_reporting(0);
include "class.php";
highlight_file(__FILE__);


if (isset($_GET['last'])) {
    $last=$GET['last'];
    if (!stristr($last,"flag")) {
        unserialize($last);
        echo "<br>"."you find it";
        // class is getF:public key
        // must key = "flag"
    }
}

  这道题其实读完代码后,就会发现这道题的矛盾点就在于:我们如果想获得flag,就必须创建一个getF的类,猜想会在创造类中会有打印信息的功能。然而创建getF这样的类需要一个key参数,如果想打印flag有关的消息,key就必须等于“flag”,恰恰就是这里!在执行反序列化之前需要过得一关就是:

!stristr($last,"flag")

  该语句的意思就是查找$last中是否存在flag,所以我们不仅要key=“flag”的同时还要绕过sristr函数。

  这道题主要考察的就是序列化字符串的表示格式

a    -->array     --> a:1:{"1","abc"}
b    -->boolean   --> b:0;
d    -->double    --> d:1.2323;
i    -->integer   --> i:3;
s/S  -->string,S可以有16进制字符    --> s:3:"abc"; 或者 S:3:"\61bc"
O    -->class     --> O:1:"A":3:{s:4:"\00A\00a";N;s:4:"\00*\00b";N;s:1:"c";s:5:"hello";}
N    -->null      --> N;
r    -->对象引用   --> r:1 (数字为所引用的对象在序列化字符串中第一次出现的位置)
R    -->指针引用   --> R:1 (会修改指针指向的内容)

  这里借鉴的是大佬的手记--->墨雨琪师傅的博客

  所以说这里为了不修改最终答案,所以可以选择把本应该的:

0:4:"getF":1:{s:3:"key";s:4:"flag"}

  这两面的s类型转换成S类型,同时把其中flag任意几个字符变成16进制即可:

0:4:"getF":1:{s:3:"key";S:4:"\66lag"}

  这里要吐槽一句,其实这道题,题目就是个hint不是么,hhhhhh……

 

 

 

EasySQL

  Hint:与时俱进(mysql都8.0了)

 

php源码:

<?php
//flag in table flag
highlight_file(__FILE__);
$conn = mysqli_connect('mysql', 'test', 'test', 'test');
if (!$conn) {
    die('Could not connect: ' . mysqli_error($conn));
}
if (isset($_GET['id'])) {
    $id = $_GET['id'];
    if (stristr($id, 'select') === false) {
        $sql = "select * from news where id=$id";
        $result = mysqli_query($conn, $sql);
        if ($result) {
            $row = mysqli_fetch_array($result);
            echo "<h1>" . $row['title'] . "</h1><br>";
            echo "<h3>" . $row['content'] . "</h3>";
        }
    }
}

  这道题是屏蔽了“select”关键词,结合hint,我们就可以选用table语法来显示:

  更多详细介绍请戳--->https://dev.mysql.com/doc/refman/8.0/en/table.html

  知道了这一点后就比较简单了:直接payload:

id=-1 union table flag limit 1

  这样就能直接拿到flag了!

 

   

posted @ 2020-08-15 14:51  爱做梦的7ixia  阅读(118)  评论(0)    收藏  举报