当前位置: 首页 > 科技观察

Web安全逻辑漏洞综合总结

时间:2023-03-17 18:27:32 科技观察

1.超越程度1.1。原理通过改变ID等身份,账户A可以获取(修改、删除等)账户B的数据;1.2.容易出现的地方:一般情况下,越权漏洞容易出现在权限页面(需要登录的页面)的增删改查的地方。当用户对权限页面中的信息进行这些操作时,后台需要验证当前用户的权限。看是否有操作权限,从而给出响应,如果验证规则过于简单,容易出现未授权的漏洞;1.3、案例演示1)我们登录皮卡丘射击场,先看提示:2)一共有两个用户,我们登录kobe用户来测试lucky用户的越权访问。我们先登录kobe账号,点击查看个人信息,抢包;3)我们把这里的kobe改成lucy,并发布包;4)成功越权给lucyUser1.4。游戏中的危险。如果我们是平民玩家,换个ID就会变成其他玩家,甚至可能变成氪金大佬;2.纵向越界2.1。原理是使用低权限身份的账号,发送只有高权限账号才有的请求,获取其高权限操作;2.2、容易出现的地方,检查低权限用户是否可以覆盖高权限用户的功能,比如普通用户可以使用管理员的功能;2.3、案例演示1)我们先使用admin/123456登录;2)我们添加用户抓包,然后放到中继器中;3)然后我们使用pikachu/000000登录,抓包,保存pikachucookies替换admin用户的cookie;4)我们寄包裹;使用pikachu用户使用admincookie成功创建测试账号;2.4.泄露危险信息,篡改用户信息,严重者可以修改密码等;3.魔哲靶场演示1)打开靶场2)登录给定的测试用户3)这里我们通过抓包分析card_id4)发给测试人员爆破通过前端分析,他可能be3165)查看响应并输入账号,查看密码MD5解密6)登录成功4.越权漏洞检测-burp插件-autorize使用Autorize是一个旨在帮助渗透测试人员检测授权漏洞的扩展,它是Web应用程序渗透测试中比较耗时的任务之一;将特权用户的cookie提供给扩展并以高特权用户浏览站点就足够了,扩展将自动重复每个与低特权用户会话的请求并检测授权泄漏;除了授权泄露,它还可以在没有任何cookie的情况下重复使用每个请求来检测身份而不验证错误;该插件无需任何配置即可工作,但也是高度可定制的,允许配置授权执行条件的粒度以及插件必须测试的请求和不测试的请求,保存插件状态和导出授权的能力HTML或CSV格式测试报告;上报的执行状态如下:Bypass!-红色执法!-绿色执法???(请配置强制检测器)-黄色4.1、安装1)首先我们需要下载JythonStandalone:https://www.jython.org/download我们需要选择红色框内的那个进行下载:2)配置如下:3)我们配置好之后,再安装!4.2.使用(以pikachu为例)1)获取低权限cookie,我们首先获取垂直非授权目录下pikachu/000000的cookie;2)然后我们去访问高权限的账户,这里要注意的是先打开插件的开关,然后访问高权限的账户;3)然后会出现结果;左边的红色柱子表示可能存在未经授权的访问;右侧的红色栏表示可能存在未授权访问;然后点击三表示响应长度勾选右边的具体响应;如果响应中包含敏感数据,或者一些帖子的增删改查请求,可以报错;5.支付漏洞5.1.直接修改商品价格。分为下单、确认信息、支付三个步骤。那么修改价格的时候,是哪一步的价格呢?在我看来,您可以在这三个步骤中的任何一个中修改价格并进行测试。如果前两步有验证机制,那么你可以在最后一步支付并抓包尝试修改金额。如果在最后一步没有做好检查,那么问题就会存在。您可以尝试一个小数或负数来测试修改后的金额值;参考案例:http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2016-02266135.2。修改支付状态1)这个很容易理解。假设我们购买了产品A,使用bp抓包。我们可以看到某个字段;0:表示支付成功1:表示支付失败假设我们还没有支付,bp显示1,我们把1改成0;2)而我们去买A产品,是10元,B产品是1000元,我们先买A产品,把A产品的数据包发给B商品,然后我们就可以通过10购买10000元的商品了元;我们抓取购买包放入replayer,产品为5400元;我们把数据包放到replayer里面,重要的字段,我们记录一下;index.php?m=会员&a=gobuy&iscart=0&id=69&name=%E5%A4%A7%E7%B1%B3CMS%E6%89%8B%E6%9C%BA%E5%BC%80%E5%8F%91%E4%B8%93%E7%89%88&qty=1&price=5400>ype=%E7%81%B0%E8%89%B2&pic=/damicms/Public/Uploads/thumb/thumb_1393206337.jpg我们继续买6000元手机;根据经验,我们把5400手机的流量套餐放在6000元手机上;比较两个流量包:我们把5400元手机的流量包替换成6000元手机的流量包;这里产品的价格变成了5400;5.3、修改正在支付的产品数量如果1个馒头10元,那么10个馒头100元,那么-1个馒头呢?这会不会造成零元购买问题?我们可以看到一个手机是6000元,我们就抓包;这里的qty字段很可疑,我们将其改为10,放行包裹;订单金额变成了6亿,那么我们的猜测是完全正确的,我们将其数量改为-1,看看会发生什么;这里的价格变成了-6000,说明漏洞确实存在;5.4.另类支付我们在支付的时候,往往会给你一些优惠券,积分,全额折扣等等,而这些数值也是由操作空间控制的1)修改优惠券一般消费优惠券往往出现在第二步,确认购买信息。在这个页面,您可以选择相关的优惠券,我们会直接修改优惠券的金额等于商品的价格,或者直接修改为负数,最后付款。如果没有验证到这一点,则支付成功;2)当你修改优惠券金额和业务逻辑问题当优惠券值为任意值或负数,你要支付时,会显示支付失败,或者金额不对等一些提示,可能这个时候,你会选择放弃,但是当你点击个人中心,点击订单详情,如果出现这个逻辑问题,那么当你刚刚修改完优惠券金额后点击下一步支付,一个订单实际上已经生成。在订单金额中可以看到支付金额为0,然后点击支付。可以支付成功;这里有一个朋友的小技巧,支付可能会失败,但是如果你发现的问题是商业子站点,如果有内置钱包功能,那么你可以使用这个内置钱包功能来支付该订单,不用其他支付方式,即可支付成功;3)修改积分数额有些网站是有积分的,比如你消费多少,就可以有一定的积分数,支付的时候可以打折,如果这个积分数额还没有验证,那么你可以将支付时从积分中减去的金额改成商品本身的价格,或者为负数,可以生成0原始购物;双十一期间,很多人消费300减100,这个功能能不能把消费101的金额改成100?参考案例:http://wooyun.2xss.cc/bug_detail.php?wybug_id=wooyun-2016-02143195.5。修改支付接口有些网站支持多种支付接口,微信,支付宝,第三方支付工具,然后每个接口的值都不一样。如果逻辑设计不合适,那么我会随机选择一个点击抓包,然后修改为不存在的支付接口。如果没有做接口的相关处理如果到位了,会不会支付成功?5.6.淘宝重复支付,京东会有很多试用卡卡片可用于试用产品。我们可以多次提交试用产品数据包。如果服务器不进行严格的验证,就会产生很多这样的订单。此时,我们将退回产品,会发生什么?我们会退回很多试用卡吗?5.7.最低支付和最高支付1)最低支付很多测试人员在测试漏洞时经常将金额修改为0.01或者负数,但是这样很容易漏掉一些潜在的漏洞,比如有些网站有金币或者积分,你可以用这些来支付什么,10元等于100积分,50元等于500积分,这个问题,充值的时候把amount改成0.01负数会显示支付失败,但是如果把amount改成1元,那么支付就成功了,也就是说1可以买任何积分?其实大家测试的时候会发现,1块钱对应10个积分。如果修改0.01,则对应的积分为空,所以会显示失败,当修改为1元支付界面时,后面的积分算其他金额的积分,然后跳转到支付购买更多积分比它1元,也可以任意积分使用;2)最大支付额度一般正在开发中,产品的金额会以int类型定义,最大值为2147483647,我们尝试修改为2147483648,看是否会造成整数溢出,支付状态可能出现异常,导致支付成功;至此,如果我充值0.001元,也就是1%,一般开发会在前端判断我们的号码,或者最后一位四舍五入,直接用支付宝值直接报错,因为一般第三方只支持高达1美分;那如果我们充值0.019呢?因为支付宝只判断积分,所以只能支付0.01,而因为我们支付成功,前端会直接将9取整为0.02,所以相当于直接半价充值;5.9、首单半价,无线改造会员多么?是的,为了留住用户,会有首月半价,或者免费等活动,我们可以抢到这个数据包,多次付费,然后就可以一直打折购买了(百度云有这个漏洞去年就有了,6元一张可以买到)包月超级会员)5.10。越权支付的问题早就存在了,现在很少有这样的问题了。支付中会出现当前用户的ID,比如ID=1,我们就把ID改成2。如果没有验证我们是否已经支付给用户1,用用户2的钱购买了产品;5.11、部分网站部分产品无线试用,如云系列产品支持试用,试用期一般为7天或30天,一个账号只能试用一次,试用期间不能试用,但是如果试用界面没有如果分配做得不好,很容易造成漏洞。比如支付的时候,它的url后面的支付接口是3,那么这个时候就会调用购买支付接口,但是由于你的产品是试用的,所以它对应的值是绑定的如果你买了这个试用产品,那么金额必须为0,然后最后点击支付,可以看到支付成功,试用成功,你再试一次,然后他们的使用时间会加在一起,这样就可以无限购买任意产品;5.12.多线程并发问题多线程并发问题是由于各种状态没有实时处理而导致的问题。比如很多平台都有自己的钱包,这个钱包就是迷你钱包。该钱包的功能是仅在当前平台网站上使用。提取现金时,没有验证码或验证机制。只要输入金额就会反映出来,秒到。如果为负数,则修改量已经过测试。如果不行,那你其实可以试试多线程的并发问题,反映出来就抓包。比如我现在钱包里有0.1元,那么如果每0.01元我可以取10次,也就是发送10秒的过程,但是利用这道题可以实现多几个成功的过程,抓包的时候被反射,然后将数据包发送给BurpSuite工具的Intruder,分批发送12次,然后可以看到已经反射成功12次。即0.12元。从这里,我们就可以看出这个问题的危害性了。当然,此时账户的金额必须是负数。如果提款额度增加,那么提款额度可不是闹着玩的。当然多线程也可以在其他函数中测试。比如我之前提到的试用产品问题,可以通过多线程多次使用。比如用积分兑换礼物,一个账号只能兑换一次,通过使用这个问题,可以兑换更多次,一些转账功能,提现功能,购买功能等等。6、Cookie漏洞1)打开环境2)代码审计,我们打开login.php;可以清楚的看到cookie是传给用户的,如果用户为空,退出,登录不成功,我们可以抓包让他不为空;让$user=admin,放包;这个漏洞可以说是很鸡肋了,没有实战代码,你怎么知道cookies的漏洞?然后我们要分析,比如看到抓包,cookie=admin,那么我们可以改成cookie=test,能不能跳转到test用户;7、客户端回显1)介绍这种使用方法回显抓取的数据包,修改验证方式,我们尝试的时候有些网站会在你填写手机号后验证你的手机号和IP,点击发送验证码看是不是本地号码。有些会对传输的信息进行加密;2)原理是调用短信平台发送信息时,不判断手机号是否绑定了验证码,直接将验证码验证功能放在客户端(即返回数据包),导致验证码在客户端回显;3)危害比较明显,比如登录、注册、绑定、重置任何用户的密码;4)在客户端使用echo是在注册或绑定时当用户向网站系统发送短信验证码请求时,cookie中会包含短信验证码并在数据包中回显,如cookie=xxxxxxes_id=534324,此时我们可以通过抓包工具截获真正验证的代码,如cookie=xxxxxxes_id=567475。通过分析,真正的验证码是567475,此时我们将验证码修改为正确的验证码并提交,即可注册或绑定成功;8、响应状态值1)原理响应状态值是服务器发送密码重置凭证后,响应头中的一个具体的响应值(ture、1、ok、success等,如HTTP/1.1200ok)出现。2)使用流程修改Responsestatus值后,如果验证不严(逻辑漏洞),在client端对echo值进行验证,则可以成功执行相关操作;就像密码重置中的验证码问题,如果向客户端发送了echo值验证,分析验证值使用规则后,抓包并将Response状态值修改为正确,然后释放包,从而达到重置密码的效果;3)Casedemo演示地址:[http://xxx.com/Admin/Login.aspx]我们的账号密码输入admin/admin进行抓包,我们先把抓包放到Repeater中看结构;我们能不能猜到“d”:“0,账号密码错误!”,我们把0改成1,直接在那里登录?我们拦截响应包,将0改为1;成功进入;9.验证码9.1.无效验证在验证码模块,但验证模块与业务功能无关。这是无效验证,一般在新上线的系统中比较常见;我们得到短信验证码后,可以随意输入验证码,直接输入两次密码,无需验证验证码即可成功修改用户密码;9.2.对于任何用户注册,我们首先使用我们的手机号码进行验证,然后跳转到设置密码的页面。接下来抓包,篡改手机号,使用任意手机号注册。问题解读:这里的业务一致性存在安全隐患。身份验证和修改密码的过程是分开的,验证无效;9.3.客户端验证绕过客户端验证是不安全的。像上面的逻辑漏洞,可能会导致任意账号注册,任意用户登录重置等一系列问题。验证码的明文信息会直接显示在前端;我们在前端拿到验证码后就可以成功重置密码了;9.4、返回密文验证码。一大串密文。这时候我们对密文进行解密,得到验证码;9.5.拦截并替换返回数据包。第一步使用普通账号修改密码,获取服务器验证码通过后的返回包,并保存信息,我们第二次使用另一个账号登录。这个时候我们不知道验证码。我们随便输入验证码。当我们捕获到验证码错误的返回包时,我们将正常的返回包替换为错误的返回包。退回包裹,此时会提示密码修改成功;9.6、验证码爆破短信验证码一般由4位和6位组成(也有特殊情况,字母数字组合等),如果服务器不验证验证时间和次数有限制,则有是爆破的可能性;输入手机号获取验证码,输入任意验证码,抓包放入Intruder模块,设置短信验证码字段为fakepayload,然后设置取值范围进行暴力破解返回响应包的长度,判断爆破是否成功;9.7.验证码不绑定手机。一般来说,短信验证码只能使用一次。如果验证码没有绑定手机号,并且验证码在一段时间内有效,可能会出现以下情况:A手机验证码,B可能用A手机在一段时间内收到两个验证码一定时间间隔,两者都可以使用;检查接收验证码的手机号码是否与绑定的手机号码一致案例:任何用户密码重置使用您的手机号码接收验证码。填写自己的验证码和对方的手机号码。下一步是设置新密码。发送验证码移除如果用户输入的空格等特殊字符用于重发验证码,可以使用“\n”和空格绕过。不断增加空间会导致无线短信轰炸。我们在手机号码后加一个数字进行fuzz,可能会有不同的结果;10、短信轰炸1)短信轰炸是最常见的手机验证码漏洞类型。测试过程中,短信验证码接口重发数据包,导致大量恶意短信;2)大多数情况下,短信验证码的间隔为60秒。在这种情况下,我们每60秒发送一条短信,无线发送,发送短信轰炸。在测试过程中,我们可以通过编写Python脚本来实现短信轰炸;#coding=utf-8importjsonimportrequestsimporttimestart_time=time.time()count=input("请输入计数:")phone=raw_input("请输入您的手机:")i=0while(i