Moe2024
2024MoeCTF小结,挑一些题记下笔记
Web渗透测试与审计入门指北
moectf2024 web入门指北
xt
一.web是啥
互联网时代,web应用以及涉及到生活中的方方面面,与后端交互的软件呀,浏览器看到的web
网页呀。ctf中web一般涉及web网页安全,通过利用网页前后端的漏洞(代码漏洞也好,服务器
漏洞也好)获取关键数据flag,一上来首先需要大家自己搭建一个基本的网站,了解网站的基本
架构,连网站是怎么运行的都不知道何谈找漏洞呢。
二.学习方法
不懂就搜(善用ai和搜索引擎,小到软件怎么使用,大到某一个庞大的知识点,可以使用多个搜
索引擎,推荐google和www.bing),不懂就问(大雪参必备技能---脸皮厚),推荐blog网站:
先知社区,freebuf
三.学习路线
配置环境(最难最烦):你可以去搜教程看文档,在配置期间你可能会
遇到各种各种看不懂得错误,要有耐心,环境需要边学边配置,这里
简单列举好用的
1.linux操作系统需要学习(先学会简单使用shell)使用vm虚拟机装个linux发行版吧,用多了相
信你会喜欢linux
2.浏览器及其插件(hackbar,ProxySwitchyOmega,Wappalyzer)
3.常用工具(BurpSuite,PHPStudy,Antsword,dirsearch)安装使用想必你会自己搜叭
4.杂七杂八(clash,uTools,Everything)还有一些常用的网站(fofa,cmd5,站长之家)等等
路线指南:
基础知识:(目标搭建自己的第一个网站)
1.基本的网络协议(重点http)http的请求头请求体请求方法
2.编码与加解密知识,经典的base64,hash等等,需要一点基本的密码知识
可供参考的资料:https://www.cnblogs.com/ruoli-s/p/14206145.html
3.认证方法(cookie,session,jwt)
4.前端三要素(html,css,javascript)css知道就好,粗体为重点
5.后端(先从最简单的php开始)开发简单动态网站(使用phpstudy或者手动安装lamp)
6.数据库(先简单学习Mysql)能实现增删改查
7.一个趁手的脚本语言(推荐python)能够实现简单爬虫7.学会使用重要的工具,刚开始不用陷
入学工具,简单学会使用burpsuite就行
信息搜集:
知道一个网站是什么框架等等
初探漏洞:
web漏洞多到数不清,先从top10学起,以下只给部分介绍,可以从php语言来看这些漏洞是如
何产生的,又怎样修补避免呢,攻击时怎么绕过某些阻碍
1.sql注入
就是拼接sql语句实现读取数据库信息(信息泄露),篡改,甚至删除数据库信息,有多种注入方
式和利用技巧,注入类的漏洞很多但都大差不差,sql注入算是经典中的经典,学习的时候不要只
看不操作,可以找靶场玩玩
推荐靶场:sql-libs
2.php的安全问题
php使用不当会容易出现很多漏洞,==,===使用不当导致php弱类型呀啥的,而且php语言太
灵活容易被利用
文件包含,主要由函数include(),require(),include_once(),require_once()造成他们包含的
文件会被解析成php代码执行
变量覆盖,关键变量能被用户控制从而导致问题
远程代码执行(rce),比如eval()中的代码能够让用户控制(eval($_POST[‘code’]);)
等等种种
3.前端安全(xss, csrf等等)
由前端造成的漏洞
xss:用户通过html注入篡改网页前端,一般插入javascript使得别人访问时自动运行,比如评论
区啥的很多很多甚至用户名都行,只要没啥过滤,都可以让浏览器渲染执行,ctf中主要是窃取
cookie
推荐靶场:xss-libs
Csrf: 攻击者可以使得受害者发送http的请求(如果受害者的token没过期的话,嘿嘿)
4.服务端请求伪造(ssrf)
用户能使服务器发送http请求,一般我们是向服务器发请求,而ssrf是使得服务器计算机发出
http请求
5.文件上传
用户在上传文件功能的地方(头像呀什么的)上传可执行脚本获得shell(php一句话木马),在
服务器可以执行有害命令
6.其他
各种语言的反序列化,nodejs原型链污染, ssti,xxe,各种cms,组件漏洞啥的
四.练习
靶场推荐
攻防世界(有入门靶场)
Bugku
Buuctf
ctfhub
Nssctf
不会可以查看wp,一定搞清楚原理,可以学完一个漏洞就找相同类型的靶场打一打(瞎jb乱打不是
很建议)
最后建议多看书多看博客社区多了解,祝大家可以在ctf中玩的开心
Pop base mini moe
protected和public修饰的属性在序列化中是有区别的
在实例中无法通过$obj->属性名(或方法名) 来调用pravite类型的方法或属性
1 |
|
1 |
|
1 |
|
1 |
|
Note:低版本的php是可以通过public直接覆盖掉private进行绕过的,我的payload2采用了这种做法。
原先通过构造函数的方式对private修饰的属性一直过不了,出现的报错是:Uncaught Error: Function name must be a string,根本没有完成赋值,后来终于找到了这个坑点:(引用先知社区)
会发现在Threezh1的左右,也就是属性名中的类名左右存在两个空字节。所以反序列化不成功的原因就是由于序列化内容生成到网页后,空字节不会一同生成出去,导致反序列化的时候无法识别是private属性,反序列化失败。
那解决这个问题的方法就是,在传递反序列化字符串中,在类名的左右加上%00,也就是空字节对于的URL编码。
于是就有了payload1(正解)
Pop moe
1 |
|
1 |
|