目次
1. 绕过基于路径的访问控制方案
2.基于角色的访问控制
3. 远程管理访问
ホームページ データベース mysql チュートリアル WebGoat学习访问控制缺陷( Access Control Flaws)

WebGoat学习访问控制缺陷( Access Control Flaws)

Jun 07, 2016 pm 03:38 PM
access 勉強 コントロール 欠陥 アクセス

在一个基于角色的 访问 控制 方案中,角色代表了一组 访问 权限和特权。一个用户可以被分配一个或多个角色。一个基于角色的 访问 控制 方案通常有两个部分组成:角色权限管理和角色分配。一个被破坏的基于角色的 访问 控制 方案可能允许用户执行不允许他/她

  在一个基于角色的访问控制方案中,角色代表了一组访问权限和特权。一个用户可以被分配一个或多个角色。一个基于角色的访问控制方案通常有两个部分组成:角色权限管理和角色分配。一个被破坏的基于角色的访问控制方案可能允许用户执行不允许他/她的被分配的角色,或以某种方式允许特权升级到未经授权的角色的访问

1. 绕过基于路径的访问控制方案

  在一个基于路径的访问控制方案中,攻击者可以通过提供相对路径信息遍历路径。因此,攻击者可以使用相对路径访问那些通常任何人都不能直接访问或直接请求就会被拒绝的文件。

  例如在一个基于权限的卖家管理系统,每个卖家只能操作自己的订单信息和商品信息,现在有卖家A和卖家B。A的商品信息被放在/webapps/A/下,例如/webapps/A/item1.html。A可以通过商品列表接口访问自己的商品信息,服务器验证A的身份后将A目录下的商品列表返回给客户端。A浏览自己商品时会向服务器发送访问请求,请求如下:

POST http://localhost:8080/WebGoat/attack?Screen=57&menu=200 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 36
Cache-Control: max-age=0
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/WebGoat/attack?Screen=57&menu=200
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=FB890B2A9D89628CF57454C6700CE7DC

File=item1.html&SUBMIT=View+File
ログイン後にコピー

  服务器收到请求后在A的目录下获取到item1.html并将结果返回给客户端。比较粗心的程序员在获取商品详情时没有再次校验卖家对目录的权限访问,黑客可意利用这个疏忽通过修改参数来欺骗服务器。例如修改请求参数如下:

POST http://localhost:8080/WebGoat/attack?Screen=57&menu=200 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 36
Cache-Control: max-age=0
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/WebGoat/attack?Screen=57&menu=200
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=FB890B2A9D89628CF57454C6700CE7DC

File=../B/xxx.html&SUBMIT=View+File
ログイン後にコピー

  服务器收到请求后,验证A用户是登陆的,然后将根目录设置为/webapps/A/访问../B/xxx.html,实际访问到了卖家B的商品信息/webapps/B/xxx.html,从而将B的商品详情(包括成本价信息)泄露给了A卖家。更为脆弱的系统可能会造成重要信息的泄露,例如将请求中File的参数设置成/etc/passwd或者/etc/passwd,则可能会获取到系统用户的信息,造成更为严重的损失。

2.基于角色的访问控制

  很多网站都尝试使用基于角色的方式严格限制资源访问,但开发人员在实现这类解决方案时容易出现疏忽。例如对于资源S,Tom和John均具有访问权限,John相对于Tom可以修改和删除资源S。客户Tom登录系统后服务器返回Tom的访问权限,并返回只有view按钮的html页面:

WebGoat学习访问控制缺陷( Access Control Flaws)

  Jone登录系统后服务器返回带有view和delete的html页面:

WebGoat学习访问控制缺陷( Access Control Flaws)

  点击delete操作,客户端向服务器发送如下请求:

POST http://localhost:8080/WebGoat/attack?Screen=65&menu=200 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 36
Cache-Control: max-age=0
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/WebGoat/attack?Screen=65&menu=200
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=FB890B2A9D89628CF57454C6700CE7DC

employee_id=105&action=DeleteProfile 
ログイン後にコピー

  服务器受到上述请求后,执行了delete操作。tom在view资源S时会向服务器发送如下请求:

POST http://localhost:8080/WebGoat/attack?Screen=65&menu=200 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 34
Cache-Control: max-age=0
Authorization: Basic Z3Vlc3Q6Z3Vlc3Q=
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/WebGoat/attack?Screen=65&menu=200
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
Cookie: JSESSIONID=FB890B2A9D89628CF57454C6700CE7DC

employee_id=105&action=ViewProfile  
ログイン後にコピー

  tom知道上述信息后可以尝试把自己的post参数做下修改,将post的参数串修改为employee_id=105&action=DeleteProfile发送给服务器。粗心的程序员因为疏忽没有再次校验tom的权限,导致tom成功执行了john的delete权限。同样的方法tom通过修改url执行系统管理员admin的操作,对服务器造成威胁。

  在通过view请求tom可以查看相关资料的详细信息。

WebGoat学习访问控制缺陷( Access Control Flaws)

  从上面请求参数中可以看出资料的idemployee_id表示,如果尝试修改employee_id=101重新发送请求,则会收到服务器的答复如下:

WebGoat学习访问控制缺陷( Access Control Flaws)

  成功的绕过展现层的限制访问到了Larry的资料。

  要预防上述操作服务器端服务务必要加强请求参数的过滤校验,以及权限的验证,每个请求都不要信任之前所做的操作,要不信任所有外部输入的参数,加强校验,尤其是对比较敏感的操作比如支付、删除、改价操作。如果多个接口共同对外提供服务,我们可以通过展示层的包装和内部跳转逻辑使整个流程处在一个理想的环境,但是只要各个接口独立就会被黑客所利用制造不合理的请求;因此系统在设计的时候不要仅仅考虑正常的情况是什么样,还要考虑异常(人为)情况的处理,务必要在每个环节做好严格的参数校验和权限校验,坚持不信任原则。

3. 远程管理访问

  很多网站开发人员在脚本中预留了相关的参数接口,一旦该参数被后台程序确认,则访问者的权限会被放大,浏览到先前不能访问的资源,如:程序调试日志、隐藏功能菜单等。例如某接口想设置一个admin=true的参数使开发人员可以在任何地方打开调试信息或者后台数据用于调试。例如http://localhost:8080/WebGoat/attack?Screen=28&menu=2000页面只会展示用户自身的身份信息,如果开发人员喜欢进行一些调试修改URL为:http://localhost:8080/WebGoat/attack?Screen=28&menu=2000&admin=true,服务器返回所有用户的详细资料,方便了外网的调试。

 WebGoat学习访问控制缺陷( Access Control Flaws)

  外网调试固然方便,但方便自己的同时也方便了不法人员,互联网上是没有秘密的,一旦密码被别人获取,就可以由此攻击对应的服务,造成不必要的损失,在实际操作时,一定要保证外网的服务关闭相应的调试功能。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

DeepSeek PDFを変換する方法 DeepSeek PDFを変換する方法 Feb 19, 2025 pm 05:24 PM

DeepSeekはファイルを直接PDFに変換できません。ファイルの種類に応じて、異なる方法を使用できます。一般的なドキュメント(Word、Excel、PowerPoint):Microsoft Office、Libreoffice、その他のソフトウェアを使用してPDFとしてエクスポートします。画像:画像ビューアまたは画像処理ソフトウェアを使用してPDFとして保存します。 Webページ:ブラウザの「Print into PDF」関数を使用するか、PDFツールに専用のWebページを使用します。 UNCOMMONフォーマット:適切なコンバーターを見つけて、PDFに変換します。適切なツールを選択し、実際の状況に基づいて計画を作成することが重要です。

Oracleでdbfファイルを読み取る方法 Oracleでdbfファイルを読み取る方法 May 10, 2024 am 01:27 AM

