代码审计第六节-命令执行

admin 2021年11月17日02:49:21评论83 views字数 4938阅读16分27秒阅读模式

一次团队里面有人问了两个问题,自己面试时,面试官问了两个问题,自己感到特别疑惑。命令执行和命令注入是什么鬼?看到群里全是大牛宝宝们,在不断的给解答这样高端问题,看的宝宝心里是佩服的五体投地。下面直接把群里的截图给列出来。所以此次文章以命令执行为主进行开展。

代码审计第六节-命令执行 代码审计第六节-命令执行

此次文章以PHP命令执行开始开始进行讲解。命令执行简单点讲就是执行命令,不管是web还是操作系统,可以直接执行命令,就是命令执行了。如果你还是不懂,在windows调出黑黑的dos窗口进行执行几条简单命令。直接执行命令,所以在工作中如果遇到命令执行就可以成为高危漏洞了。都可以执行你操作系统命令了,所以这个危害性比较高。现在常见的有好多比如struts系列漏洞、jboss漏洞、jenkins等漏洞,如果可以执行命令,那么你的服务器就会很危险了。

php代码执行相关背景介绍

当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system、exec、shell_exec、eval等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成命令执行攻击。一般命令执行也是调用php相关命令,system、exec、shell_exec、eval这几个命令使用率比较高。为了让大家更好的理解此漏洞,我们以dvwa和bwapp这两个靶场平台为例子,给大家进行讲解。

漏洞利用

首先我们分析dvwa高中低,三个级别代码有什么不同点.

代码审计第六节-命令执行

代码行数不超20行,所以核心代码就是两个if语句之间的句子。你看到shell_exec这个命令,就是执行命令句子。没有进过任何修饰,直接就执行ping命令。所以造成漏洞产生,直接执行ping命令是没有问题,如果你是一名测(hei)试(ke)人员,你就不会这样想,你的任务就是最全面进行测(zhuang)试(bi)。如果你对shell_exec函数一无所知,那么请参考一下文章进行恶补。

代码审计第六节-命令执行

代码审计第六节-命令执行

你看到这个页面应该比较熟悉,和在dos窗口下执行命令一样,返回了ping结果操作。利用方式该怎么利用呢,可以利用;或者是&&进行对命令进行分割。

代码审计第六节-命令执行

命令执行就是利用此漏洞进行最大限度利用,我们发现可以查看passwd文件。可以查看一些用户,利用这些用户组成相对应字典,对此服务器进行相对应暴力破解。

代码审计第六节-命令执行

如果是window我们可以这样利用,进行增加用户名和密码。如果你不知道net user是什么意思,请大家自行补充一下知识。

不过给大家准备了一份常见dos命令表,如果你不清楚,请牢记,如果清楚,请跳过此节。

【常用DOS命令】

查看版本:ver

查看权限:whoami

查看配置:systeminfo

查看用户:net user

查看进程:tasklist

查看正在运行的服务:tasklist /svc

查看开放的所有端口:netstat -ano

查询管理用户名:query user

查看搭建环境:ftp 127.0.0.1

查看指定服务的路径:sc qc Mysql

添加一个用户:net user redBu11 redBu11  /add

提升到管理权限:net localgroup administrators redBu11 /add

添加用户并提升权限:net user redBu11 redBu11  /add & net localgroup administrators redBu11 /add

查看制定用户信息:net user redBu11

查看所有管理权限的用户:net localgroup administrators

加入远程桌面用户组:net localgroup “Remote Desktop Users” redBu11 /add

突破最大连接数:mstsc /admin /v:127.0.0.1

删除用户:net user redBu11 /del

删除管理员账户:net user administrator redBu11.asd

更改系统登陆密码:net password redBu11.asd

激活GUEST用户:net user guest /active:yes

开启TELNET服务:net start telnet

关闭麦咖啡:net stop “McAfee McShield”

关闭防火墙:net stop sharedaccess

查看当前目录的所有文件:dir c:windows

查看制定文件的内容:type c:windows1.asp

把cmd.exe复制到c:windows的temp目录下并命名为cmd.txt:copy c:windowstempcookiescmd.exe c:windowstempcmd.txt

