目次
なぜこのレッスンを勉強するのか
主にWebアプリケーションの侵入テストのコースを学習するため、Webアーキテクチャについてある程度理解する必要があります。
インターネット上のすべてのものを閲覧する:
Web作業メカニズム
ウェブページ、ウェブサイト
インターネット上の美しいページは、ブラウザを介して見ることができます。これは通常、ブラウザによってレンダリングされた.htmlページであり、cssなどのフロントエンドテクノロジが含まれています。複数のウェブページのコレクションがウェブサイトです。
Webコンテナ
Webサーバーとも呼ばれるWebコンテナは、主にWebサービスを提供します。Webサービスは、HTTPサービスと呼ばれることもあります。
一般的なWebコンテナは次のとおりです。Apache/ IIS / Nginxなど。
ApacheはPHPをサポートするために生まれ、IISは.net.aspをサポートするために生まれました
静的ページ
静的ページはすべて.htmlファイルであり、プレーンテキストファイルです。これらのファイルにはhtmlコードが含まれています。
HTML(ハイパーテキストマークアップ言語、ハイパーテキストマークアップ言語)は、ブラウザで解釈および実行されます。
ミドルウェアサーバー
上記は、一方向のユーザーにのみ情報を表示できます。Webの開発に伴い、情報は両方向に流れる必要があり、相互作用、つまり動的Webページの概念が必要になります。いわゆる動的とは、フラッシュ、php、asp、Java、およびその他のテクノロジーの使用です。 Webページとユーザーのブラウザにいくつかの実行可能スクリプトを埋め込むにはページを解釈するときに、スクリプトに遭遇したときにスクリプトを開始して実行します。
スクリプトを使用すると、Webサービスモデルに双方向の通信機能を持たせることができます。Webサーバーモデルは、ファイルの編集、関心の計算、フォームの送信など、従来のソフトウェアのようなさまざまなトランザクションも処理できます。Webアーキテクチャのアプリケーションは次のとおりです。大幅に拡張されました。
これらのスクリプトは、JSなどのページに埋め込むことができます。また、.asp、.php、jspファイルなどのファイルの形式でWebサーバーのディレクトリに個別に保存することもできます。このように、ますます多くの機能スクリプトが共通のツールキットを形成し、個別に管理でき、Webビジネス開発中に直接使用できます。これはミドルウェアサーバーであり、実際にはWebサーバーの処理機能の拡張です。
データベースの出現
静的なウェブページとスクリプトは事前に設計されており、通常は頻繁に変更されません。ただし、ウェブサイトの多くのコンテンツは頻繁に更新する必要があります。これらの変更されたデータを静的なウェブページプログラムに配置することは明らかに不適切です。従来の方法では、プログラムからのデータ。、使用される専門のデータベース。
Web開発者は、Webサーバーの背後にデータベースサーバーを追加します。これらの頻繁に変更されるデータはデータベースに保存され、いつでも更新できます。ユーザーがページを要求すると、スクリプトはSQLデータベース言語を使用して、ユーザーが要求したページと動的データが関係する場所に従ってデータから最新のデータを読み取り、「完全な」ページを作成し、最後に送信します。ユーザーにそれ
ウェブサイトを構築する
ソースリンク:https
://pan.baidu.com/s/1lsn9gfOQ1TbNwIiIn-9MJw抽出コード:cy39
ソースコードのcmsファイルをphpstudyWebサイトのルートディレクトリにコピーします
cmsフォルダーのinstall.sql(データベースファイル)
には、インクルードファイルの下にdatabase.inc.php(データベース構成ファイル)があり、右クリックして開くことができます。
新しいcmsデータベースを作成します(phpmyadmin)
インポートし、install.sqlを見つけます(最初にデータベースを選択してからインポートします)
次に、ページを更新します
HTTPプロトコルの概要
HTTP(HyperText Transfer Protocol、HyperText Transfer Protocol)は、メッセージ配信の仕様と要件です。
-
概要概要
@ |
1990年に提案された現在のバージョンは1.1です。 |
@ |
HTTPは、HTMLドキュメントをWebサーバーからWebブラウザに転送するために使用されます。 |
@ |
これは、要求と応答のプロトコルです。クライアントはリクエストを送信し、サーバーはリクエストに応答します。 |
@ |
HTTPは信頼性の高いTCP接続を使用します。デフォルトのポートは80です。 |
@ |
ブラウザ/サーバーモードをサポート |
@ |
シンプルで高速:ブラウザがサーバーにリクエストを送信するとき、リクエストメソッドとリクエストパスを送信するだけで済みます |
@ |
柔軟性:HTTPは、あらゆるタイプのデータオブジェクト(html、jpg、mp3を含む)を実行および送信します |
.html |
|
プレーンテキスト |
.jpg |
|
画像 |
.mp3 |
|
オーディオ |
@ |
HTTPプロトコルはステートレスプロトコルです |
-
URL
Webコンテナにブラウザによって要求されたリソース(ファイル)のパスを通知するために使用されるURL(Uniform Resource Locator)。例:http://localhost/test/requests.php?id = 32
上記のURLにユーザー名とパスワードがないのはなぜですか?
省略。彼が匿名でアクセスできるようにWebサービスがインターネット上で公開されているためですユーザー名とパスワードの存在を証明します:ftp:// 1901:[email protected]
URL形式:
Schema:// login:password @ address:port / path / to / resource /?query_string#fragment
schema:// はプロトコル
ログインの名前です:パスワード ユーザー名とパスワード
@ アドレスアドレス(IPアドレスまたはドメイン名を含む)
ポートの デフォルトは80、他の人は
/ path / to / resource / リソースパスを追加する必要があります
か?query_string クエリ文字列
フラグメント アンカー(ページの配置を実現する)
ポート |
|
80 |
ログイン |
|
ユーザー名 |
パスワード |
|
パスワード |
断片 |
|
アンカーポイント |
@ |
URLエンコード |
URLで許可される文字のみに制限があります。[AZ] [az] [0-9]、半角マイナス記号(-)、アンダースコアピリオド(。)、チルダ(〜)は、 URLのパス。他の文字はパーセントエンコードされます(スペースを含む)
次のように:
# |
|
%23 |
[]スペース |
|
%20 |
Urlエンコードの原則:16進形式の%+ ASCIIコード
URLをエンコードするときに中国語を使用しないでください
プログラミング時には、スペースの代わりに[+]プラス記号が使用されます。
@ |
メッセージ分析ツール |
1、F12
2、wireshark
3、フィドラー
4、Burp Suite
…
HTTPメッセージ分析
Webアプリケーションのすべての通信メッセージは、HTTPプロトコルの仕様と要件に準拠している必要があります。
GET /php/test/get.php HTTP / 1.1
ホスト:192.168.1.136
ユーザーエージェント:Mozilla / 5.0(Windows NT 6.1; Win64; x64; rv:75.0)Gecko / 20100101 Firefox / 75.0
受け入れ:text / html、application /xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language:zh-CN、zh; q = 0.8、zh-TW; q = 0.7、zh-HK; q = 0.5、en-US; q = 0.3、en; q = 0.2
Accept-Encoding:gzip、deflate
Referer:http://192.168.1.136/php/test/
Connection:close
Upgrade-Insecure-Requests:1
Cache-コントロール:max-age = 0
アムウェイのいくつかの代理店ツール:
プロキシスイッチャーとマネージャー
直接接続(つまり、プロキシを使用しない)
HTTPリクエストは、リクエストライン、リクエストヘッダー、リクエスト本文の3つの部分で構成されます。
1.リクエストライン:メソッド、リソースパス、プロトコル/バージョン
方法:GET
リソースパス:/php/test/get.php
プロトコル/バージョン:HTTP / 1.1
2.リクエストヘッダー
要求メッセージの2行目から最初の空の行までの内容。多くのフィールドが含まれています
リクエストヘッダーとリクエスト本文の間にスペースがあり、リクエスト行とリクエストヘッダーの間にスペースがありません
3.リクエスト本文
上記のメソッド(GETメソッド)にはリクエスト本文がありません。後で説明します(POSTにはリクエスト本文があります)
リクエスト方法:(リクエストラインにはどのフィールドがありますか)
取得する |
最も一般的に使用される方法で、通常、ユーザーはサーバーから送信された特定のリソースを要求します。 |
役職 |
ファイルストリームなどを含むパラメータとフォームをサーバーに送信できます。 |
頭 |
GETメソッドに似ていますが、サーバーの応答でヘッダーのみが返されます |
PUT(危険) |
サーバーからドキュメントを読み取るGETとは異なり、PUTメソッドはドキュメントをサーバーに書き込みます。 |
痕跡 |
エコーブラウザリクエスト |
オプション |
Webサーバーに、サポートするさまざまな機能を通知するように要求します |
削除 |
リクエストURLで指定されたリソースを削除するようサーバーにリクエストします(任意のファイルを削除できます) |
サーバーでPUT、TRACE、またはDELETEのいずれかが有効になっている場合、サーバーは危険であると考えられます。
-
実験
telnetを使用してブラウザをシミュレートし、HTTPリクエストを送信します
httpプロトコルの機能はシンプルで高速です。リソースをリクエストするときに、リクエストされたリソースとパスを送信するだけで済みます
。httpリクエストメッセージは次のように作成できます。
win7でtelnetアクセスを開く:コントロールパネル---プログラム---ウィンドウ関数を開くまたは閉じる--- telnetクライアントを確認する--- OK
telnetを使用してgetリクエストを送信します。
telnet 172.16.132.161 80
------------------
GET /php/test/get.php HTTP / 1.1(リクエストメソッド+リソースパス+プロトコルバージョン)
ホスト:172.16.132.161
---------------------------------
キャリッジリターンの後、空白になり(ctrl +]を押してエコーをオンにします)
、キャリッジリターンを押して空白のインターフェイスに入り、上記のメッセージを貼り付けます
もう一度Enterキーを押すと、サーバーの応答を確認できます。
Telnet www.baidu.com 80
--------------------------------
GET / HTTP / 1.1
ホスト:www.baidu.com
-----------
入力してhtmlを表示します(cmdを使用)
仮想マシンに新しいbaidu.htmlファイルを作成し、上記のコードをそのファイルに貼り付けて、にアクセスします。
このようにして、ブラウザをシミュレートしてtelnet経由でhttpリクエストを送信できます。
OPTIONSメソッドを使用して、Webサーバーで許可されているHTTP要求をテストします
---------------
オプション/ HTTP / 1.1
ホスト:192.168.1.136
-------
telnetを使用してGETパラメータを送信する
-------------
GET /php/test/get.php?name=AJEST&pwd=123456 HTTP / 1.1
ホスト:192.168.1.136
-------------
telnetを使用してPOSTをシミュレートし、パラメーターを渡すように要求します
---------------
POST /php/test/post.php?http://192.168.1.136/php/test/post.php HTTP / 1.1
ホスト:192.168.1.136
Content-Type:application / x-www-form-urlencoded
Content-Length: 19
name = GGG&pwd = 123456
-------------
簡単な方法でデータを投稿したい:(それ以外の場合はフォームを作成する)
ツール:ハックバー
リクエストヘッダーのフィールド:
ホスト |
主に、要求されたリソースのインターネットホストとポート番号を指定するために使用されます |
ユーザーエージェント |
ブラウザの指紋 |
リファラー |
現在のURLの以前のURLを表すURLが含まれています(これは、このリクエストのリダイレクト元のページです) |
クッキー |
リクエスターのID認証情報を記録します |
Accept-Charset |
ユーザーは、クライアントが受け入れる文字セットを指定します |
コンテンツタイプ |
ナレッジエンティティの受信者に通知するために使用されるメディアタイプ(つまり、データタイプ) |
コンテンツの長さ |
エンティティ本体の長さを示すために使用され、バイト単位で格納された10進数として表されます |
最終更新日 |
リソースの最終変更日時を示すために使用されます |
応答
-------------------------------------------------- -------------------------------
HTTP/1.1 200 OK
Date: Sat, 25 Apr 2020 09:50:59 GMT
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
X-Powered-By: PHP/5.4.45
Content-Length: 13
Connection: close
Content-Type: text/html
array(0) {
}
------------------------------------------------------------------------------
响应报文由状态行(响应行)、响应报头、响应正文三部分组成。
1、状态行:协议/版本,状态代码,描述短语
协议/版本:HTTP/1.1
状态代码:200
描述短语:OK
2、响应报头
第二行开始到第一个空行为止的所有内容,其中包含了关于HTTP响应的重要字段。
3、响应正文
服务器返回资源的内容,即浏览器接收到的HTML 代码。
状态码
100~199 |
信息性状态码(少见) |
200~299 |
成功状态码(最常见,2开头就是请求成功) |
300~399 |
重定向状态码 |
400~499 |
客户端错误状态码 |
500~599 |
服务器错误状态码 |
写一个重定向代码:
location.php:
<?php
header("Location:./get.php");
?>
//我没在访问location.php的瞬间会直接到get.php页面
主要字段
Server |
服务器指纹 |
Set-Cookie |
向浏览器端设置Cookie |
Last-Modified |
服务器通过这个头信息告诉浏览器,资源的最后修改时间 |
Content-Length |
请求正文长度 |
Location |
重定向目标页面 |
Refresh |
服务器通过Refresh头告诉浏览器定时刷新浏览器 |
同源策略的条件
- URL 的主机(FQDN:Fully Qualified Domain Name 全程域名)一致
- Schema 一致
- 端口号一致
同源策略的保护对象不仅仅时iframe 内文档。比如实现Ajax 时所使用的XMLHttpRequest 对象能够访问的 URL也受到了同源策略的限制。
sop叫同源策略
同源策略的探究
-
准备两个页面
-
-------index.html
<html>
<head>
<title> 跨 frame 的读取实验 </title>
<meta charset="utf-8">
</head>
<body>
<iframe name="iframe1" width="300" height="80"
src="http://192.168.3.10/sop/iframe.html"
>
</iframe>
<input type="button" οnclick="go()" value=" 密码: ">
<script>
function go(){
try {
var x = iframe1.document.form1.passwd.value;
document.getElementById('out').innerHTML = x;
} catch (e){
alert(e.message);
}
}
</script>
<span id="out"></span>
</body>
</html>
--------
--------iframe.html
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form name="form1"> iframe 的内层
密码 <input type="text" name="passwd" value="password1">
</form>
</body>
</html>
--------
这里我们使用我们服务器的浏览器测试这个实验(因为我们要使用不同的两个URL来访问我们的网页)
我们用指定的IP访问,可以正常读取
当时当我们使用我们本机的回环地址去访问时,打开页面,无法读取(这就是由同源策略限制,无法访问内层iframe)