使用Postgresql进行HQL注入

问题描述 投票:1回答:1

我试图了解HQL注射的工作原理,但我需要帮助。我通过以下json向服务器发送HTTP POST请求:

{
    "status":"COMMUNICATION",
    "planning": {
    "from": "01-20-2013",
    "to": "11-12-2015"
    }
}

我知道有可能在“ status”参数的末尾注入欺诈性请求,因为当我用简单的引号(例如:"status":"COMMUNICATION'")关闭时,服务器会返回一个Hibernate错误要求:


{
    "exception": "org.springframework.dao.InvalidDataAccessApiUsageException", 
    "error": "Internal Server Error", 
    "message": "org.hibernate.QueryException: expecting ''', found '<EOF>' [SELECT com FROM com.company.CorRequest as com where com.corCommunicationId > 0 AND com.status = 'COMMUNICATION'' AND com.scheduledDate > to_timestamp('01-20-2013','MM-dd-yyyy HH24:MI') AND com.scheduledDate <= to_timestamp('11-12-2015','MM-dd-yyyy HH24:MI')]; nested exception is java.lang.IllegalArgumentException: org.hibernate.QueryException: expecting ''', found '<EOF>' [SELECT com FROM com as com where com.corCommunicationId > 0 AND com.status = 'COMMUNICATION'' AND com.scheduledDate > to_timestamp('01-20-2013','MM-dd-yyyy HH24:MI') AND com.scheduledDate <= to_timestamp('11-12-2015','MM-dd-yyyy HH24:MI')]", 
    "path": "/v1/comuni/", 
    "timestamp": 1579167902428, 
    "status": 500
}

当我注入"COMMUNICATION')--"时,我得到了[[entire表,但我无能为力,您有什么想法吗?

json postgresql hql sql-injection
1个回答
0
投票
注入始终遵循相同的攻击路径。让我们看一下基础知识。

    将恶意数据提交给服务
  1. 该服务将这些数据放入某种结构(XML,HTML,SQL,LDAP查询,shell命令等)
  2. 如果服务容易受到攻击,您可以突破数据范围并修改结构本身,为您注入XML / HTML / SQL / LDAP /命令等。
  • 看您的示例,这是正在发生的事情。

      您提交COMMUNICATION)'--作为恶意输入
  • 您的服务使用HQL,将创建如下所示的SQL查询:SELECT com FROM com.company.CorRequest as com where com.corCommunicationId > 0 AND com.status = 'COMMUNICATION'--' AND ...
  • 您突破了com.status的数据范围,并能够通过注释掉com.status = COMMUNICATION之后的所有内容来修改查询本身的结构>
  • 这就是为什么要收回整个桌子的原因。

    那么您如何从不同的表中提取数据?这里是一些sqlmap supports的技术。最简单的方法是使用UNION query-based注入:提交UNION ALL SELECT xy FROM different_table作为恶意输入,并且您应该能够查询different_table并提取数据。

    现在,当然,您的设置是唯一的,并且我不知道查询周围正在运行的代码。可能会发生某些应用程序逻辑隐藏了此缺陷并使其更难/无法利用的情况。您提供的示例应该具有足够的POC才能进行修复。我写了一篇简短的文章about trusting incoming data和您应该掌握的心态。

    如果您真的想尝试使用sqlmap提取数据,我建议您查看arbitrary injection point feature的文档。

    根据您提供的信息进行猜测,注入点将如下所示:COMMUNICATION)'*

  • © www.soinside.com 2019 - 2024. All rights reserved.