详解php命令注入攻击


Posted in PHP onApril 06, 2019

这次实验内容为了解php命令注入攻击的过程,掌握思路。

命令注入攻击

命令注入攻击(Command Injection),是指黑客通过利用HTML代码输入机制缺陷(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。从而可以使用系统命令操作,实现使用远程数据来构造要执行的命令的操作。
PHP中可以使用下列四个函数来执行外部的应用程序或函数:system、exec、passthru、shell_exec。

信息来源——合天网安实验室

命令攻击为什么会形成漏洞?
首先是因为应用需要调用一些执行系统命令的函数,比如上面说的php中的system等函数。其次,当用户能够控制这些函数中的参数,就可以将一些恶意的命令拼接到一个正常的命令当中,然后就会造成命令执行漏洞。
所以我们可以得出命令执行漏洞需要的条件:

  1. 应用调用的执行系统命令的函数
  2. 用户可以对命令进行控制,从而拼接恶意命令
  3. 应用没有对用户的输入进行过滤或者过滤不严格

通过命令执行漏洞,我们可以读写一些服务器上的文件,并且这些文件是不想让用户看到的,比如密码类的敏感文件。而且,我们可以通过命令打开服务器的远程服务,这样就可以拿到服务器的shell,从而操控服务器或者这个网页。再者,我们还可以对内网进行进一步的渗透。

下面开始实验。

1.使远程服务器执行whoami的命令。(whoami命令是查询当前用户身份的命令,比如管理员或普通用户)
打开实验环境,如下图所示,我们要使其执行whoami命令。

详解php命令注入攻击

从返回的结果来看服务器应该是windows系统,后面有补充。

服务器中关键代码如下:

详解php命令注入攻击

程序获取GET参数ip,然后拼接到system()函数中,利用system()函数执行ping的功能,但是此处没有对参数ip进行过滤和检测,导致可以利用管道符执行其它的系统命令,后面有管道符的补充。

“|”在windows中的意思是:把前面的结果当成后面的输入,我们用ip=127.0.0.1|whoami来试一下

详解php命令注入攻击

后面的命令执行成功,得到我们的身份是system

“&”在windows中的意思是:两条命令一起执行,先执行前面再执行后面,我们用ip=127.0.0.1&whoami来试一下

详解php命令注入攻击

可以看出whoami命令并没有成功被执行,原因是在ulr中,“&”是一个连接符号,会被转义成“%26”,那我们直接使用“%26”,它就会被转义成真正的“&”,所以我们不妨使用ip=127.0.0.1%26whoami再试一下

详解php命令注入攻击

命令执行成功,可以看到服务器执行了两个命令(ping和whoami),我们的身份是system

“||”在windows中的意思是:当前面一个执行失败,则执行后面的,我们用ip=127.0.0.1||whoami来试一下

详解php命令注入攻击

这一次whoami命令并没有被执行,这是因为前面的命令可以执行,我们只要把前面的命令搞成不能执行的,让它自动执行下一条命令,根据前面提供的关键代码,我们知道只要传入了正常的ip地址,命令(ping)就会成功执行,所以我们试试把ip地址消除,用ip=||whoami来试一下

详解php命令注入攻击

命令执行成功,我们的身份是system

2.使远程服务器执行ipconfig命令

服务器的关键代码如下

详解php命令注入攻击

补充一下:

preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
preg_match() 匹配成功一次后就会停止匹配,如果要实现全部结果的匹配,则需使用 preg_match_all() 函数。
header()函数的作用是:发送一个原始 HTTP 标头[Http Header]到客户端。标头 (header) 是服务器以 HTTP 协义传 HTML 资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔。

这段代码对ip地址进行了简单的过滤,如果它匹配到,它会执行下面system那条命令,如果它没有匹配到,它就无法执行下面那条命令(即ping),也就是我们开始时看到的界面:

详解php命令注入攻击

所以,我们想要让服务器执行ipconfig,首先想到的思路就是让它发生错误,执行失败,使用双管道让它执行ipconfig,接下来我们用ip=127.||ipconfig试一下:

详解php命令注入攻击

成功

同理,我们使用单管道(ip=127.0.0.1|ipconfig)试一试:

详解php命令注入攻击

成功

继续,我们使用“%26”(ip=127.0.0.1%26ipconfig)试一试:

详解php命令注入攻击
详解php命令注入攻击

执行了两个命令,成功!

知识补充

我们可以通过ping命令返回结果中的TTL项查看服务器的操作系统:LINUX——64 WIN2K/NT——128 WINDOWS系列——32 UNIX系列——255(前面为操作系统,后面为TTL值) 通过ping返回结果,看TTL值与哪项最为接近,服务器就是哪个操作系统。

我们ping一下百度的试试

详解php命令注入攻击

TTL值为52,则它与64之间跨了12个路由,所以它的服务器应该是LINUX。

接下来补充一些常用的管道符:

Windows系统支持的管道符如下:

  1. “|”:直接执行后面的语句。
  2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
  3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
  4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

Linux系统支持的管道符如下:

  1. “;”:执行完前面的语句再执行后面的语句。
  2. “|”:显示后面语句的执行结果。
  3. “||”:当前面的语句执行出错时,执行后面的语句。
  4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
  5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。

总结一下:这种需要分析代码的问题一定不能大意,需要认真读懂什么意思才能破解它的秘密。这次实验并不是很难,以前在做CTF——Web题有遇到过,那种跟这个差不多,通过分析代码构造url获取flag。

以上所述是小编给大家介绍的php命令注入攻击详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
WINXP下apache+php4+mysql
Nov 25 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
几行代码轻松实现PHP文件打包下载zip
Mar 01 PHP
php fread函数使用方法总结
May 28 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 PHP
phpstorm激活码2020附使用详细教程
Sep 25 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 #PHP
PHP中Static(静态)关键字功能与用法实例分析
Apr 05 #PHP
PHP7匿名类的用法示例
Apr 05 #PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 #PHP
PHP中quotemeta()函数的用法讲解
Apr 04 #PHP
Laravel多域名下字段验证的方法
Apr 04 #PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 #PHP
You might like
如何使用动态共享对象的模式来安装PHP
2006/10/09 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
Node.js读写文件之批量替换图片的实现方法
2016/09/07 Javascript
canvas的神奇用法
2017/02/03 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
python获取android设备的GPS信息脚本分享
2015/03/06 Python
Python中的ctime()方法使用教程
2015/05/22 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
Python collections模块的使用方法
2020/10/09 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
HTML5 Canvas入门学习教程
2016/03/17 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
周仰杰(JIMMY CHOO)法国官方网站:闻名世界的鞋子品牌
2019/09/27 全球购物
函授大专自我鉴定
2013/11/01 职场文书
知识竞赛活动方案
2014/02/18 职场文书
感恩的演讲稿
2014/05/06 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
党性观念心得体会
2014/09/03 职场文书
车间质检员岗位职责
2015/04/08 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL
mysql下的max_allowed_packet参数设置详解
2022/02/12 MySQL