提权,顾名思义就是提高自己在服务器中的权限,当我们通过各种方法渗透进入一台服务器的内部,往往我们能的到的权限是很低的,当我们得到一个低权限的shell时,就需要进行进一步操作,即提权。想要提权就需要进行信息收集,如果不能清除的了解一个网站的完整架构,哪下一步就无法行动,所以我们需要了解这个shell的主机是做什么的,我们拥有什么样的权限,面对的是怎样一个系统等。通过一些简单地信息收集,可以对我们所面对的环境,作出详细信息评估,也能根据操作系统所存在的缺陷(漏洞)进行提权
就比如在windows中本身登录的用户是guest(来宾用户),然后我们可以通过提权后就变成超级管理员,拥有了管理Windows的所有权限(system)
实验场景:
通过某种方法,我得到了一个网站的后台,这时候后我就可以通过文件上传或者其它的手段把我们的webshell上传至服务端,然后通过远程工具(如蚁剑)去悄无声息的操控受害者的服务器
一.寻找上传点
通过寻找,我找到了可以上传一句话脚本的上传点,而且通过wappalyzer 插件的反馈信息,可以确定此站的服务器架构一个windows server 下的 iis web服务器,而且使用的动态开发语言为asp
通过bat合并,得到了一个图片马
Bat命令:copy *.jpg /b + *.asp /a 1.jpg
先把这串代码复制到记事本里,然后把后缀名改为bat即可
二. 上传一句话getshell
把制作好的图片马上传,然后蚁剑链接
链接失败……
回忆了一下,可能因为服务器上面并没有文件包含所以上传的jpg图片马文件没被解析,因为后缀是图片格式的,所以服务器会当做一张图片去读取,而不是代码。
就如同把一个图片后缀改为TXT然后打开里面的东西都会当文本读取而不是图片,想到wappalyzer 插件信息里面写了iis6.0的中间件,回想了下iis6.0的解析漏洞,记得上传.cer文件,iis6.0会解且执行。
接着蚁剑链接shell
成功进来了,但是权限太低,只能随便瞧瞧,连c盘都看不了,这样可不行,但是以现在拥有的权限,还不足以打开c盘中的文件,而C盘中的文件往往都是比较重要的,因此,我需要提升自己的权限
三.提权
想了想,那么怎么提升我的权限呢?突然想到了命令行工具!没错,就是它,cmd命令行自带了很多的系统指令,其中包括添加用户/添加用户组等等,这不正好合适吗?添加一个新用户身份,然后再把这个用户添加到管理员组,再用在管理员组的这个用户去登陆服务器,这不就有权限了吗
1.上传cmd
网盘找了个cmd,接着再次打开蚁剑,上传cmd
上传成功后,顺手修改一下时间和日志,稍微的处理一下痕迹…
右击刚刚上传的cmd然后选择打开终端
….又失败了,蚁剑有时候会出点bug, 换菜刀上
打开菜刀,链接远程一句话,成功执行cmd命令,还是菜刀靠谱,但是现在只是一个普通用户身份,按道理来说是没有权限创建用户的,但是都到这一步了,不试试怎么行
接着尝试创建一个用户并把它添加到管理员组去
这里解释一下Net User 的参数及作用
Net User
作用:添加或更改用户帐号或显示用户帐号信息。
命令格式:Net user [username [password | *] [options]] [/domain]
有关参数说明:
·键入不带参数的Net user查看计算机上的用户帐号列表
·username添加、删除、更改或查看用户帐号名
·password为用户帐号分配或更改密码
·提示输入密码
·/domain在计算机主域的主域控制器中执行操作。该参数仅在 Windows NT Server 域成员的 Windows NT Workstation 计算机上可用。默认情况下,Windows NT Server 计算机在主域控制器中执行操作。注意:在计算机主域的主域控制器发生该动作。它可能不是登录域。
例如:Net user xhh查看用户xhh的信息。
例如利用CMD命令添加用户与组
Net user xhh 123 /add
函数 参数 用户名 密码 参数(添加)
Net localgroup administrators 用户名 /add
函数 参数(对组进行操作) 目标组名 目标id 参数(添加)
果然,再次失败,不急,调整好心态,再次百度查问题,度娘的答案是: 我们之所以能通过菜刀链接webshell并且在菜刀界面显示目标服务器的目录,是因为asp动态语言通过wscript.shell 执行cmd命令去调用查询到的系统权限,常理来说,我们是通过调用它的方式来进行执行cmd,但是,反弹shell 的权限会比普通shell要,而且socks运行空间层级更高 ,巴拉巴拉一大堆,归根到底就一句话:权限不够,要提权!!
但是如果要使用cmd,那得需要用到外部接口wscript.shell。但是wscript.shell仍然在C盘,而C盘以我的身份仍旧无法访问,这可咋办?按照思路来说,那么就只能再上传一个wscript.shell 的exp利用脚本了,每个程序运行的权限不同,这个exp通过取得wmiprvse.exe的system权限,执行我们的命令。
这里解释一下wscript.shell
Wshshell是一个对象,存放在windows系统中的wshom.ocx文件中,可供在windows上运行的程序调用。他可对windows的外壳程序进行访问。(来自百度~~)
再次打开菜刀上传wscript.shell 的exp,接着打开终端调用wscript.shell.exe输入wscript.shell.exe “whoami” 查看当前用户,验证是否成功提权
因为我们得到的是一个低权限的shell,执行不了高权限用户的命令,所以需要调用wscript.shell.exe 来执行cmd命令 ,要用双引号包含要执行的命令并且在要执行的命令前面加上wscript.shell.exe 来调用
程序回馈了很多信息,这里用几个简单的步骤解释一下回馈的信息
1.寻找目标进程(拥有系统权限)
2.进行进程注入
3.拿到进程的系统凭证
4.用它的凭证执行我们的命令
但从其中的 this exploit gives you a local system shell,从这段语句中不难看出它已经赋予我system(系统)的命令行权限,在windows中,system比管理员的权限还要高,管理员做的事,system能做,system能做的事情,管理员不一定能做,这和linux中的root有些差别
2.接着尝试创建一个用户
命令行输入:wscript.shell.exe “net user xhh 123 /add” 新建一个用户(xhh)并设置密码为123
接着用net user xhh指令查看了xhh用户的信息,发现它现在只是普通用户,紧接着再把它添加到管理员组变成管理员用户
3.新建用户添加到管理员组
命令行输入:
wscript.shell.exe "net localgroup Administrators xhh /add"调用wscript.shell.exe把xhh用户添加到管理员用户组里
net user xhh 查看当前的用户组
成功提权为管理员用户,接着查看服务器是否开启远程桌面连接,方便我们再次光临
4.远程连接
命令行输入:tasklist -svc 查看服务器所开启的服务
发现服务器开启了termservice(远程桌面服务)而且该服务pid是2460,知道pid就好办了,接着命令行输入netstat -ano | findstr 2460来查看pid相对应的端口
可以看出Pid为2460对应的端口号是3389,也就是说远程桌面服务的端口号是3389,并且它正处于监听状态,随时都可以通过远程桌面连接上去
win + r 输入mstsc打开远程桌面,然后输入之前创建的用户名和密码
成功连接,这时候终于进到服务器里来了,cmd看一下当前用户,然后再久违的去c盘瞧瞧
毫无阻拦,到此,借用上传的wscript.shell.exe和cmd成功从一个低权限用户成功提升至管理员,实验成功结束
学习并做了一段时间的网络渗透,给我直观的感受就是思路问题和耐心,渗透不像技术研究,只需要对一个点进行研究,渗透涉及的方面太多太多,遇到问题后不能从单方面找问题,而是要从多个方面思考,看出其中的错误之处,然后再想考为什么会错误,看问题到底出在哪里,然后思考的渗透思路,只要思路正确,有足够有耐心,总会有所突破。