命令执行_代码执行

原理

更进一步的解释,请参见:

MiscSecNotes
命令执行漏洞和代码执行漏洞详解 一文了解命令执行漏洞和代码执行漏洞

命令执行漏洞原理

在操作系统中,“&、|、||”都可以作为命令连接符使用,用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令

代码执行漏洞原理

应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。

命令执行与代码执行漏洞区别

命令执行漏洞是可以直接调用操作系统命令,代码执行漏洞是靠执行脚本代码调用操作系统命令

命令执行&代码执行漏洞危害

可以执行代码、系统命令进行读写文件、反弹shell等操作,拿下服务器,进一步内网渗透等等。

脑图

OS命令执行

部分Web应用程序提供了一些命令执行的操作,例如,如果想测试 http://www.test.com 是否可以正常连接,那么web应用程序底层就很可能去调用系统操作命令,如果此处没有过滤好用户输入的数据,例如管道连接符,就很有可能形成系统命令执行漏洞。

windows系统

  • |:前面为真,才执行后面

在这里插入图片描述

  • ||:前面为假,后面才执行

在这里插入图片描述

  • &:不论前面真假,后面都能执行

png www.baidu.com&whoami
ping www.baidu.com&whoami
在这里插入图片描述

  • &&:前面为真,才执行后面的语句

在这里插入图片描述

linux系统

  • ;不论前面真假,后面一定执行

在这里插入图片描述

  • |:不论前面真假,后面一定执行

在这里插入图片描述

  • ||:当前面的语句执行出错时,执行后面的语句。

在这里插入图片描述

  • “&”:前面的语句可真可假,后面的一定执行

在这里插入图片描述

  • &&:前面的内容为真的情况下,才执行后面的内容

在这里插入图片描述

小结

在这里插入图片描述

靶机测试

使用web for pentester进行测试,我们这里不研究攻击靶场的思路,如果你有兴趣,可以通过“参考”中给出的Web for Pentester 靶场学习记录进一步学习它。

安装

下载地址:https://download.vulnhub.com/pentesterlab/web_for_pentester_i386.iso
像安装普通的linux系统那样安装即可,启动它后,即可直接进入,没有繁杂的操作系统安装过程。
我们这里选择的是目录穿越,作为演示案例。
在这里插入图片描述

Example 1

在这里插入图片描述

逻辑或:

http://192.168.239.134/commandexec/example1.php?ip=127.0.0.1|whoami

在这里插入图片描述

Example 2

在这里插入图片描述

这一关使用了 preg_match 正则检测我们输入的 ip ,如果 ip 不是 IP 格式的话就直接终止函数运行,但是这里使用了/m多行匹配模式,所以我们这里可以使用%0a换行,后面跟上自己的 payload 即可:

http://192.168.239.134/commandexec/example2.php?ip=127.0.0.1%0awhoami

在这里插入图片描述

Example 3

在这里插入图片描述

preg_match 去掉了/m多行匹配模式,检测到 ip 不是 IP 地址格式的话,就重定向为:
/commandexec/example3.php?ip=127.0.0.1
虽然重定向了,但是实际上代码还是执行了我们的输入,只是重定向后刷新了一下,我们没有看到执行结果,BP抓包即可。
在这里插入图片描述

其他案例

过滤空格

打开CTF题目,长这个样子
在这里插入图片描述

要读取flag的话,命令中间是有空格的,绕过思路如下:
常见方法有<<>%20(space)%09(tab)\$IFS\$9\${IFS}$IFS等(百度以下挺多的)
经测试这里可以使用<
命令:127.0.0.1|cat<flag_126491043027723.php

输入进来之后,页面没反应,不用慌,查看页面源代码
在这里插入图片描述

在这里插入图片描述

过滤目录分隔符

打开CTF题目,发现,flag位于某个文件夹里面,那么如果绕过斜线读取文件呢
在这里插入图片描述

思路上来说应该是cat文件,必须要使用目录分隔符/,但是题目给过滤。需要另外寻找办法
windows中:%0a&|
linux中:%0a%0d;&|&&||

其中:
分号;的作用就是在 shell 中,担任“连续指令”功能
&&的方式:command1 && command2,如果command1执行成功,则执行command2

  1. 拿到flag的文件名

在这里插入图片描述

  1. 读取flag

命令:;cd flag_is_here&&cat flag_11543166316699.php
在浏览器中f12打开,源码中出现flag
在这里插入图片描述

过滤运算符

通过代码可以看到过滤了|&,换成;依然可以绕过
在这里插入图片描述
使用命令:;cat flag_63893268518878.php
然后查看页面源代码:
在这里插入图片描述

参考

MiscSecNotes
命令执行漏洞和代码执行漏洞详解 一文了解命令执行漏洞和代码执行漏洞
[红日安全]Web安全Day13 - 命令执行实战攻防
白帽子挖洞—命令执行(Commnd Execution)篇
命令执行漏洞概述
Web for Pentester 靶场学习记录

猜你喜欢

转载自blog.csdn.net/weixin_44288604/article/details/119898908