Authentication Lab | User Agent Strings

关注这个靶场的其它相关笔记:Authentication Lab —— 靶场笔记合集-CSDN博客

0x01:User Agent Strings 前情提要

在某些特殊的场景中,服务端会假定客户端可以信任,并根据客户端告知它的内容做出身份验证的决策。

然而,我们知道的,客户端并不可信。所以上述逻辑,很容易就会出现安全漏洞。

0x02:User Agent Strings Write UP

访问靶场,从题目描述来看,它们的开发人员创建了一个桌面程序和一个 Web 程序来访问公司的数据库,这两个程序使用的是相同的 API,但桌面程序可能是由于是它们内部使用的,所以可以直接访问它们公司内部的数据库。而 Web 程序则需要通过用户名和密码登录后,才能访问:

我们先下载桌面程序,解压后会得到一个 Shell 脚本,内容如下:

 #!/usr/bin/env bash
 ​
 echo "Pinging server to check it is up."
 echo
 ​
 ret=`curl -s -A "authlab desktop app" https://authlab.digi.ninja/UserAgentPing`
 ​
 if [[ $ret =~ "Pong" ]]; then
     echo "The server is up"
 else
     echo "The server is not up"
 fi

逻辑比较简单,就是如果 ret 获取的值为 Pong,则打印 “The server is up”,否则打印 “The server is not up”,我们可以直接运行 curl 命令看看服务端返回的内容:

 curl -s -A "authlab desktop app" https://authlab.digi.ninja/UserAgentPing

通过上图的对比,我们可以很明显发现,问题出在了 -A 参数传递的值上,下面是 curl 命令 -A-s 的作用:

  • -s--slient:该选项会让 curl 在运行时保持静默模式,即不显示进度条或错误消息。

  • -A--user-agent:该选项允许用户指定一个(User-Agent)字符串,该字符串会包含在 HTTP 请求的头部中发送给服务器。

通过上面的介绍,我们了解到,-A 是指定 HTTP 请求头 User-Agent 字段的值,那么我们是不是可以通过修改 Web 客户端发送给后端的包的 User-Agent 字段,就可以直接登录,而不需要密码呢(因为它们两个使用的是同一个 API)?

这里笔者使用的是 HackBar 插件,直接修改 User-Agent 值为 “authlab desktop app” 并发包:

从上图可以看到,服务端误认为我们是通过桌面程序访问的,所以认为我们是可信的,导致我们成功实现无密码登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SRC_BLUE_17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值