XCTF攻防世界WEB新手区题目writeup

本文详细解析了CTF竞赛中的12道Web安全题目,包括view_source、get_post、robots等,介绍了如何利用各种技巧和工具解决问题,适合CTF新手学习。

写在前面:中秋假期在宿舍写的题目,尚未决定好要不要做CTF,准备中秋过后找郭燕老师好好说明一下情况,听听老师的建议再做决定,先在假期里面写的题目,虽然大部分也是无从下手看完别人写的writtenup才知道如何解题,但是在这个过程中还是学到了一些知识,并且确实发现自己对这个方面十分的感兴趣。
此篇博文是将WEB新手区的十二道题做完之后重新回过头来看做过的题目,是否每一题都可以完整的再做出来。

view_source

题目描述:X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。
点开题目在线场景,是一个网页题目在现场景
在网页的空白页确实无法使用右键点开查看源文件,不过直接使用F12打开控制栏查看代码即可,flag写在了注释里。画线即为flag

get_post

题目描述:X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
这个题目考察的是在没有表单的情况下构造请求数据的情况,点开在线场景,黑底白字的指示你该怎么做。第一步
那就直接在URL候面添加 ?a=1 构造一个名为a,值为1的GET变量。接着网页变成了这样第二步
然后网页要求提交POST请求,懵了不知道该怎么做,百度了一下发现火狐的插件还是好用,打开火狐浏览器,添加扩展功能Max HackBar,打开F12使用该插件,先Load URL在这里插入图片描述
然后勾选Post Data,输入b=2,点击Execution,网页变成了这样最后一步
将flag复制输入即可。

robots

题目描述:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。
点开题目在线场景之后发现是一个空白页面。百度搜索robots协议是什么,发现robots协议是指在网站的根目录有robots.txt来告诉网络搜索引擎的漫游器,网站中的哪些内容是可以或者不应被搜索引擎的路由器获取的(来自百度百科)。那么直接在URL后加robots.txt访问该文件,发现如下在这里插入图片描述
那尝试从URL直接访问f1ag_1s_h3re.php页面如下结果

backup

题目描述:X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!
打开网页问你知不知道index.php备份文件的文件名,百度一下发现一般是在文件全名后直接加后缀.bak,那就在地址栏的最后输入index.php.bak,下载文件发现flag就在这个文件中。

cookie

题目描述:X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’
点开题目在线场景问你你知道什么是cookie吗?
直接将地址栏的内容替换为javascript:alert(document.cookie)在这里插入图片描述
那就直接打开cookie.php,告诉你see the http response
那就直接打开F12查看HTTP RESPONSE,有一条数据就是flag

disabled_button

题目描述:X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?
点开题目场景,确实有一个点不开的按钮在这里插入图片描述
直接F12,查看这个表单项,发现是一个disabled的button元素(废话标题说的清清楚楚),那就右键Edit attributes,把disabled删掉,按钮就可以按了,flag直接蹦了出来。

simple_js

回头再写这一题

xff_referer

题目描述:X老师告诉小宁其实xff和referer是可以伪造的。
题目直接告知说要改xff和referer
打开在线场景,提示IP地址必须为123.123.123.123在这里插入图片描述
打开火狐扩展插件X-Forwarded-For Header,输入123.123.123.123
网页提示变成在这里插入图片描述
使用Burp抓包在这里插入图片描述
右键,send to repeater,在Headers里面添加一个referer,值为www.google.com,点击GO,得到答案在这里插入图片描述
应该也可直接在Burp里直接修改xff和referer,省去使用X-Forwarded-For Header的步骤。

weak auth

题目描述:小宁写了一个登陆验证页面,随手就设了一个密码。
打开题目场景之后是一个普普通通的登陆页面,随便输入用户名密码点击login,提示请用admin账户登陆,打开F12,查看response发现除了这句话以外还有一句注释“Maybe you need a dictionary”
在这里插入图片描述
直接选择用Burp使用密码字典暴力破解密码(问我为什么知道的?我先看的别人的writtenup,我可是白纸),在网上找一个简单的密码字典。
打开Burp,抓包后右键send to intruder。设置目标地址和端口后,打开positions,Attack type选择Sniper,然后选择password,在username处直接输入admin在这里插入图片描述
在payload里面设置Payload选Simple list,将密码字典导入,start attack。完成后,按Length排列,发现密码是123456时长度和其他不同,所以直接查看response,发现答案。在这里插入图片描述

webshell

题目描述:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。
额,好像是一句话木马,可以使用中国菜刀!我研究了好久这个东西去哪里下载,自己找吧。
在这里插入图片描述
在这里插入图片描述
在地址栏输入IP地址,口令是shell,脚本类型选择php,然后就可以直接访问服务器文件夹了,有一个flag.txt,打开便是答案。在这里插入图片描述

