天融信阿尔法实验室 李喆

有人说php是世界上最好的语言,这可能是对开发人员来说,确实有这方面的特点,因为它开发起来不像其他语言那样麻烦,就比如:弱类型,它不需要像java等语言那样明确定义数据类型。这给开发带来了很大的便利,所有的数据类型都可以用$xx来定义,而不需要int i,string a,fload b等等这样去定义它。这样确实很方便,因为php帮助你判断了数据类型,比如整形int ,你只要$a=1;那这个1就是整形,$a=’abc’那这个abc就会被php判断为字符串类型。但是弱类型方便是方便,但是带来的安全问题也是巨大的,很多的php安全漏洞都是因为它带来的。

本文是给做代码审计漏洞挖掘和渗透测试人员总结的一个思路,有不对的地方请多多指出。

这里主要是介绍如何通过利用弱类型来做php代码审计的漏洞挖掘。漏洞挖掘关键点肯定在变量上,因为变量可以承接外来参数和内部数据的交互工作,这是漏洞的起因,也是必要条件。如果外来参数是恶意代码,同时再因为使用了弱类型的函数或者比较运算符导致了恶意参数的数据进入了程序里比如数据库,就可能引发想象不到的破坏力。这里我介绍了三种可以导致恶意数据进入判断体里的函数和比较运算符,他们有共同的特点,就是和数据比较,然后把外来变量做自动类型转换,如果外来变量是恶意变量,利用一定的方法就可以绕过你想绕过的地方比如判断if条件,让恶意变量进入到条件体内,恶意变量如果在判断体内被代入到了数据库的增删改查操作中就可以引发sql注入等漏洞问题。

01第一个要介绍的是 is_numeric,它的功能是,判断参数是否为数字或者数字字符串,如果是则返回true,假返回false,它的弱类型问题是他支持十六进制0x格式,如何引发的安全问题让我们继续观看。

安全问题描述:is_numeric在做判断时候,如果攻击者把payload改成二进制0x..,is_numeric会先对十六进制做类型判断,十六进制被判断为数字型,为真,就进入了条件语句,如果再把这个代入进入sql语句进入mysql数据库,mysql数据库会对hex进行解析成字符串存入到数据库中,如果这个字段再被取出来二次利用,就可能因为二次注入漏洞.比如这样:

if(is_numeric($_GET['num']))

{

echo $_GET['num'];

echo “”;

//假设这个插入进了mysql数据库,mysql数据库就会把十六进制转换成了字符串,这里为了方便用 Hex2String 函数代替

echo Hex2String($_GET['num']);

//输入http://127.0.01/equal.php?num=0x39393939393939393939393920756e696f6e20616c6c202873656c656374202748656c6c6f21212729

// 输出0x39393939393939393939393920756e696f6e20616c6c202873656c656374202748656c6c6f2121272

//输出9999999999999 union all (select ‘Hello!!’)

}

function Hex2String($hex){

$string=”;

for ($i=0; $i < strlen($hex)-1; $i+=2){

$string .= chr(hexdec($hex[$i].$hex[$i+1]));

}

return $string;

}

可以看到,数据库存入的是 9999999999999 union all (select ‘Hello!!’) ,如果被取出来再输出没做过滤就会引发二次注入

防御方法:用intval函数获取变量整数值,对从数据库取出变量做过滤

上面的不理解,可以看一个案例分析:

这里有个例子:

图1.1

问题出现在if (!isset($_POST['id'], $_POST['vote']) || !is_numeric($_POST['id'])) 如果能绕过is_numeric,就可以执行mysql_query(“INSERT INTO vote VALUES ({$id}, {$vote}, ‘{$login}’)”); 注入sql语句。

999999999999 union all \(select ‘Hello!!’\)

转成 hex=0x39393939393939393939393920756e696f6e20616c6c202873656c656374202748656c6c6f21212729

我们提交的参数:

vote=1&submit=&id=0x39393939393939393939393920756e696f6e20616c6c202873656c656374202748656c6c6f21212729

图1.2

我们可以清楚的在图片里看到,我们插入的Hello!在其他查询位置被显示了出来,引发了二次注入漏洞问题。

