代码审计学习之命令注入

0x01 起因及想法

起因:剩下这假期这十几天,没人玩了,所以想学点东西并记录到自己的博客里。前阵子在乌云社区看到一篇代码审计的整体学习思想如下:

学习代码审计目标:能独立完成对一个CMS代码安全的监测

思路:

A、通读全文代码,从功能函数代码开始阅读,例如include文件夹下的comm_fun.php,或者类似关键字的文件。

B、看配置文件,带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。

C、跟读首页文件,了解程序运行时调用那些函数和文件,以首页为基线,一层层去扩展阅读所包含的文件。

0x02 命令注入学习

形成原因:对一些危险函数没有做过滤。

相关函数:system()、exec()、passthru()、‘‘反引号、shell_exec()、popen()、proc_open()等等。

0x03 利用演示

由于用法差不多,这里以system()为例进行演示。

演示代码:

 

查看权限:

 

添加用户:

写入一句话菜刀连接:

 

其他利用在自行摸索。

0x04 防护

PHP中命令注入攻击漏洞带来的危害和影响很严重。防范命令注入攻击漏洞的存在可以通过以下几种方法。

1.、尽量不要执行外部的应用程序或命令。

2.、使用自定义函数或函数库实现外部应用程序或命令的功能。

3、 在执行system、eval等命令执行功能的函数前,确定参数内容。

4、escapeshellcmd()函数会转义命令中的所有shell元字符来完成工作。这些元字符包括:#&;`,|*?~<>^()[]{}$\\。例如写入一句话可被过滤 ,所以命令无法执行成功,无法生成一句话文件。

5、使用escapeshellarg函数处理相关参数。Escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“;”会被转义为“\;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。 

6、使用safe_mode_exec_dir执行可执行的文件路径。将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录中,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。

0x05 声明

本文仅供学习参考,由于本人水平有限,如发现错误欢迎指出,谢谢!

                                                                                 第一天  

转载于:https://www.cnblogs.com/kanghongsec/p/5193594.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值