纪实:校内线上训练——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了!

浙公网安备 33010602011771号