02 第二个介绍的是比较运算符的安全隐患,比如 ==,!= ,同时还会介绍他们和恒等式和=== ,!==的区别和安全问题

函数功能:

==和!=是比较运算符号 不会检查条件式的表达式的类型

安全问题描述:php是弱类型,在做匹配和比较时候,会根据匹配的类型做类型转换,如果后面是整形,如$a==1,因为后面的1是整形,那前面gpc传进来就会转换成整形,转换规则是前面的数字不变后面字母被当成字符型舍去,也就是1a会变成1,判断为真进入判断体;如果这样$a==”1″,那么后面的就是字符串1,如果gpc传进来1a会发现为假,因为传进来的1a做类型转换成字符串后就是1a,字符串1a和字符串1不想等,所以为假,这时候要改成1才能进入判断体内;同样在进行加减乘除比较运算判断时候也会做自动类型转换,如果跟整形比较,1a会转换成1,跟字符串比较,a1就会转换成字符串a1,其他类型也一样。

如果你觉得这样很绕看不懂,那就简单说,如果和字符串做比较,就会转换成字符串,如果和整形做比较,就会自动转换成整形,只不过整形自动转换的时候php就是用的intval 函数导致1a为1。intval函数可以自查下,大致如:intval(“a”)=0; intval(12.3223)=12; intval(“12abc”)=12;

比如:

$a = $_GET['a'];

if ($a==1)

{

echo ‘vul->’.$a;

}

同样!=也会有这个问题,换成2就可以进到判断体内

$a = $_GET['a'];

if ($a!=1)

{

echo ‘vul->’.$a;

}

防范方法:用===和!==来做判断,他们是恒等计算符, 同时检查表达式的值与类型

跟数字有关的运算都可能引起弱类型漏洞,比如下面这个运算

但是这样也不完全可以,比如加减乘除运算符也会做类型转换

假如这样:

$a = $_GET['a'];

$b = $_GET['b'];

if($a+$b===2)

{

echo “vul->”.$a.””.$b;

}

所以最安全的防范是对gpc获取数字型的参数值进行intval强制类型转换或者过滤,再做判断

$a = intval($_GET['a']);

$b = intval($_GET['b']);

if($a+$b===2)

{

echo “vul->”.$a.””.$b;

}

03 第三个要就介绍的是in_array()函数

函数功能:判断一个值是否在数组中存在

安全问题描述:这个函数的弱类型问题是,判断的值在比较之前会做类型转换,同样是弱类型问题,比如in_array($_GET['id'],array(1,2,3,4,5)),如果我们传入 id=1’ union select… ,判断就会为真,因为id被转换成1,这时候假如我们再把$_GET['id']拼接到数据库语句中,就会引起sql注入漏 洞。

if(in_array($_GET['id'],array(1,2,3,4,5)))

{

echo $_GET['id'];

//输入http://127.0.01/equal.php?id=1′id

//输出: 1′id

}

防范方法:外来变量要做过滤,或者强制类型转换

