南京邮电大学网络攻防平台WriteUP——WEB(上)

版权声明:严禁将博客中涉及到的技术用于恶意破坏,如果造成法律责任,博主概不负责! https://blog.csdn.net/Fly_hps/article/details/79384591

前言

        南京邮电大学网络攻防平台(http://ctf.nuptsast.com/)是一个集合了WEB、MISC、密码学、PWN、逆向的一个CTF训练平台,对于初次涉及ctf小伙伴来说是非常不错的一个训练平台,这篇博客主要为大家讲解一些在ctf中的解题思路。

WEB部分

1.签到题

      点击传送门“题目地址”之后可以看到页面显示“key在哪里?”,此时你也许非常好奇,你正在找key,但是它却问“key在哪里?"。那么此时你是否会想到这个也是一个web页面,也是由html代码编写在服务器上运行之后显示的呢?而浏览器自带“查看源文件”功能(点击鼠标右键——查看源文件),不妨看看“源代码”:


你会惊奇的发现flag的存在!

题目考察点:   WEB网页源代码中信息的隐藏      HTML中可以隐藏信息的方法(可以用注释、head头部、超链接等等)

2、MD5  COllision

源码:

<?php
$md51 = md5('QNKCDZO');           将'QNKCDZO'经过md5加密之后的结果赋值给变量$md51
$a = @$_GET['a'];                 以get的方式从用户端获取一个变量a,并且将其值赋值给变量$a(此处@的作用是防止当a的值为NULL是弹出警告提示)
$md52 = @md5($a);                 将变量$a经过md5加密之后的结果赋值给变量$md52          
if(isset($a)){                    判断变量$a的值是否为NULL,如过不为空,则继续执行花括号内的代码,否则执行else之后的代码语句
if ($a != 'QNKCDZO' && $md51 == $md52) {    判断条件:要求变量$a的值不为“QNKCDZO”,同时要满足$md51==$md52的值
    echo "nctf{*****************}";         输出flag
} else {
    echo "false!!!";              当if判断条件不成立时在页面输出“false!!!”
}}
else{echo "please input a";}      当变量$a的值为NULL时输出“please  input a”
?>

代码解释: 请看代码右侧解释!

思路:通过阅读代码,不难发现,要想得到flag,那么就必须满足“变量$a的值不为空、$a的值不为‘QNKCDZO’、$md51==$md52”。‘QNKCDZO’进过MD5加密之后的值为“0E830400451993494058024219903391”。

此时注意到的是此处比较的时候使用的是等于“==”只是比较最后类型转换之后的数值是否相同,不要求数据类型与数值完全一致(PHP中的全等“===”才要求这样的条件),同时如果使用“!=”或者“==”来对哈希值比较时,它会把每一个以“0e”开头的哈希值都解释为0,所以如果我们找到一个经过md5加密之后以“0e”开头的字符串并且以get的形式提交即可获得flag!

以“0e”开头的字符串汇总:http://www.219.me/posts/2884.html


随机找一个,比如“s878926199a”,以get形式提交即可获得flag:


题目考察点: MD5碰撞  PHP中的比较运算符的特性

3、签到2

点击传送门之后看到这样的提示内容:


之后根据提示输入“zhimakaimen”并点击“开门”结果无任何响应,之后查看一下源代码看看:


发现允许输入的最大字符串的长度为10,而“zhimakaimen”长度为11,所以要想办法修改这一个限制,可以想到的是使用burpsuite抓包进行修改、使用浏览器插件firebug来实现,此处演示是哟burpsuite抓改包!

在火狐浏览器中设置网络代理——》开启burpsuite的监听模式——》在浏览器中填写“zhimakaimen”并点击“开门”——》在burpsuite中进行改包:


题目考察点:跨越网页限制   

4、这题不是WEB

d点击传送门“题目地址”,之后可以看到网页显示如下:


思路:发现有一个gif格式的动态图,而且题目已经提示了“这题不是WEB”所以可以联想到是否与这个图片有关,不妨下载下来看看!

之后直接扔进notepad++里面看看是否有隐藏的信息,同时想到我们的flag格式为“nctf{}”,所以不妨查看一下是否有这样的关键字:


题目考察点:图片信息隐藏

5、层层递进

打开传送门“题目地址”之后显示一个网页


发现没有以前的那么常规,同时url地址栏也不会存在注入的特点,所以只好查看源代码看看了:


发现有两个链接,尝试一下此处的链接,点击第一个SO.html试试


发现没有啥可以使用的信息,继续查看源代码:


突然发现还有SO.html ,同时结合题目名“层层递进”,可以发现有关系继续点击链接、查看源代码,一直进行,直到最后看到下面的页面为止:


此时点击404.html查看明细,并且查看源代码:


发现等待已久的flag格式!

题目考察点:源代码细节阅读   题目提示  

6、AAencode

点击传送门“题目地址”,打开网页可以看到:


思路:注意到提示点“JavaScript  aaencode”,所以可以百度一下看看究竟是什么东东:


aaencode把JS转化为颜文字表情符号工具地址:

打开链接:http://utf-8.jp/public/aaencode.html

之后点击右下角的“eval”尝试获取具体的内容,但是现实空白!所以要想想其他的办法,之后了解到浏览器的控制台可以输出加密之后颜文字的内容,所以使用浏览器console端跑一次:


此处第一次跑的时候发现提示警告没有定义ω゚ノ所以不妨初始化一个,之后提供给程序调用即可!

题目考察点:根据题目所给提示进行信息收集并使用信息

7、单身二十年

点击传送门“题目地址”


点击链接:


无果,返回上一个网页,之后查看源代码:


点击此链接


得到最后的flag!

题目考察点:  信息获取  源代码

8、你从哪里来

点击传送门“题目地址


根据提示需要使用burpsuite抓包,并且修改referer头部为 www.google.com


之后即可得到flag(google退出中国市场,这一步可能实现上会有问题,建议试试外网)

题目考察点:对http消息头部内容的了解

9、PHP decode

源码:

<?php
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 decode"可以知晓需要进行PHP解码!

在最后一句调用功能函数ClsI对字符串“+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==”进行操作!首先将其进行base64解密,之后将其结果使用gzinflate进行解压操作,最后使用一个for循环将字符串中的字符码全部前移一位,之后返回结果!

此处要想获得flag可以在本地使用phpstudy来搭建PHP开发环境,之后将eval改为echo,并且在浏览器中运行该PHP文件即可:


题目考察点:对PHP代码的理解能力 变通能力

10、文件包含

根据提示是文件包含,且是本地文件包含,所以直接在URL后添加?file=php://filter/read=convert.base64-encode/resource=index.php,读取到base64加密的index.php文件 


base64解密得到flag:nctf{edulcni_elif_lacol_si_siht}

题目考察点:对PHP本地文件包含的掌握

后期待续!

展开阅读全文

没有更多推荐了,返回首页