草庐IT

security - Couchbase注入(inject)?

coder 2023-06-28 原文

Couchbase 是一个相对较新的 NoSql 数据库。与任何其他新技术一样,它也存在一些安全问题。我花了很多时间来了解使用 go-couchbase 客户端库进行注入(inject)的风险。 According to their documentation ,我知道有可能形成架构和javascript注入(inject)攻击。但是,我无法形成任何讨厌的攻击。似乎纯字符串值没有在 Couchbase 端被解析(评估)。这是我的示例:

cbbucket, err = cbpool.GetBucketWithAuth(bi.Name, bi.Name, bi.Password)
if err != nil {
    fmt.Printf("Failed to connect to bucket %s %v", bi.Name, err)
    return
}
input := `{"v1":"Malicous"}`
err = cbbucket.Set("k1", 0, input)
if err != nil {
    fmt.Printf("set failed error %v", err)
    return
}

我假设,输入是攻击者可以操纵数据的地方。然而,存储在 Couchbase 中的是输入的无害(转义)版本。这是数据库中的存储值:

"{\"v1\":\"Malicous\"}"

通过查看 encoding/json 包,我了解到 go 可以使用 interface{} 动态解析通用 JSON 对象。因此,我修改了我的利用代码如下:

cbbucket, err = cbpool.GetBucketWithAuth(bi.Name, bi.Name, bi.Password)
if err != nil {
    fmt.Printf("Failed to connect to bucket %s %v", bi.Name, err)
    return
}
input := `{"v1":"Malicous"}`
b := []byte(input)
var f interface{}
err := json.Unmarshal(b, &f)
err = cbbucket.Set("k1", 0, &f)
if err != nil {
    fmt.Printf("set failed error %v", err)
    return
}

这次利用成功了。这是存储在 Couchbase 中的恶意 JSON 对象:

{
  "v1": "Malicous"
}

好吧,这种利用并不那么令人兴奋……因为它确实需要开发人员盲目地解码用户输入并将其存储在数据库中。我想知道是否有其他更简单的利用技术,源自字符串连接,不需要如此大意。

最佳答案

对于像您一样通过键访问,Couchbase 不会解析或验证写入数据库的值。那是一个应用程序端功能。只要该值采用 Couchbase Server 可以理解的形式,它就被写为该对象的值。

关于security - Couchbase注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31970422/