开3389端口的命令:REG ADD HKLMSYSTEMCurrentControlSetControlTerminal” “Server /v fDenyTSConnections /t REG_DWORD /d 0 /f

查看补丁:dir c:windows>a.txt&(for %i in (KB952004.log KB956572.log KB2393802.log KB2503665.log KB2592799.log KB2621440.log

KB2160329.log KB970483.log KB2124261.log KB977165.log KB958644.log) do @type a.txt|@find /i “%i”||@echo%i Not Installed!)&del /f /q /a a.txt

分析完初级代码以后,我们接着分析中级代码,中级代码比初级多了哪些函数.

代码审计第六节-命令执行

我们发现发了一个数组,另外多了一个str_replace这个函数,是什么意思呢,主要是指如果接收的ip中,带有&&和;的话就自动替换成空。

代码审计第六节-命令执行

我们把等级换成中级以后,发现页面不会有任何提示,也不会像初级那样给出一些提示。

代码审计第六节-命令执行

后来我们换个思路,用了一个数组里面没有的符号,进行操作。发现又可以绕过了。其实测试就是按照不同思路进行不同符号测试,只要不再白名单中,都可以进行绕过。中级分析完以后再分析高级部分,看看高级部分添加了符号,防止我们进行代码执行。

代码审计第六节-命令执行

高级部分进行了小数点分割,而且利用is_number函数进行强制分割,如果不是ip不会进行显示。

代码审计第六节-命令执行

如果高级部分还采用中级绕过方式,会提示我们无效ip。这里首先也是用stripslashes函数对获取到的IP地址进行了处理,主要是为了去掉转义后添加的斜杠,原因之前已经解释过,由于在high级别下会自动启用PHP的magic_quotes_gpc魔术引号,对所有的传值数据自动用addslashes()函数转义,所以需要用stripslashes()函数去除。

接下来使用了explode函数,以“.”为分隔符将$target变量中的IP地址进行分割,分割后会得到一个数组,并赋值给变量$octet。

接下来使用if语句,用is_numeric函数依次判断$octet数组中的每个值是否是数字型数据,并且还使用sizeof函数判断$octet数组中元素的个数是否是4个。这个判断条件就非常苛刻了,基本可以保证用户输入的必须是正确的IP地址,之前所使用的所有命令执行漏洞都无法生效了。

但是这里的问题也同样明显,这种过滤方法只能针对命令参数是IP地址的情况才起作用,如果我们希望去执行的是其它的系统命令,这种方法就不起作用了。

代码审计第六节-命令执行

看bwapp命令执行还没有就这么一个,也给大家把代码贴出来了。Bwapp就不给大家讲解了。直接进行实例挖掘,这样可能更实例理解一点。

本次漏洞挖掘工具

Firefox+notepad++

本次挖掘的cms为phpmywind,由于cms市场比较多,所以在选择性上也会选择一些以前旧版本,这样漏洞会多一些,对于讲解也会容易一些。目前最新版本为5.3,不会选择新版本测试。

代码审计第六节-命令执行

代码审计第六节-命令执行

这个是本机上面的cms,由于在审计前,需要大家进行下载安装,本次环境依然采用wamp进行测试。

每次分析前一定要对代码进行简单分析,才会更加熟悉代码,并且也要把环境搭建成功,看看界面有哪些功能,如果能黑盒进行简单渗透一下更好,如果不想黑盒,那可以直接来进行源代码。我的顺序一般是从index.php这个文件开始阅读,也会看看一些公共的配置文件,看看过滤哪些函数等。

代码审计第六节-命令执行

配置文件你需要看一下。

代码审计第六节-命令执行

从配置文件你还需要分析一下公共函数文件。

通过以上方式来进行熟悉代码以外,还可以进行安装好以后,尝试单击页面,看看都关联哪些文件。

代码审计第六节-命令执行

分析代码就给大家介绍到这里。由于我提前已经对代码进行简单分析了,所以直接就开始写过程了。如果你挖掘过几套代码执行的cms,就会发现一个问题,就会看到一个函数string2array,这个函数是什么意思呢,就是把字符转换成数组。前段时间挖掘过一个phpcms2008也是这个函数出现问题,导致代码执行。所以我们不尝先在代码中搜索一下看看哪里有引用这个函数。

