南京邮电大学网络攻防平台(http://ctf.nuptsast.com/)是一个集合了WEB、MISC、密码学、PWN、逆向的一个CTF训练平台,对于初次涉及ctf小伙伴来说是非常不错的一个训练平台,这篇博客主要为大家讲解一些在ctf中的解题思路。
1.签到题
点击传送门“题目地址”之后可以看到页面显示“key在哪里?”,此时你也许非常好奇,你正在找key,但是它却问“key在哪里?"。那么此时你是否会想到这个也是一个web页面,也是由html代码编写在服务器上运行之后显示的呢?而浏览器自带“查看源文件”功能(点击鼠标右键——查看源文件),不妨看看“源代码”:
你会惊奇的发现flag的存在!
题目考察点: WEB网页源代码中信息的隐藏 HTML中可以隐藏信息的方法(可以用注释、head头部、超链接等等)
2、MD5 COllision
源码:
(此处@的作用是防止当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 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本地文件包含的掌握
后期待续!