有关security - Couchbase注入(inject)?的更多相关文章

  1. ruby - 这个 ruby​​ 注入(inject)魔术是如何工作的? - 2

    我今天看到了一个ruby​​代码片段。[1,2,3,4,5,6,7].inject(:+)=>28[1,2,3,4,5,6,7].inject(:*)=>5040这里的注入(inject)和之前看到的完全不一样,比如[1,2,3,4,5,6,7].inject{|sum,x|sum+x}请解释一下它是如何工作的? 最佳答案 没有魔法,符号(方法)只是可能的参数之一。这是来自文档:#enum.inject(initial,sym)=>obj#enum.inject(sym)=>obj#enum.inject(initial){|mem

  2. ruby - 了解在 Ruby 中与 lambda 一起使用的 inject 行为 - 2

    我经常将预配置的lambda插入可枚举的方法中,例如“map”、“select”等。但是“注入(inject)”的行为似乎有所不同。例如与mult4=lambda{|item|item*4}然后(5..10).map&mult4给我[20,24,28,32,36,40]但是,如果我制作一个2参数lambda用于像这样的注入(inject),multL=lambda{|product,n|product*n}我想说(5..10).inject(2)&multL因为“inject”有一个可选的单个初始值参数,但这给了我......irb(main):027:0>(5..10).inject

  3. ruby - 有人可以解释一下在 Ruby 中注入(inject)的真实、通俗易懂的用法吗? - 2

    我正在学习Ruby,遇到了inject。我正处于理解它的风口浪尖,但当我是那种需要真实世界的例子来学习一些东西的人时。我遇到的最常见的例子是人们使用inject来添加一个(1..10)范围的总和,我不太关心这个。这是一个任意的例子。在实际程序中我会用它做什么?我正在学习,所以我可以继续使用Rails,但我不必有一个以Web为中心的示例。我只需要一些我可以全神贯注的目标。谢谢大家。 最佳答案 inject有时可以通过它的“其他”名称reduce更好地理解。它是一个对Enumerable进行操作(迭代一次)并返回单个值的函数。它有许多有

  4. ruby - 防止SQL注入(inject)/好的Ruby方法 - 2

    Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject

  5. Ruby:映射和注入(inject)之间的区别 - 2

    在此处阅读有关SO的各种解释,它们是这样描述的:map:Themapmethodtakesanenumerableobjectandablock,andrunstheblockforeachelement注入(inject):Injecttakesavalueandablock,anditrunsthatblockonceforeachelementofthelist.希望你明白为什么我觉得它们表面上看起来很相似。我什么时候会选择一个而不是另一个,它们之间有什么明显的区别吗? 最佳答案 如果您认为inject也别名为reduce,这

  6. ruby - 为什么 Ruby 注入(inject)方法不能对没有初始值的字符串长度求和? - 2

    为什么下面的代码会报错?['hello','stack','overflow'].inject{|memo,s|memo+s.length}TypeError:can'tconvertFixnumintoStringfrom(irb):2:in`+'from(irb):2:in`blockinirb_binding'from(irb):2:in`each'from(irb):2:in`inject'from(irb):2如果传递了初始值,它就可以正常工作:['hello','stack','overflow'].inject(0){|memo,s|memo+s.length}=>18

  7. ruby - 使用 cucumber/aruba/timecop : How to inject the context 测试命令行应用程序 - 2

    以下场景几乎概括了我的问题:Scenario:problemswithsubprocessesGiventhedateis01/01/201210:31WhenIrun`ruby-e"putsTime.now"`Thentheoutputshouldcontain"10:31"它归结为当我运行ruby​​-e"putsTime.now"时启动一个子进程,从而使我所有的Timecop.freezestub无效,因为他们只在主要过程中工作。我需要以某种方式将当前上下文“注入(inject)”到运行的命令中,但我似乎无法想出任何东西。我在这里尝试不可能的事情吗?步骤:require'time

  8. ruby - 在 Ruby 中,为什么在注入(inject)/归约方法中将累加器称为 memo? - 2

    出于好奇,为什么在注入(inject)/归约方法中将累加器称为memo?它的命名背后有什么背景/历史吗?它实际上是指“备忘录”还是备忘录代表什么?http://ruby-doc.org/core-2.0/Enumerable.html#method-i-injecthttp://ruby-doc.org/core-2.0/Enumerable.html#method-i-reduce 最佳答案 “memo”表示在内存中,注入(inject)在整个迭代过程中使用来保存中间对象状态,以便在下一次迭代中使用它。

  9. Spring Security 6.0系列【32】授权服务器篇之默认过滤器 - 2

    有道无术,术尚可求,有术无道,止于术。本系列SpringBoot版本3.0.4本系列SpringSecurity版本6.0.2本系列SpringAuthorizationServer版本1.0.2源码地址:https://gitee.com/pearl-organization/study-spring-security-demo文章目录前言1.OAuth2AuthorizationServerMetadataEndpointFilter2.OAuth2AuthorizationEndpointFilter3.OidcProviderConfigurationEndpointFilter4.N

  10. ruby-on-rails - 使用 secure_random stub rspec 中的随机值 - 2

    我正在尝试为我的gem编写规范,它生成otp并将其保存在数据库中。现在我正在为它编写规范。所以基本上我有三种方法generate_otp!、regenerate_otp!、verify_otp(otp)。generate_otp!的作用是调用包含三个变量的方法generate_otpotp_code-基本上是使用secure_random生成的随机值otp_verified-一个bool值,用于设置otp是否已验证的状态otp_expiry_time-设置otp的到期时间,可以由Rails应用在配置中设置。这三个也是我的数据库的列。在generate_otp之后,我正在调用active

随机推荐