Oracle は、次の手順で dbf ファイルを読み取ることができます。外部テーブルを作成し、その dbf ファイルを参照し、データを Oracle テーブルにインポートします。

Botanix の解釈: ネットワーク資産管理のための分散型 BTC L2 (対話型チュートリアル付き) Botanix の解釈: ネットワーク資産管理のための分散型 BTC L2 (対話型チュートリアル付き) May 08, 2024 pm 06:40 PM

昨日、BotanixLabs は、Polychain Capital、Placeholder Capital などの参加を得て、総額 1,150 万米ドルの資金調達を完了したと発表しました。資金は、BTCL2Botanix に相当する分散型 EVM を構築するために使用されます。スパイダーチェーンは、EVM の使いやすさとビットコインのセキュリティを組み合わせています。 2023 年 11 月にテストネットが稼働して以来、アクティブなアドレスは 200,000 を超えています。 Odaily では、この記事で Botanix の特徴的なメカニズムとテストネットの相互作用プロセスを分析します。 Botanix 公式定義によると、Botanix はビットコイン上に構築された分散型チューリング完全 L2EVM であり、2 つのコア コンポーネントで構成されています: イーサリアム仮想マシン

node.js環境で403を返すサードパーティインターフェイスの問題を解決する方法は? node.js環境で403を返すサードパーティインターフェイスの問題を解決する方法は? Mar 31, 2025 pm 11:27 PM

node.js環境で403を返すサードパーティインターフェイスの問題を解決します。 node.jsを使用してサードパーティのインターフェイスを呼び出すと、403を返すインターフェイスから403のエラーが発生することがあります...

Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Laravel Redis接続共有:選択方法が他の接続に影響するのはなぜですか? Apr 01, 2025 am 07:45 AM

Laravel FrameworkでRedis接続の共有の影響とLaravelフレームワークとRedisを使用する際のメソッドを選択すると、開発者は問題に遭遇する可能性があります。

C#でマルチスレッドの利点は何ですか? C#でマルチスレッドの利点は何ですか? Apr 03, 2025 pm 02:51 PM

マルチスレッドの利点は、特に大量のデータを処理したり、時間のかかる操作を実行したりするために、パフォーマンスとリソースの使用率を改善できることです。複数のタスクを同時に実行できるようになり、効率が向上します。ただし、あまりにも多くのスレッドがパフォーマンスの劣化につながる可能性があるため、CPUコアの数とタスク特性に基づいてスレッドの数を慎重に選択する必要があります。さらに、マルチスレッドプログラミングには、同期メカニズムを使用して解決する必要があるデッドロックや人種条件などの課題が含まれ、同時プログラミングの確固たる知識が必要であり、長所と短所を比較検討し、それらを慎重に使用する必要があります。

ノード環境で403エラーを返すサードパーティのインターフェイスを回避する方法は? ノード環境で403エラーを返すサードパーティのインターフェイスを回避する方法は? Apr 01, 2025 pm 02:03 PM

ノード環境で403エラーを返すサードパーティのインターフェイスを回避する方法。 node.jsを使用してサードパーティのWebサイトインターフェイスを呼び出すと、403エラーを返す問題が発生することがあります。 �...

Windows 11 でリモート アクセスを有効にする方法_Windows 11 でリモート アクセス チュートリアルの共有を有効にする Windows 11 でリモート アクセスを有効にする方法_Windows 11 でリモート アクセス チュートリアルの共有を有効にする May 08, 2024 pm 08:31 PM

1. [スタート] メニューを検索して、[コントロール パネル] ページを見つけます。 2. 次に、コントロール パネルでビューを [カテゴリ] に変更し、[システムとセキュリティのオプション] をクリックします。 3. [システム] の下にある [リモート アクセスを許可する] ボタンを見つけてクリックします。 4. ポップアップでウィンドウの [リモート システムのプロパティ] 列をクリックし、[このコンピュータへのリモート接続を許可する] ボタンをオンにして、[OK] をクリックして保存します。

See all articles