php 依赖注入(详解php命令注入攻击)
php 依赖注入
详解php命令注入攻击这次实验内容为了解php命令注入攻击的过程,掌握思路。
命令注入攻击
命令注入攻击(command injection),是指黑客通过利用html代码输入机制缺陷(例如缺乏有效验证限制的表格域)来改变网页的动态生成的内容。从而可以使用系统命令操作,实现使用远程数据来构造要执行的命令的操作。
php中可以使用下列四个函数来执行外部的应用程序或函数:system、exec、passthru、shell_exec。
信息来源——合天网安实验室
命令攻击为什么会形成漏洞?
首先是因为应用需要调用一些执行系统命令的函数,比如上面说的php中的system等函数。其次,当用户能够控制这些函数中的参数,就可以将一些恶意的命令拼接到一个正常的命令当中,然后就会造成命令执行漏洞。
所以我们可以得出命令执行漏洞需要的条件:
- 应用调用的执行系统命令的函数
- 用户可以对命令进行控制,从而拼接恶意命令
- 应用没有对用户的输入进行过滤或者过滤不严格
通过命令执行漏洞,我们可以读写一些服务器上的文件,并且这些文件是不想让用户看到的,比如密码类的敏感文件。而且,我们可以通过命令打开服务器的远程服务,这样就可以拿到服务器的shell,从而操控服务器或者这个网页。再者,我们还可以对内网进行进一步的渗透。
下面开始实验。
1.使远程服务器执行whoami
的命令。(whoami命令是查询当前用户身份的命令,比如管理员或普通用户)
打开实验环境,如下图所示,我们要使其执行whoami
命令。
从返回的结果来看服务器应该是windows系统,后面有补充。
服务器中关键代码如下:
程序获取get参数ip,然后拼接到system()函数中,利用system()函数执行ping的功能,但是此处没有对参数ip进行过滤和检测,导致可以利用管道符执行其它的系统命令,后面有管道符的补充。
“|”在windows中的意思是:把前面的结果当成后面的输入,我们用ip=127.0.0.1|whoami
来试一下
后面的命令执行成功,得到我们的身份是system
“&”在windows中的意思是:两条命令一起执行,先执行前面再执行后面,我们用ip=127.0.0.1&whoami
来试一下
可以看出whoami
命令并没有成功被执行,原因是在ulr中,“&”是一个连接符号,会被转义成“%26”,那我们直接使用“%26”,它就会被转义成真正的“&”,所以我们不妨使用ip=127.0.0.1%26whoami
再试一下
命令执行成功,可以看到服务器执行了两个命令(ping和whoami),我们的身份是system
“||”在windows中的意思是:当前面一个执行失败,则执行后面的,我们用ip=127.0.0.1||whoami
来试一下
这一次whoami
命令并没有被执行,这是因为前面的命令可以执行,我们只要把前面的命令搞成不能执行的,让它自动执行下一条命令,根据前面提供的关键代码,我们知道只要传入了正常的ip地址,命令(ping)就会成功执行,所以我们试试把ip地址消除,用ip=||whoami
来试一下
命令执行成功,我们的身份是system
2.使远程服务器执行ipconfig命令
服务器的关键代码如下
补充一下:
preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 。
preg_match() 匹配成功一次后就会停止匹配,如果要实现全部结果的匹配,则需使用 preg_match_all() 函数。
header()函数的作用是:发送一个原始 http 标头[http header]到客户端。标头 (header) 是服务器以 http 协义传 html 资料到浏览器前所送出的字串,在标头与 html 文件之间尚需空一行分隔。
这段代码对ip地址进行了简单的过滤,如果它匹配到,它会执行下面system那条命令,如果它没有匹配到,它就无法执行下面那条命令(即ping),也就是我们开始时看到的界面:
所以,我们想要让服务器执行ipconfig,首先想到的思路就是让它发生错误,执行失败,使用双管道让它执行ipconfig,接下来我们用ip=127.||ipconfig
试一下:
成功
同理,我们使用单管道(ip=127.0.0.1|ipconfig
)试一试:
成功
继续,我们使用“%26”(ip=127.0.0.1%26ipconfig
)试一试:
执行了两个命令,成功!
知识补充
我们可以通过ping命令返回结果中的ttl项查看服务器的操作系统:linux——64 win2k/nt——128 windows系列——32 unix系列——255(前面为操作系统,后面为ttl值) 通过ping返回结果,看ttl值与哪项最为接近,服务器就是哪个操作系统。
我们ping一下百度的试试
ttl值为52,则它与64之间跨了12个路由,所以它的服务器应该是linux。
接下来补充一些常用的管道符:
windows系统支持的管道符如下:
- “|”:直接执行后面的语句。
- “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
- “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
- “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
linux系统支持的管道符如下:
- “;”:执行完前面的语句再执行后面的语句。
- “|”:显示后面语句的执行结果。
- “||”:当前面的语句执行出错时,执行后面的语句。
- “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
- “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
总结一下:这种需要分析代码的问题一定不能大意,需要认真读懂什么意思才能破解它的秘密。这次实验并不是很难,以前在做ctf——web题有遇到过,那种跟这个差不多,通过分析代码构造url获取flag。
以上所述是小编给大家介绍的php命令注入攻击详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!
原文链接:https://blog.csdn.net/weixin_42751456/article/details/88955225
- php列表怎么用(PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能)
- 如何用wampserver打开自己写的php(WampServer下安装多个版本的PHP、mysql、apache图文教程)
- php如何实现异步调用(php基于协程实现异步的方法分析)
- php怎么实现动态配置(php实现映射操作实例详解)
- thinkphp框架实例(ThinkPHP框架整合微信支付之JSAPI模式图文详解)
- 如何用thinkphp框架来写一个网站(php tpl模板引擎定义与使用示例)
- php常驻进程(PHP 多进程与信号中断实现多任务常驻内存管理实例方法)
- php获取socket连接的详细信息(php使用socket调用http和smtp协议实例小结)
- apache2.4支持php5.5吗(WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置)
- thinkphp5.1修改(ThinkPHP 5.1 跨域配置方法)
- nginx 怎么搭建web服务器(Linux+Nginx+Php架设高性能WEB服务器)
- thinkphp5开发教程(thinkPHP5框架接口写法简单示例)
- iis6双php版本的设置(云主机IIS7.5支持PHP5.3以上版本和MYSQL)
- php运用redis实现抢购实例(PHP+redis实现微博的拉模型案例详解)
- phpstudy如何部署在linux上(phpstudy linux面板CC防护功能使用教程)
- php八大模式详解(php设计模式之工厂模式用法经典实例分析)
- 三人行,她们是育人路上的 铁三角 团队(她们是育人路上的)
- 阴阳师 孟婆山兔CP不倒 新皮肤草稿 孟婆兔 让痒痒鼠点赞(阴阳师孟婆山兔CP不倒)
- 阴阳师孟婆御魂推荐 孟婆御魂搭配毕业套(阴阳师孟婆御魂推荐)
- 袁冰妍终于接到新剧,饰演反追男主,看到合作演员 眼光果然毒辣(袁冰妍终于接到新剧)
- 记忆中的台词(记忆中的台词)
- 袁冰妍轧戏 拍《琉璃》的同时还在拍《将夜》,难怪被骂演技差(拍琉璃的同时还在拍将夜)
热门推荐
- thinkphp5表单系统(thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例)
- HTML5 播放 RTSP 视频的实例代码(HTML5 播放 RTSP 视频的实例代码)
- 程序员职业该如何规划
- css 翻动效果(CSS实现全屏切换效果的示例代码)
- vue-cli安装教程学习(Vue新手指南之创建第一个vue-cli脚手架程序)
- python编程将一个三位数反序输出(python实现整数的二进制循环移位)
- 浏览器怎么登录宝塔linux面板(宝塔Linux面板如何绑定域名?登录地址是多少?)
- asp.net后台输出js脚本
- 小程序实现左右滑动窗口(小程序实现分页效果)
- css3控制效果过渡的属性(css3之UI元素状态伪类选择器实例演示)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9