web渗透测试(高级) 第7课:批量赋值攻击

当人们开始使用数据库构建网站来存储信息时,他们必须手动执行大量SQL。 很少有人意识到它不是最好的解决方案,并开始研究更智能的替代方案,并开始构建对象关系映射(ORM),以便在没有任何SQL知识的情况下轻松查询数据库。

 

例如,在Ruby(使用ActiveRecord)中,您可以执行以下操作:

@user = User.find_by_name('pentesterlab')

这将自动生成并执行查询并在User对象中检索结果。

 

另一个非常方便的用法是从哈希中自动创建和更新对象:

@user = User.create(myhash) 
[...]
@user.update_attributes(anotherhash)

 

不幸的是,这个有用的功能带有安全隐患,如果开发人员没有正确确保对象@user的属性受到保护,攻击者可以任意覆盖任何这些属性。

 

在本节中,我们将看到这些类型问题的一些常见示例:批量赋值。

也有很多人把“批量赋值”攻击 叫做“覆盖属性”攻击。

在web开发的时候,如果用数据库做存储时会有很多手工写的sql语句。为了方便开发人员,于是开发出了对象关系映射(Object-relational mapping),就像上面Ruby所讲的那样。 以方便不懂sql的开发人员来做数据库的操作。但这并不能保证安全性,如果开发人员没有对参数做好判断,就会出现重置某些属性的问题,这就是覆盖属性。

 

Example 1

在此示例中,您可以注册用户。该应用程序具有两个级别的权限:

  • User
  • Admin

 

使用对象user上的属性admin设置管理员权限。 如果仔细查看Web应用程序使用的格式:user [username]user [PASSWORD],您应该能够找到获取admin访问权限的方法。 可以使用三种方法:

  • 使用浏览器扩展直接修改页面。
  • 保存页面并离线修改以创建将正确的有效负载发送到正确的URL的页面。
  • 使用代理拦截合法请求并添加参数(最快的选项)。

 

攻击方法如下:

此示例目的是创建个admin权限的用户。观察参数,发现是user[username]=&user[PASSWORD]= 那么我们试着添加一个admin 属性。覆盖属性

 

Example 2

在本练习中,开发人员修复了上面的错误。您无法创建具有admin权限的用户...或至少不能直接创建。  试着找到另一种方法来做同样的事情。

 

例如:

此示例目的同上面一样,创建一个admin权限的用户。但是此示例在创建时并不行。

那么我们创建一个普通用户进去,发现有一个更新简历,那么在更新处添加admin属性就可以。

批量赋值攻击

 

Example 3

在本练习中,您可以使用以下用户登录:user1,密码为pentesterlab。 登录后,尝试访问company“Company 2”中的信息。

 

为此,您需要使用批量赋值来修改您的company。

 

按照惯例(可以通过编程方式更改)当开发人员使用ActiveRecord(Ruby-on-Rails最常用的数据映射器),并且类Company有多个User时,使用User类中的字段company_id管理关系:

uby-on-Rails最常用的数据映射器

Ruby中使用以下代码:

class User < ActiveRecord::Base
  belongs_to :company
end

class Company < ActiveRecord::Base
  has_many :users
end

 

Ruby-on-Rails对“配置”实施“约定”,这有助于猜测类名和属性的名称......

使用此信息,您应该能够修改当前company以访问另一家company 的“secret”。 一旦你得到这个“secret”,你可以重置你的company_id以回到你company 的详细信息。

 

攻击方法如下:

此示例同前2个差不多,但是这里要猜一个company_id的字段。因为在一对多的结构中,即一个company对应多个user,那么在user表中会多一个company_id的外键指向company表。

批量赋值攻击

付杰
  • ¥ 49.0元
  • 市场价:199.0元
  • ¥ 0.0元
  • 市场价:199.0元
  • ¥ 79.0元
  • 市场价:99.0元
  • ¥ 68.0元
  • 市场价:128.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: