详解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 相关文章推荐
用文本文件制作留言板提示(上)
Oct 09 PHP
PHP生成便于打印的网页
Oct 09 PHP
同一空间绑定多个域名而实现访问不同页面的PHP代码
Dec 06 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
Nov 18 PHP
php生成短域名函数
Mar 23 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
基于php判断客户端类型
Oct 14 PHP
PDO::errorInfo讲解
Jan 28 PHP
laravel自定义分页的实现案例offset()和limit()
Oct 15 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 验证图片生成函数
2009/05/21 PHP
PHP 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
PHP判断是否有Get参数的方法
2014/05/05 PHP
一张表搞清楚php is_null、empty、isset的区别
2015/07/07 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Python下Fabric的简单部署方法
2015/07/14 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
python画双y轴图像的示例代码
2019/07/07 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
神路信息Java面试题目
2013/03/31 面试题
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
大学生年度自我鉴定
2013/10/31 职场文书
会计电算化应届生求职信
2013/11/03 职场文书
音乐专业自荐信
2014/02/07 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
Python答题卡识别并给出分数的实现代码
2021/06/22 Python