XCTF攻防世界WEB新手练习篇

作者在攻防世界做web方向题目,记录了多道题的解题过程,如get_post题按提示两步得flag,robots题用御剑扫描找隐藏文件等。还介绍了HTTP协议的多种方法,以及X-Forwarded-For和Referer等HTTP拓展头部知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做了很多题,web方向:

 

攻防世界web

来到齐学长推荐的攻防世界:https://adworld.xctf.org.cn/task

第一道题略过;

2.get_post

比较简单,按照提示两步即可得到flag

HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的不同操作方式,具体介绍如下:

  • GET:向特定的资源发出请求。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
  • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
  • HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除Request-URI所标识的资源。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

 

3.robots

这道题我是用御剑扫描:

发现隐藏文件,构造url即可:

 

4.backup

打开即可得到flag:

5.cookie

同上,先构造url,F12查看网络:

6.

 

 

7.simple js

 

随便输入,查看源码,在最底下发现一段16进制编码,转化为字符,发现为一段数字,再次转化为字符串,通过源码分析得知即为flag的内容.

8.xff_referer

有关X-Forwarded-For和Referer的知识

  • X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。
  • HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。
  • xff 是http的拓展头部,作用是使Web服务器获取访问用户的IP真实地址(可伪造)。由于很多用户通过代理服务器进行访问,服务器只能获取代理服务器的IP地址,而xff的作用在于记录用户的真实IP,以及代理服务器的IP。
  • 格式为:X-Forwarded-For: 本机IP, 代理1IP, 代理2IP, 代理2IP
  • referer 是http的拓展头部,作用是记录当前请求页面的来源页面的地址。服务器使用referer确认访问来源,如果referer内容不符合要求,服务器可以拦截或者重定向请求。

通过burp截包然后添加X-Forwarded-For: 123.123.123.123与Referer: https://www.google.com

得到flag。

9.weak_auth

burpsuite爆破即可,我burpsuite软件嗝屁了,搁这儿耽误我半小时了。。。

10.webshell

中国菜刀打开即可。

 

有道:文档:Linux.note
链接:http://note.youdao.com/noteshare?id=a35c6eb1230fefee2b651368688c746c

执笔至此,还有许多作业没有完成。

攻防世界的杂项做了二十多道有点疲劳,博客又懒得写。。。国庆期间我要进阶啊!!

 

 

### 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、付费专栏及课程。

余额充值