HTB-靶机-Brainfuck

本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关

靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.17

nmap -sC -sV -p- -T5 -oN brainfuck.nmap 10.10.10.17

nmap扫描结果

扫描结果有开放邮箱,https,还得知一些证书相关的信息,看到有brainfuck.htb和sup3rs3cr3t.brainfuck.htb 直接绑定hosts搞吧

echo "10.10.10.17 brainfuck.htb" | sudo tee -a /etc/hosts
echo "10.10.10.17 sup3rs3cr3t.brainfuck.htb" | sudo tee -a /etc/hosts

访问得到如上信息,发现了一些跟邮件有关的信息,一个邮箱orestis@brainfuck.htb 确认目标是wordpress程序,使用wpscan扫描一把 

wpscan --disable-tls-checks --url https://brainfuck.htb -e ap,t,tt,u --api-token pFokhQNG8ZFEmmntdfHfTYnrYdnvJHKtVtDuHTqTqBc

得到一款插件相关的漏洞信息,同时也知道目标wordpress程序存在用户名admin

上面扫描出来的漏洞信息并没有给出对应的exploit,所以使用kali本身的searchsploit搜索下

确认可以利用的漏洞exploit编号为41006 将其复制到本地kali目录下信息如下:

根据上面给出的exploit可以知道目标靶机对应的插件存在用户提权漏洞,无需密码直接登录目标靶机后台,最终修改的代码如下并保存为html格式的文件,本地双击打开登录即可利用成功

上述操作完毕想到前面提到邮箱,找到设置的地方看到有记住配置好的邮箱名称和密码

orestis@brainfuck.htb
kHGuERB29DNiNE

使用上面的邮箱和密码登录邮箱看看有啥邮件

知道了用户名和密码就需要找地方登录,因为利用上面插件的漏洞已经登录了wordpress,那么还有刚开始nmap扫描出来的域名,我们访问发现需要登录,使用上面邮件得到的用户名和密码登录成功了

发现了ssh的登录方式,不过看上面的对应是加密了,捣鼓了一番,最终才知道是需要用到密码学相关知识,解密地址:http://rumkin.com/tools/cipher/vigenere.php

下面上面给出的id_rsa 

给上面的密钥权限为600 ,然后使用ssh登录目标靶机发现此密钥需要密码,这里需要使用john进行破解密码,破解之前需要使用ssh2john转换一下,前面的靶机也介绍到了怎么破解的,我这里就重复了,下面是破解出来的密码

使用此密码和用户为orestis远程ssh登录目标靶机

成功登录之后执行id发现此用户跟lxd相关,那么这里可以通过比较新的漏洞进行提权,具体如下:

https://www.exploit-db.com/exploits/46978
https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine
https://www.hackingarticles.in/lxd-privilege-escalation/

大致意思就是在本地kali下载build-alpine 然后执行脚本安装打包,最终会生成一个tar.gz的文件将此文件传到目标靶机,执行下面一顿操作即可提权

再补充下关于lxc和lxd等概念,参考:http://dockone.io/article/1125  上述操作完成之后相当于把目标靶机环境直接挂载到了本地目录/mnt/root/ 所以我们到此目录下找到root根目录即可发现root.txt

另一种拿root.txt方式,此种方式才原作者意思

进入到目标靶机之后查看当前家目录并查看相关信息

此关卡跟密码学相关,所以查询了上述代码,将上述代码丢到谷歌上去,找到这个网站有对应的解密方式 https://crypto.stackexchange.com/questions/19444/rsa-given-q-p-and-e

通过上述代码最终解密得到root.txt

def egcd(a, b):
    x,y, u,v = 0,1, 1,0
    while a != 0:
        q, r = b//a, b%a
        m, n = x-u*q, y-v*q
        b,a, x,y, u,v = a,r, u,v, m,n
        gcd = b
    return gcd, x, y

def main():

    p = 749302577646506281962992147553524167446082679278552088138715834326527417000928250488494103985293310916319365                                                                                                                                                       1830303308312565580445669284847225535166520307
    q = 702085452778756673545885838155545264832284500826661290684484793707033348037396328414664907425227875369689724                                                                                                                                                       5898433245929775591091774274652021374143174079
    e = 308020079179525084227928690216891939274850163327136225270252191051542544723446272849477797262809954319474542                                                                                                                                                       92782426313255523137610532323813714483639434257536830062768286377920010841850346837238015571464755074669373110411870                                                                                                                                                       331706974573498912126641409821855678581804467608824177508976254759319210955977053997
    ct = 44641914821074071930297814589851746700593470770417111804648920018396305246956127337150936081144106405284134                                                                                                                                                       84585139254108086265238684086976862243803869080347255027804246302981602877737814121702333671054544951297395059175505                                                                                                                                                       3735796799773369044083673911035030605581144977552865771395578778515514288930832915182

    # compute n
    n = p * q

    # Compute phi(n)
    phi = (p - 1) * (q - 1)

    # Compute modular inverse of e
    gcd, a, b = egcd(e, phi)
    d = a

    print( "n:  " + str(d) );

    # Decrypt ciphertext
    pt = pow(ct, d, n)
    print( "pt: " + str(pt) )

if __name__ == "__main__":
    main()

迷茫的人生,需要不断努力,才能看清远方模糊的志向!
原文地址:https://www.cnblogs.com/autopwn/p/13920542.html