黑基Web安全攻防班
安基网 首页 IT技术 安全攻防 查看内容

渗透测试入门——命令执行漏洞详解

2018-10-8 00:10| 投稿: xiaotiger |来自: 互联网

摘要: 当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行 ...

免责声明:本站系公益性非盈利IT网站,本文由投稿者转载自互联网,文末已注明出处,其内容和图片版权归原作者所有,文中所述不代表本站观点,若有侵权或转载不当之处请从网站右下角联系我们处理。

大家好我是衬衫(投稿),因为文笔比较水,所以请各位见谅(本文只针对命令执行,与代码执行不相同)

1. 命令执行漏洞介绍

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system,exec,shell_exec等,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

2. 命令执行漏洞:直接调用操作系统命令

举个例子贴出代码

这里发现con_fuction里面有exec,那么exec()这个函数是干嘛的呢?

下面我给大家简单介绍一下php中的可以导致命令执行的函数

system函数----string system(string command, int [return_var]);

实例代码: $last_line = system(ls, $retval);

exec函数----string exec(string command, string [array], int [return_var]);

实例代码 :echo exec("whoami");

popen函数----int popen(string command, string mode);

实例代码

$fp = popen( "/bin/ls", "r" );

这里的函数还有很多因为我不写php,所以上面的可能不太专业

下面就是由于这个exec导致的问题了

他用了exec也就说明他能执行系统命令,那么我们尝试进行一次执行

一般我们的poc都是calc,那么这就是最简单的一个命令执行漏洞了

那么我们下面为大家演示命令注入

首先在学习命令注入前我们要理解的是

1. linux管道符

2. 简单的几个linux命令

3. 绕过本地验证

那么下面我给大家介绍一下linux管道符号

网上的内容五花八门

个人觉得用处比较大的就是"&" "|"

用法大家看一下

如下时在windows执行

命令为whoami&ipconfig如果我们换一个命令呢

换成whoami|ipconfig

这时候我们发现用"&"作为管道符的命令成功的执行了前后两个然而"|"此命令只执行了后面的ipconfig所以管道符的使用也就浮出水面

下面我们同样在linux下执行一下

我们的"&"符号是前后两个命令依次执行

而"|"符号是命令1 的正确输出作为命令2的输出对象.。

我们开始命令注入的讲解

这里是一个靶场,介绍说的是"内部人员方便运维工作留下的ping命令的页面"那么他是执行ping命令,我们就可以尝试让目标去通过管道符号去执行系统命令。

如果他的命令式ping ip 那么我可以带ping ip|任意命令,这样就可以执行系统命令

我们来尝试一下

这里js弹窗说ip格式不正确他有本地的js校验

我们看一下源代码

其中

function f_check_IP()

{ var ip = document.getElementById(reg_ip).value;

var re=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;

if(re.test(ip))

{

if( RegExp.$1<256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256)

return true;

}

alert("IP\\u683C\\u5F0F\\u4E0D\\u6B63\\u786E");

return false;

}

这一段js代码是为了检查怎么的ip

那么如何绕过js验证

我们可以用firefox一个插件noscript我这里不是用的noscript用的是js swith

装好插件之后我们直接点击红色js

然后刷新页面

输入127.0.0.1|whoami

成功执行了系统命令

我们获取flag的方式无非是那几样我们先"ls"一下

成功回显了目标的目录内文件

我们正常的读取文件都是cat xxxx

那么我们现在尝试cat key_22112201407597.php

但是这里无回显

我们发现cat key_22112201407597.php

中间存在空格,所以我断定是空格导致的问题

这里就要介绍一个Linux、里面 的空格{IFS}

bashIFS是内部的域分隔符

也就是空格的意思我们可以修改命令为cat{IFS}key_22112201407597.php

但是没有成功回显,一开始这个靶机执行cat{IFS}key_22112201407597.php是正常回显但是可能出了些问题,所以我们再来想办法

这里还有一个小技巧在Linux里我们执行cat

和cat xxx是一样的

举个例子

这样也是可以的

那么我们尝试

cat

成功返回了flag

这就是一个命令注入的姿势。

3. 总结:我们在漏洞挖掘的实战过程中啊,很少会碰见这样额接口,相对于多的是某个框架和中间件的漏洞

比如strust2 weblogic jboss 我们需要在github或者exploit-db寻找exp去进行测试

最后感谢大家的阅读,谢谢!!


小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6584957712080044557/

免责声明:本站系公益性非盈利IT网站,本文由投稿者转载自互联网,文末已注明出处,其内容和图片版权归原作者所有,文中所述不代表本站观点,若有侵权或转载不当之处请从网站右下角联系我们处理。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部