自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP漏洞全解(八)-HTTP響應(yīng)拆分

系統(tǒng) Linux
本文主要介紹針對PHP網(wǎng)站HTTP響應(yīng)拆分,站在攻擊者的角度,為你演示HTTP響應(yīng)拆分。

HTTP請求的格式

1)請求信息:例如“Get /index.php HTTP/1.1”,請求index.php文件

2)表頭:例如“Host: localhost”,表示服務(wù)器地址

3)空白行

4)信息正文

“請求信息”和“表頭”都必須使用換行字符(CRLF)來結(jié)尾,空白行只能包含換行符,不可以有其他空格符。

下面例子發(fā)送HTTP請求給服務(wù)器www.yhsafe.com

GET /index.php HTTP/1.1↙ //請求信息

Host:www.yhsafe.com↙ //表頭

↙ //空格行
↙符號表示回車鍵,在空白行之后還要在按一個空格才會發(fā)送HTTP請求,HTTP請求的表頭中只有Host表頭是必要的餓,其余的HTTP表頭則是根據(jù)HTTP請求的內(nèi)容而定。
 
HTTP請求的方法
1)GET:請求響應(yīng)
2)HEAD:與GET相同的響應(yīng),只要求響應(yīng)表頭
3)POST:發(fā)送數(shù)據(jù)給服務(wù)器處理,數(shù)據(jù)包含在HTTP信息正文中
4)PUT:上傳文件
5)DELETE:刪除文件
6)TRACE:追蹤收到的請求
7)OPTIONS:返回服務(wù)器所支持的HTTP請求的方法
8)CONNECT:將HTTP請求的連接轉(zhuǎn)換成透明的TCP/IP通道
 
HTTP響應(yīng)的格式
服務(wù)器在處理完客戶端所提出的HTTP請求后,會發(fā)送下列響應(yīng)。
1)第一行是狀態(tài)碼
2)第二行開始是其他信息
狀態(tài)碼包含一個標識狀態(tài)的數(shù)字和一個描述狀態(tài)的單詞。例如:
HTTP/1.1 200 OK
200是標識狀態(tài)的是數(shù)字,OK則是描述狀態(tài)的單詞,這個狀態(tài)碼標識請求成功。

HTTP請求和響應(yīng)的例子

打開cmd輸入telnet,輸入open www.00aq.com 80

打開連接后輸入

GET /index.php HTTP/1.1↙

Host:www.00aq.com↙

返回HTTP響應(yīng)的表頭

返回的首頁內(nèi)容

使用PHP來發(fā)送HTTP請求

header函數(shù)可以用來發(fā)送HTTP請求和響應(yīng)的表頭

函數(shù)原型

void header(string string [, bool replace [, int http_response_code]])

string是HTTP表頭的字符串

如果replace為TRUE,表示要用目前的表頭替換之前相似的表頭;如果replace為FALSE,表示要使用多個相似的表頭,默認值為TRUE

http_response_code用來強制HTTP響應(yīng)碼使用http_response_code的值

實例:

  1. // 打開Internet socket連接 
  2. $fp = fsockopen(www.00aq.com, 80); 
  3. // 寫入HTTP請求表頭 
  4. fputs($fp"GET / HTTP/1.1\r\n"); 
  5. fputs($fp"Host: www.00aq.com\r\n\r\n"); 
  6. // HTTP響應(yīng)的字符串 
  7. $http_response = ""
  8. while (!feof($fp)) 
  9. // 讀取256位的HTTP響應(yīng)字符串 
  10. $http_response .= fgets($fp, ); 
  11. // 關(guān)閉Internet socket連接 
  12. fclose($fp); 
  13. // 顯示HTTP響應(yīng)信息 
  14. echo nl2br(htmlentities($http_response)); 
  15. ?> 

HTTP響應(yīng)拆分攻擊

HTTP響應(yīng)拆分是由于攻擊者經(jīng)過精心設(shè)計利用電子郵件或者鏈接,讓目標用戶利用一個請求產(chǎn)生兩個響應(yīng),前一個響應(yīng)是服務(wù)器的響應(yīng),而后一個則是攻擊者設(shè)計的響應(yīng)。此攻擊之所以會發(fā)生,是因為WEB程序?qū)⑹褂谜叩臄?shù)據(jù)置于HTTP響應(yīng)表頭中,這些使用者的數(shù)據(jù)是有攻擊者精心設(shè)計的。

可能遭受HTTP請求響應(yīng)拆分的函數(shù)包括以下幾個:

header(); setcookie(); session_id(); setrawcookie();

HTTP響應(yīng)拆分通常發(fā)生在:

Location表頭:將使用者的數(shù)據(jù)寫入重定向的URL地址內(nèi)

Set-Cookie表頭:將使用者的數(shù)據(jù)寫入cookies內(nèi)

實例:

  1.     header("Location: " . $_GET['page']); 
  2. ?> 

請求

GET /location.php?page=http://www.00aq.com HTTP/1.1↙

Host: localhost↙

返回

HTTP/1.1 302 Found

Date: Wed, 13 Jan 2010 03:44:24 GMT

Server: Apache/2.2.8 (Win32) PHP/5.2.6

X-Powered-By: PHP/5.2.6

Location: http://www.00aq.com

Content-Length: 0

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html

訪問下面的鏈接,會直接出現(xiàn)一個登陸窗口

http://localhost/location.php?page=%0d%0aContent-Type:%20text/html%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%20158%0d%0a%0d%0a帳號%20密碼%20

轉(zhuǎn)換成可讀字符串為:

Content-Type: text/html

HTTP/1.1 200 OK

Content-Type: text/html

Content-Length: 158

 

帳號
密碼

一個HTTP請求產(chǎn)生了兩個響應(yīng)

防范的方法:

1)替換CRLF換行字符

  1.     header("Location: " . strtr($_GET['page'], array("\r"=>"",    "\n"=>""))); 
  2. ?> 

2)使用最新版本的PHP

PHP最新版中,已經(jīng)不允許在HTTP表頭內(nèi)出現(xiàn)換行字符

隱藏HTTP響應(yīng)表頭

apache中httpd.conf,選項ServerTokens = Prod, ServerSignature = Off

php中php.ini,選項expose_php = Off

責(zé)任編輯:xikder 來源: DoDo's Blog
相關(guān)推薦

2012-04-12 16:05:50

2012-04-12 15:42:35

2012-04-12 13:36:59

2012-04-12 15:06:44

2012-04-12 15:27:44

2011-10-14 09:23:14

2012-04-12 11:28:04

2012-04-12 14:45:13

2010-01-04 09:39:39

Silverlight

2010-04-20 11:51:31

負載均衡

2010-07-28 22:20:10

RIP路由配置

2010-09-25 13:07:50

DHCP協(xié)議結(jié)構(gòu)

2010-07-13 13:59:04

ICMP協(xié)議

2011-03-30 10:07:02

Zabbix安裝

2010-07-13 14:44:11

SNMP服務(wù)設(shè)置

2010-07-14 16:21:31

Telnet服務(wù)配置

2009-09-23 17:36:26

Hibernate優(yōu)點

2013-07-03 11:28:47

2021-04-23 21:03:10

MySQL數(shù)據(jù)語法

2011-03-23 14:43:07

Nagios監(jiān)控
點贊
收藏

51CTO技術(shù)棧公眾號