代码审计第六节-命令执行

通过搜索发现一共有三个文件引用了这个函数,所以我们的范围一下就缩小了很多。开始一个一个进行分析。

这个是在wooyun简单截个图,也是这个函数产生的问题,不一定所有的代码执行都是这个问题,至于我找到了几个代码执行,都是这样产生的。

代码审计第六节-命令执行

我们在本地搭建一套phpcms2008源码,给大家进行演示命令执行。搭建完以后显示的效果。

代码审计第六节-命令执行

由于是版本比较老,所以在搭建是出现的几个问题。简单给大家科普一下,如果你想搭建成功这套老版本的cms,需要5.2版本以前的mysql,才可以搭建成功,如果你的mysql版本比5.2版本大,你是搭建不成功这套源码。在最后一步建立数据库时,一直会报错。所以为了避免以上错误,希望大家选取5.2以前的mysql。

这是源码的大概一个文件和文件夹,里面会有一些核心文件,我也给大家分析过,从入口文件开始进行分析,查看核心函数文件,以及查看一些过滤函数或者搭建成功以后先进行黑盒进行测试,如果发现某一个地方有问题,但是黑盒就是测试不成功,可以把源码文件进行分析,最后找到漏洞。

代码审计第六节-命令执行

入口文件标识很清楚,进入核心配置文件,查看其代码:

代码审计第六节-命令执行

红框标注文件,在此文件夹比较重要,要细致分析,避免放过漏洞。

代码审计第六节-命令执行

经过对文件大量的分析,简单逻辑我们可以找到了。由其上文中给大家介绍过的那样,如果想找漏洞,一定要知道其中有哪些关键函数我们可以控制,另外在代码中,最容易出现的脆弱点是那个。我们看完配置文件,开始搜索一下string2array这个函数在什么地方出现过,重点来进行分析这个函数,根据上下文。

代码审计第六节-命令执行

我们查找了容易出现问题的函数,最终发现大概有16个文件可能有问题,还有就是admin代表的是登陆后台部分,一般我们也不进行分析,那么只分析不是admin部分的地方。这样我们就可以省很大力气来进行审计。

代码审计第六节-命令执行

后来进过分析,一共有几个文件这个string2array比较可疑,首先对common这个文件开始进行分析,40行以前是对模板的一个调用和修改,不用关心。

代码审计第六节-命令执行

从上面往下面分析的时候,发现了这个extract这个函数文件,这个函数文件让我对这个文件有了兴趣。具体这个函数是什么意思,如果你不懂,我给大家一下连接自行脑补

代码审计第六节-命令执行

代码审计第六节-命令执行

会把当前数组的值倒入到PHP extract() 函数从数组中把变量导入到当前的符号表中。所以上面的例子中把original的值已经修改。

代码审计第六节-命令执行

代码审计第六节-命令执行

接着我们分析一下函数模板文件,这个文件核心过滤文件,找到string2array这个函数以后,我们发现强制把字符转成数组的模式输出。过滤注入跨站的语句也在此文件中。我们发现只要data传过来,就可以执行,对data没有进行任何防护。

代码审计第六节-命令执行

我们需要输入一个userid不存在的值,才会利用extact这个函数。所以我们输入一个不存在的值,查看结果输出什么呢?

代码审计第六节-命令执行

成功输出phpinfo,证明我们猜想正确。命令执行就给大家介绍这么多。后续给大家介绍文件上传和下载以及逻辑漏洞。

作者博客:sec-redclub.com


Q群:242410171
论坛:http://bbs.whitecell-club.org
欢迎投稿以及咨询问题。
版权声明:该科普文章属于WhiteCellClub团队的redBu11原创,转载须申明!


代码审计第六节-命令执行

本文始发于微信公众号(WhiteCellClub):代码审计第六节-命令执行

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月17日02:49:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   代码审计第六节-命令执行http://cn-sec.com/archives/489548.html

发表评论

匿名网友 填写信息