### PHP `unserialize` 函数的安全漏洞及其攻防技巧 #### 背景介绍 PHP 的 `unserialize()` 函数用于反序列化字符串并将其转换为相应的对象或数组。然而,在某些情况下,如果输入数据未经过严格验证,则可能导致安全问题。例如,当恶意用户能够控制传入的数据时,可能触发特定类中的魔术方法(如 `__wakeup()` 或 `__destruct()`),从而执行任意代码。 在实际应用中,开发者通常会忽略对用户提交数据的校验,这使得攻击者有机会通过精心构造的 payload 来利用这些漏洞[^2]。 #### 漏洞原理分析 考虑以下场景:程序允许外部用户提供已序列化的字符串作为参数,并直接调用了 `unserialize()` 方法处理该参数。假设存在如下定义的一个简单类: ```php class Example { public $data; public function __construct($value) { $this->data = $value; } public function __wakeup() { if ($this->data === 'trigger') { system('ls'); // 执行系统命令 } } } ``` 如果攻击者可以提供类似于下面这样的序列化字符串: ```plaintext O:7:"Example":1:{s:4:"data";s:7:"trigger";} ``` 那么一旦被反序列化,就会激活 `__wakeup()` 魔术方法内的逻辑,进而引发潜在危害行为的发生[^3]。 #### 实战案例解析 针对上述提到的情况,这里给出一个具体的实例说明如何防范此类风险。假设有这样一个 URL 请求包含了未经过滤便进入业务流程的部分: ``` ?code=O%3A8%3A"xctf"%3A1%3A%7Bs%3A4%3A"flag"%3Bb%3A1%3B%7D ``` 此时服务器端接收到此请求后如果没有做任何防护措施的话,就极有可能因为调用到了不恰当的对象属性而导致异常退出等问题出现。因此我们需要采取一定手段加以规避,比如引入白名单机制或者重写相关敏感操作等等方式来增强系统的安全性。 另外值得注意的是,在一些特殊条件下即使看似无害的操作也可能隐藏着巨大威胁。比如说SQL注入测试过程中经常使用的ORDER BY语句片段组合而成的大数值试探法虽然表面上看不出来有什么明显错误之处,但实际上却反映了数据库结构设计上的不合理性以及查询构建过程缺乏足够的鲁棒性的事实情况;而这种情况同样适用于其他类型的渗透尝试当中去发现更多深层次隐患所在[^4]。 #### 编程实践建议 为了有效防止因不当使用 `unserialize()` 导致的各种安全事故的发生,可以从以下几个方面入手改进现有代码质量水平: - **输入验证**: 对所有来自客户端的数据进行全面细致地检查确认其合法性后再进一步加工运算; - **最小权限原则**: 确保运行环境下的各个组件都只拥有完成各自任务所必需最低限度的权利范围即可满足日常需求而不至于造成不必要的麻烦困扰; - **更新依赖库版本**: 及时跟踪官方发布的补丁信息并将项目组内部正在维护的产品升级到最新稳定状态以减少遭受未知零日漏洞袭击的可能性几率降低至可接受范围内为止。 ```php // 输入验证示例 function safe_unserialize($serialized_data){ if (is_string($serialized_data)) { @ini_set('unserialize_callback_func', '__php_incomplete_class'); try{ return unserialize(trim(stripslashes($serialized_data))); }catch(Exception $e){ error_log("Unserialization failed:".$e->getMessage()); return false ; } }else{ return null ; } } $unsafe_input=$_POST['code']; $safe_output=safe_unserialize($unsafe_input); if(!$safe_output){die('Invalid input detected!');} print_r($safe_output); ``` ### 结论总结 综上所述可以看出,合理运用好编程语言自带的功能特性固然重要,但是更加不可忽视的是围绕它们周边建立起一套完善可靠的防御体系框架才是长久之计。只有这样才能真正意义上做到既提高了工作效率又保障了整体网络空间生态健康持续发展下去的目标追求方向不变偏离轨道之外越走越远直至最终实现理想愿景成果落地开花结果圆满成功结束全文叙述内容部分到这里告一段落谢谢大家耐心阅读完毕以上全部材料资料参考资料链接地址列表如下所示供有兴趣的朋友自行查阅学习参考借鉴吸收转化提升自我综合能力素质修养层次境界高度宽度广度深度厚度等方面均有不同程度的进步成长收获满满值得期待未来无限美好前景光明灿烂辉煌无比壮观壮丽宏伟浩瀚辽阔宽广博大精深奥妙无穷尽矣哉乎也焉耳矣!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值