《CTF特训营》——利用特性实现的攻击

本文深入探讨了利用PHP特性如弱类型、反序列化、截断漏洞和伪协议进行攻击的方法,同时介绍了Windows系统特性,如短文件名和文件上传时的安全风险。通过案例分析,揭示了如何利用环境特性绕过防护措施,为安全防护提供警示。
摘要由CSDN通过智能技术生成

目录

一、PHP的特性

1.弱类型

(1)简介

(2)实例1

(3)实例2

2.PHP反序列化漏洞

实例1:

3.截断漏洞

4.伪协议

5.变量覆盖

(1)函数使用不当

A.extract函数

B.parse_str函数

C.import_request_variables函数

(2)配置不当

(3)代码逻辑漏洞

6.防护绕过

二、windows系统特性

1.短文件名

2.文件上传


在不同的环境之下,相同的代码可能带来不一样的实现效果,对于开发人员来说,不同的环境应该写出兼容性更好的代码,对于安全人员来说,利用环境,也可以让一行普通的语句变成漏洞。

一、PHP的特性

1.弱类型

(1)简介

在PHP中有一些相等的值:

在PHP中,比较两个值是否相等,可以用“==”或者“===”两种符号,前者会在比较的时候自动进行类型转换,而不是改变原来的值,所以存在漏洞的位置往往是“==”,其中的一个常见错误用法就是:

这个时候,如果input变量的值为labc,则比较的时候labc会被转换为1,if语句的条件满足,进而造成其他的漏洞,另一个常见的场景是在运用函数的时候,参数和返回值经过了类型转换造成漏洞。

(2)实例1

如何才能满足下面这样一个if判断语句?

 需要使两个变量不相等而MD5值相等。这样的思路可以通过MD5碰撞的方法来解决。对于PHP来讲,MD5的返回值是一个32位的字符串,若这个字符串以“0e”开头,类型转换机制将会把它识别为一个科学计数法表示的数字“0”,下面给出两个MD5以0e开头的字符串

aabg7XSs=0e087386482136013740957780965295

aabC9Rqs=0e041022518165728065344349536299

提交这两个字符串即可绕过

(3)实例2

如果上面的“==”变成了“===”就不能成功了,但是仍然可以利用PHP的特性来进行,可以在URL栏中提交a[]=1&b=[]=2成功绕过,因为当我们令MD5函数的参数为一个数组的时候,函数会报错,并返回NULL值,虽然函数的参数时两个不同的数组,但是返回的值都是NULL。

同样是在程序返回值中容易判断错误的函数还有很多,如:strpos,见PHP手册

 这也是一种经常能见到的写法,当str1在str2开头时,函数的返回值是0,而0 == false是成立的,这就会造成开发者逻辑之蛙的结果。

2.PHP反序列化漏洞

PHP提供的serialize和unserialize函数将任意类型的数据转换成string类型或者从string类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值