代码审计:命令注入学习

简介: 0x01 起因及想法   起因:好久没更新博客了,我在乌云社区看到一篇代码审计的整体学习思想如下:   学习代码审计目标:能独立完成对一个CMS代码安全的监测   思路:   A、通读全文代码,从功能函数代码开始阅读,例如include文件夹下的comm_fun.php,或者类似关键字的文件。

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指定的目录中才会允许执行,否则执行将失败。

目录
相关文章
|
6月前
|
SQL 小程序 Shell
PHP代码审计(三)php中代码执行&&命令执行函数
string system(string command,int &return_var) 可以用来执行系统命令并直接将相应的执行结果输出 system() 输出并返回最后一行shell结果。
60 0
|
12月前
|
安全 Java PHP
代码审计——命令执行详解
代码审计——命令执行详解
148 0
|
12月前
|
SQL 安全 Java
代码审计——SQL注入详解
代码审计——SQL注入详解
278 0
|
SQL 存储 安全
DVWA之SQL注入—Impossible level代码审计
审计checkToken 首先,该代码片段使用了 checkToken() 函数来验证 Anti-CSRF 令牌,即检查用户的访问令牌是否有效,以防止CSRF。
154 1
|
XML 存储 SQL
通过webgoat-xxe、jwt学习Java代码审计
通过webgoat-xxe、jwt学习Java代码审计
304 0
|
SQL 安全 前端开发
网站漏洞检测 wordpress sql注入漏洞代码审计与修复
wordpress系统本身代码,很少出现sql注入漏洞,反倒是第三方的插件出现太多太多的漏洞,我们SINE安全发现,仅仅2019年9月份就出现8个插件漏洞,因为第三方开发的插件,技术都参差不齐,对安全方面也不是太懂导致写代码过程中没有对sql注入,以及xss跨站进行前端安全过滤,才导致发生sql注入漏洞。
401 0
网站漏洞检测 wordpress sql注入漏洞代码审计与修复
|
PHP SQL 开发工具
php代码审计分段学习(php_bug)[3]
参考:https://github.com/bowu678/php_bugs 21.数字验证正则绕过 0 >= preg_match('/^[[:graph:]]{12,}$/', $password)//输入的内容必须为12个以上,不包括空格和tab...
1313 0
|
PHP 数据安全/隐私保护 SQL
php代码审计分段学习(php_bug)[2]
参考:https://github.com/bowu678/php_bugs 11.sql闭合绕过 $sql = "select user from php where (user='$user') and (pw='$pass')";嗯好吧这个不就是...
1125 0
|
PHP 数据库 数据安全/隐私保护
php代码审计分段学习(php_bug)[1]
参考:https://github.com/bowu678/php_bugs 1.extract变量覆盖 看extract变量覆盖这个的时候,代码里面出现了trim这个函数,就查了一下用法,说是去掉字符串开头和结尾的换行符或者是空格,还可以去掉不想出现的字符串。
1187 0