代码审计基础

 代码审计基础-常见的 INI 配置 实验环境说明:
渗透机:kali
Linux 用户名:root 密码:123456
靶 机:Windows 2003 用户名:administrator 密码:空
第一步,打开网络拓扑,启动实验虚拟机,分别查看虚拟机 IP 地址:
Kali Linux
Windows2003
第二步,打开靶机控制台,编辑 C:\WINDOWS\php.ini,按照以下的配置文件说 明进行修改
第三步,禁用预定义类/函数:
禁止某些函数:
disable_functions =
禁用某些类:
disable_classes =
如果要设置多个类/函数,需要用英文逗号进行分隔。
1)将 disable_functions 的值中添加一个“phpinfo”,即禁止 phpinfo()方法: 2)重启服务后访问 http://172.16.1.200 (靶机 IP 地址)/board/,在左侧输入:
phpinfo();
显示“phpinfo()方法被禁用。”
3)要注意的是,disable_functions 只能禁用预定义函数(也就是 PHP 在启动前
定义好的函数)。如果我们自己创建一个函数,即使禁用了,也会被执行:
1、在 disable_functions 处填写“hello”,重启 Apache 服务
2、在/board 页面中定义“hello”函数,使其输出“ni hao!”,执行 我们自定义的函数虽然被禁止了,但仍被执行。
4)在 disable_classes 处禁用“hello”和“stdClass”类,并重启 Apache 服务
5)现在我们创建一个“hello”类,执行后会显示“Hello World!”:
class hello {
var $nihao = “Hello World!”;
}
$test = new hello();
echo $test->nihao;
如 disable_functions 相同,disable_classes 也只能禁用内置的类。
6)尝试实例化内置类“stdClass”:
$test = new stdClass(); 内置类被禁用。
7)只能禁用内置函数和内置类的原因:
1、自定义函数和类是由用户自己控制的,如果想要禁用自定义的函数和类,直
接移除、注释或修改即可;
2、运行机制问题。PHP 在启动时就会导入所有预定义的函数和类,在此之前会
检查 php.ini 的配置,如果某些内置函数和类被禁用了,PHP 就不会加载它。而
自定义的函数和类,只有在浏览器访问到该 PHP 页面时,才会被动态解析,在
原理上无法直接禁用。
第四步,设置上传文件大小:
file_uploads = on
是否允许文件上传
upload_max_filesize = 8M
允许上传文件的最大大小
post_max_size = 8M
通过 POST 传输的最大数据大小 1)将 file_uploads 的值改为 Off,禁止文件上传
2)重启服务后访问 http://172.16.1.200/audit/FileSharing.php,并上传任意一个
文件
点击提交后,显示 Upload Failed(上传失败) 第五步,魔术引号:
magic_quotes_gpc = On
magic_quotes_runtime = Off
当 magic_quotes 为 on,所有的 '(单引号)、"(双引号)、\(反斜杠)和 Null
会被一个反斜杠自动转义,防止 SQL 注入语句。
在转义之前,双引号会被识别为普通的双引号,包含到语句当中。但在转义之后,
双引号就会变成一串字符串,不会被当做语法标识。
1)使用渗透机的浏览器访问:
http://172.16.1.200/test/shell.php?cmd=system(“whoami”) ;
在开启 magic_quotes 之前,我们接收到的字符正常,没有被修改,并且 system()
函数成功执行了。
2)将 magic_quotes_gpc 的值设为 On 开启魔术引号,并重启 Apache 服务
3)再次访问:
http://172.16.1.200/test/shell.php?cmd=system(“whoami”) ; 可以看到,通过 GET 传输的数据,双引号被转义,命令无效。
第六步,错误信息控制:
display_errors = On
是否将错误信息作为输出的一部分,站点发布后应该关闭这项功能,以免暴露信
息。但调试的时候还是要 On 的,不然就什么错误信息也看不到了。
1)默认错误信息输出为开,访问 http://172.16.1.200/test.php 测试是否有错误信
息显示
test.php 中产生的错误是人为制作的,用于测试错误信息。test.php 的源码如下
我们在 test.php 中引用了一个不存在的文件,所以就会产生错误。
2)将 display_errors 的值设为 Off,关闭错误信息输出。 3)重启服务,再次刷新页面
报错信息已经消失。
错误信息由于包含敏感信息,可能会被别有用心的人利用,所以只能在开发调试
的时候启用,在网站发布后一定要关闭此项功能。
第七步,安全模式:
safe_mode = Off
PHP 的安全模式是个非常重要的内嵌的安全机制,能够控制一些 PHP 中的函数,
比如 system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键
文件的文件,比如/etc/passwd,但是默认的 php.ini 是没有打开安全模式的。
开启安全模式,将 safe_mode 修改为:safe_mode = On,保存并重启 Apache
服务(每次修改 php.ini 后都必须重启 Apache 服务才能生效) 打开安全模式后,使用 Kali Linux 浏览器访问:
http://172.16.1.200 (靶机 IP 地址)/test/eval.php?cmd=system("systeminfo")
在开启安全模式后,system()此类执行系统命令的危险函数无法正常执行,所以
返回了空白页面。
关闭安全模式是最简单、最方便、最有效的防御方法。但同时,我们也要根据站
点需求,调整好其它的设置,来达到最安全的效果。
实验结束,关闭虚拟机。
【总结思考】 随着使用 PHP 环境的用户越来越多,相关的安全问题也变得越来越重要。
PHP 环境提供的安全模式是一个非常重要的内嵌安全机制,PHP 安全模式
能有效控制一些 PHP 环境中的函数(例如 system()函数),对大部分的文
件操作函数进行权限控制,同时不允许对某些关键文件进行修改(例如
/etc/passwd)。但是,默认的 php.ini 配置文件并没有启用安全模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_43708659

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

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

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

打赏作者

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

抵扣说明:

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

余额充值