php弱类型漏洞,php代码审计之弱类型引发的灾难相关推荐

  1. FTP匿名登录或弱口令漏洞及服务加固

    漏洞描述 FTP 弱口令或匿名登录漏洞,一般指使用 FTP 的用户启用了匿名登录功能,或系统口令的长度太短.复杂度不够.仅包含数字.或仅包含字母等,容易被黑客攻击,发生恶意文件上传或更严重的入侵行为. ...

  2. kingdee漏洞金蝶云星空存在弱口令漏洞

    kingdee漏洞简介 金蝶云星是基于云计算.大数据.社交.人工智能.物联网等前沿技术研发的新一代战略性企业管理软件.金蝶云星空存在弱口令漏洞,攻击者利用该漏洞登录系统后台,获取敏感信息. CNNVD ...

  3. Weblogic漏洞 - Weblogic 弱口令漏洞

    文章目录 Weblogic简介 Weblogic特征 Weblogic历史漏洞 Weblogic历史漏洞发现 获取资产 批量扫描脚本 Weblogic漏洞环境搭建 漏洞发现 Weblogic历史漏洞利 ...

  4. SNMP弱口令漏洞的使用

    参考地址: 地址:https://www.cnblogs.com/-wenli/p/9571057.html https://www.cnblogs.com/Fluorescence-tjy/p/10 ...

  5. [转]c# 泛类型(泛型) 以及强类型与弱类型的 理解及优化

    [泛型的概念] (1)没有泛型的时候,所有的对象都是以object为基础,如果要使用时必须进行强制类型转换,如果对于值类型,则会导致不断拆箱装箱的过程,对系统消耗很大. (2)使用泛型时不需要通过ob ...

  6. python程序设计语言是什么类型的语言-Python 是弱类型的语言 强类型和弱类型的语言区别...

    Python 是弱类型的语言 在强类型的编程语言中,定义变量时要指明变量的类型,而且赋值的数据也必须是相同类型的,C语言.C++.Java 是强类型语言的代表. 下面我们以 C++ 为例来演示强类型语 ...

  7. 服务器弱口令修改,Tomcat服务器弱口令漏洞攻击实验

    1.在XP系统上搭建Tomcat服务器平台: 2.在另一台虚拟机上利用弱口令漏洞上传木马程序,使得XP系统中木马. 实验步骤 一.搭建Tomcat服务器平台 1.安装JAVAJDK 环境变量的配置:( ...

  8. cmd 220 ftp 远程主机关闭连接_针对一些弱口令漏洞的解决办法——设置远程管理登录的配置...

    弱口令漏洞描述 弱口令的漏洞的存在很大原因上是因为使用者的不良使用习惯导致的,当然也有一些是因为系统或者应用启用时未设置可用账户的密码信息而使用默认的配置:这就给攻击者毫不费力攻进信息系统的机会了. ...

  9. 存在弱口令漏洞_【安全漏洞通告】secnet安网的AC集中管理平台存在弱口令漏洞...

    安全漏洞通告 INFORMATION secnet安网的AC集中管理平台存在弱口令漏洞 01 漏洞背景 广州安网通信技术有限公司(简称"安网通信")是一家提供网络安全设备,网络通讯 ...

最新文章

  1. Lightoj 1281 New Traffic System (记忆化Dijkstra)
  2. 传输层端口号的范围是多少?被分为哪两部分_青岛家用电器检测费用多少
  3. 腾讯觅影:AI+医疗不光能诊断癌症,还可以很公益
  4. k8s pod内部容器_第三章 pod:运行于kubernetes中的容器
  5. SAP License:SAP FI/CO—Questions and Answers
  6. CTreeCtrl::HitTest
  7. 第九集(第二部分)思科路由器IOS升级过程视频记录
  8. 去除两张img中间的间隙
  9. 课程设计 - 运动控制卡(云服务器)
  10. 京东商品分类API接口-(cat_get-获得jd商品分类API接口),京东分类API接口
  11. matlab进化树的下载,mega(进化树构建软件)下载 v7.0.14免费版
  12. 【转载】通过搜狗站长平台手动向搜狗搜索提交死链
  13. C++多线程std::async、std::future、std::packaged_task、std::promise
  14. 魔兽世界称全球玩家达1150万
  15. 华为:编程实现联想输入法 输入联想功能是非常实用的一个功能,请编程实现类似功能
  16. android指南针功能,轻松实现Android指南针功能
  17. 感觉自己效率太低怎么办?
  18. html文本框自动下拉列表,HTML input输入框实现的动态下拉列表选择
  19. vue+vant图片上传压缩图片大小
  20. akka 与kafka

热门文章

  1. java 设置头错误信息,错误:在node.js中发送标头后无法设置标头
  2. linux mint 图标主题_如何在 Linux Mint 中更换主题
  3. 虚拟化服务器类型,虚拟化服务器类型
  4. Expected tensor for argument #1 ‘input‘ to have the same device as tensor for argument #2 ‘weight‘;
  5. C++ 函数返回char*
  6. python可迭代对象,迭代器,生成器
  7. 自动处理可载入模块命令 modprobe
  8. session过期时间控制的一些常用方法
  9. C++学习之路 | PTA乙级—— 1071 小赌怡情 (15 分)(精简)
  10. python复杂非线性方程_非线性方程python入门——屠龙刀