WEB攻防【3】——PHP特性/缺陷对比函数/CTF考点/CMS审计实例

ASP:源码结构、搭建组合造成的安全漏洞

PHP:经常是由于他的框架造成的漏洞

Java:就是一些框架、组件的漏洞

#知识点:


1、过滤函数缺陷绕过

2、CTF考点与代码审计


#详细点:

PHP在过滤相关漏洞和攻击的时候,为了安全防护,会通过内置一些函数来实现检测和过滤

这些内置函数在使用或使用不当 也会存在一些绕过的缺陷

1、==与===

一个等于 = 赋值

两个等于 == 对比 (不会对比类型)x=1与x=1.0 没有区别 即字符串或数字都没关系

三个等于 ===  对比(类型也会对比)x=1与x=1.0 有区别 整型、浮点型、字符串等都有区别
2、md5

案例:输出flag的条件:

1)保证name、password相等 

2)保证name、password的md5值相等


3、intval
4、strpos


5、in_array
6、preg_match

7、str_replace

1、==与===

=  赋值

==  不会对比类型

===  类型也会对比

一个等号  = 赋值

=赋值 ==不会对比类型===类型也会对比
$flag='xiaodi ai chi xigua!';

== 是弱类型对比

<?php
header("Content-Type:text/html;charset=utf-8");

sflag='xiaodi ai chi xigua!';
== ===缺陷绕过 == 弱类型对比 ===还会比较类型$a=1;
if($a==$ GET['x']){
echo $flag;

}

1.1 ==与===


==:弱类型对比(不考虑数据类型),甚至可以理解为只要右边变量的前几个字符或数字等于左边的变量,==就成立,且不受符号影响。===:强类型对比(考虑数据类型),也就是说左右两边的值要完全一样才会满足===。


1.2 md5


使用md5()和==进行变量比较
md5 0e漏洞:就是说在使用md5()和==进行变量比较的时候,只要左右两边的字符串经过md5()加密后,都是以0e开头的字符串,那么左右两边将会相等。


php甚至会有oe漏洞,只有两边的变量(整型)以oe开头,php也会判断左右两边相等。

当使用md5()和===进行变量对比的时候, 使用数组可以绕过md5()函数的检测。


1.3 intval


函数作用:将变量的值默认转化为十进制。intval
应用地方:比如sql注入时,通常使用and 1=1来判断注入类型是数字型还是字符型,后端使用intval()函数将会使and 1=1失效。

缺陷:可以使用==的特性,如+16、16.0;或者进制转换后,左右变量也相等。intval绕过

1.4 strpos


函数语法:第一个参数为要搜索的字符串,第二个参数为要查找的子串,第三个参数为从哪儿开始查找。

%oa(换行)不会影响搜索的子串。

过滤字符串起始不能为0,起始为0,那么函数的结果就是在第0位置找到了要匹配的字符。

1.5 in_array


语法:


不设置strict参数,就相当于==进行判断。

1.6 preg_match


漏洞:preg_match只能处理字符串,如果不按规定传一个字符串,通常传一个数组进入,就会使preg_match失效,从而绕过该函数的检测。


1.7 str_replace


作用:替换字符串中的一些字符(区分大小写)。

漏洞:无法迭代过滤,只过滤一次


CTFshow演示
intval函数是取整,同时第二个参数为0表示通过检测第一个参数的格式来决定使用的进制。这里我们要做的是不输入4476,但是要拿到flag。可直接在4476后面加小数或者使用进制转换。

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值