2017.5.6,5.8~10總結


2017-5-6

xss

定位、查看源碼,
<input type="text" name="search" search_words="姜清新" value="&lt;script&gt;alert(/xss/)&lt;/script&gt;" class="search_inp" placeholder="姜清新" />
過濾了尖括號,也就是說用不了標籤

使用雙引號進行閉合,這種情況是在標籤內,用事件進行彈框
<input type="text" name="search" search_words="姜清新" value="" onmouseover="javascript:alert('XSS') "" class="search_inp" placeholder="姜清新" />

ctf

1.信息泄露第一步


git泄露,把文件拖下來打開就行


2.brain fuck語言

解密

https://tio.run/nexus/brainfuck#code=LVstLS0tLS0tPis8XT4rKy4tLS0tLS0uWy0-KysrKys8XT4uPi0tWy0tPisrKysrPF0-Li0tLS0uK1stPisrKzxdPisrLj4tWy0tLT4rPF0-LS4tLVstLS0tLS0-KzxdPisuPi1bLS0tPis8XT4uLS1bLS0tPis8XT4tLS4tLS0tWy0-KysrPF0-LlstLS0-KzxdPi0tLS0uKysrKysrKysrKy4rKysrKysrKysuLS0uLi0tLS0tLS0tLS0uLS0tLS4tLS0tLi0tLS0tLi0tWy0tLS0tPisrKzxdPi4tLS1bLT4rKzxdPi0uLS0tLS0tLS0tLS4rKysrKysrKysrKysrLlstLS0-KzxdPisrKy4&input=

用搜索引擎,搜一下就知道答案了。

廣東省紅帽杯攻防大賽WriteUp

tips:

下次做ctf還是要硬着頭皮上啊,然後要抓緊時間進行驗證,否則題目鏈接很快就不在了,就失去了一次測試的機會。


2017-5-8

對廣東移動的數據集市做複查,然後頁面只能用ie打開,複查的時候需要抓包,但是我的ie瀏覽器在虛擬機裏面,然後就用了fiddler,之前沒用過,查了下資料,發現挺好上手的。

fiddler在抓ie的包的時候,不用設置斷點,就會抓到所有的包,估計是因爲所有的包要經過fiddler所以瀏覽起來挺慢的。

還有就是包很多,有時候一時間沒辦法找到自己想要的某個特定的包,但是這個時候,比如要抓一個post包的時候,多提交幾次,就能在fiddler中比較容易找到啦。

使用Fiddler提高前端工作效率 (介紹篇)

使用Fiddler提高前端工作效率 (實例篇)


2017-5-9

對佛山移動的jiakuan頁面進行測試。

開始前,先要確認測試範圍,這個先要問清楚然後免得白做了很多工作。

感覺測試的時候效率不是很高啊,下次依據頁面的功能依次進行測試好了 。

然後還有寫報告的時候,好麻煩,下次要自己寫個乾淨規範的原始模板才行。

還有就是每一步驟都要截圖,避免重複測試啊,感覺效率挺低的。

繞過驗證碼驗證:

一般在爆破的時候,由於登錄界面存在驗證碼,往往就會在爆破的時候增添了不少難度。

這個時候就要嘗試繞過驗證碼。

參考list:

無聊入門一下傳說中的驗證碼識別技術,學習筆記

淺談某些網頁驗證碼以及繞過驗證


2017-5-10

python腳本:

python


POST /xxxx/xxxxxx/mobile/getValidateCode HTTP/1.1
Host: xxxx:9080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://xxxx
Content-Length: 18
Cookie: JSESSIONID=0000PFLIij1W3MgA9_fkHTEK-LA:1; uid=112
Connection: close

mobile=1363012xxxx

python腳本發包(未實現1小時發一次的功能):

# -*- coding:utf-8 -*-
__author__ = 'jerry'

import urllib
import urllib2
import cookielib
import webbrowser
import re
import os
import sys
import time


# GET the server IP and return URL
svrIP = 'xxxx:9080'
loginURL = 'http://' + svrIP +'/fsyd/app/main/toLogin'
PostURL = 'http://' + svrIP + '/fsyd/foshan/mobile/getValidateCode'

# cookie and opener
Cookie = cookielib.CookieJar()  # 創建CookieJar對象,自動管理cookie
# 創建pageOpener對象,把cookiejar塞進去,每次打開頁面都會自動使用cookie
pageOpener = urllib2.build_opener(urllib2.HTTPCookieProcessor(Cookie))

# open the login page
# 打開登錄頁面,獲取cookie
loginPageRequest = urllib2.Request(loginURL)
loginPageHTML = pageOpener.open(loginPageRequest).read()

# print loginPageHTML
# print Cookie

# login 時需要post的數據
PostData = {
    'mobile': '1363012xxxx',
}

# headers
PostHeader = {
    'Host': 'xxxx',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0',
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'X-Requested-With': 'XMLHttpRequest',
    'Referer': 'http://xxxx/fsyd/foshan/mobile/index',
     'Content-Length': '18',
    'Connection': 'close'
}

# request object請求對象,需要Post header和cookie

PostPageRequest = urllib2.Request(PostURL, urllib.urlencode(PostData), PostHeader)

# LOGIN: HTTP POST send:cookie,header發送到 default3.aspx
loginResponse = pageOpener.open(PostPageRequest)
PostPageResponse = pageOpener.open(PostPageRequest)

try:
    PostPageHTML = PostPageResponse.read()


except urllib2.HTTPError, f:
    print "Error code:", f.code
    print "Return content:", f.read()


print PostPageHTML
print '#########################################################'
print '成功將數據post上去'

一開始寫這個腳本的時候思路很混亂,主要想利用之前寫過的模擬登陸腳本來修改一下,但是出現了情況有點稍微不同,一下子思路轉不過來,無法解決。

這次一開始是想利用舊的已有的cookie,直接將數據post到服務器端。
而之前用的是cookiejar,先是在登錄頁面獲取了cookie然後放進cookiejar進行管理。

這個時候有2個方向:

  • 將已有的cookie放進直接cookiejar中
  • 不用cookiejar,使用別的方式直接發送cookie

1.要以cookiejar能接受的格式將cookie添加進去
2.查了下資料,好像可以用httplib發送cookie,還未用過

最後還是用了之前的方式,創建cookielib.CookieJar對象然後去方位頁面獲取cookie後,來自動管理Cookie,會稍微稍繁瑣一些,但是一旦創建,可供urllib2創建opener,後續的所有cookie更新和過期刪除都是自動處理的。

其實還是對cookie不是特別理解,才搞得寫了個腳本花了一個早上的時間,什麼情況下服務器會發放cookie?

Python使用Cookie字符串發起HTTP請求的幾個方法(2)

Python使用Cookie字符串發起HTTP請求的幾個方法(1)


cookie:

什麼是cookie?

Cookie是一種在客戶端保持HTTP狀態信息的常用技術,基於Cookie的會話保持常常出現在很多AX的部署案例中,尤其是涉及電子交易的系統部署中。此類系統往往要求負載均衡設備按照服務器下發的Cookie值實現會話保持。


Cookie的主要構成:

其中name=value是必選項,其它都是可選項。如下:

  • name:

一個唯一確定的cookie名稱。通常來講cookie的名稱是不區分大小寫的。

  • value:

存儲在cookie中的字符串值。最好爲cookie的name和value進行url編碼

  • domain:cookie

對於哪個域是有效的。所有向該域發送的請求中都會包含這個cookie信息。這個值可以包含子域(如:yq.aliyun.com),也可以不包含它(如:.aliyun.com,則對於aliyun.com的所有子域都有效).

  • path:

表示這個cookie影響到的路徑,瀏覽器跟會根據這項配置,像指定域中匹配的路徑發送cookie。

  • expires:

失效時間,表示cookie何時應該被刪除的時間戳(也就是,何時應該停止向服務器發送這個cookie)。如果不設置這個時間戳,瀏覽器會在頁面關閉時即將刪除所有cookie;不過也可以自己設置刪除時間。這個值是GMT時間格式,如果客戶端和服務器端時間不一致,使用expires就會存在偏差。

  • max-age:

與expires作用相同,用來告訴瀏覽器此cookie多久過期(單位是秒),而不是一個固定的時間點。正常情況下,max-age的優先級高於expires。

  • HttpOnly:

告知瀏覽器不允許通過腳本document.cookie去更改這個值,同樣這個值在document.cookie中也不可見。但在http請求張仍然會攜帶這個cookie。注意這個值雖然在腳本中不可獲取,但仍然在瀏覽器安裝目錄中以文件形式存在。這項設置通常在服務器端設置。

  • secure:

安全標誌,指定後,只有在使用SSL鏈接時候才能發送到服務器,如果是http鏈接則不會傳遞該信息。就算設置了secure 屬性也並不代表他人不能看到你機器本地保存的 cookie 信息,所以不要把重要信息放cookie就對了


大致的工作流程如下:

  1. 當客戶進行第一次請求時,客戶HTTP請求(不帶cookie)發送到負載均衡設備, 負載均衡設備根據負載均衡算法策略選擇後端一臺服務器,並將請求發送至該服務器,後端服務器在HTTP回覆的Header中執行set-cookie的動作,將包含服務器端cookie的回覆數據包發回負載均衡設備;

  2. 負載均衡設備會根據服務器回覆的Cookie值,在自身會話保持表中查詢,如果表中沒有相同的Cookie值記錄,那麼將此Cookie值作爲會話保持的“Key”值,將此次會話添加到會話保持表中;並將帶有服務器插入cookie值的HTTP回覆返回到客戶端;

  3. 當客戶請求再次發生時,客戶將帶有上次服務器cookie的HTTP請求發送到負載均衡設備,之後負載均衡設備根據會話保持表中該cookie值的會話保持記錄,將HTTP請求(帶有與上面同樣的cookie)發到會話保持中表記錄的服務器;

  4. 後端服務器進行請求回覆。

  5. 如此循環,只要在會話保持表中的空閒保持時間(Age)遞減到0之前,客戶端發送帶有相同Cookie值的HTTP請求,負載均衡設備始終會將這些請求分配到相同的服務器上。


(1)Cookie由服務器端生成,發送給客戶端。

(2)客戶端將Cookie的key/value 保存到某個目錄下的文本文件內。

(3)如果客戶端支持Cookie,下次請求同一網站時就可以Cookie直接發送給服務器。

(4)Cookie名稱和值由服務器端開發自己定義

在滲透測試中,經常會遇到不同的cookie名稱,通過cookie名稱好像也可以判斷服務器用的是什麼組件。


cookie流程的一個實例:

驗證如下:

打開沙盒路徑發現生成了Cookies文件夾,打開如下:

使用終端打開此Cookies文件夾內的文件如下:


Cookies如何傳遞

Cookies的信息是在Web服務器和瀏覽器之間傳遞的。保存在Http請求中。

(1)請求頁面

在請求一個頁面的Http頭中,會將屬於此頁面的本地Cookies信息加在Http頭中:
Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee

(2)頁面響應
如果頁面要求寫入Cookies信息,則返回的Http如下:
Set-Cookie: My.Common.TestCookieInfo=Pkid=999&TestValue=aaabbbcccdddeee; expires=Fri, 07-Aug-2009 03:40:59 GMT; path=/

Cookies如何查看

  • 查看Cookies的txt文件

  • 使用插件


Cookies高級知識:

1.Cookie 的限制

大多數瀏覽器支持最大爲 4096 字節的 Cookie。
瀏覽器還限制站點可以在用戶計算機上存儲的 Cookie 的數量。

大多數瀏覽器只允許每個站點存儲 20 個 Cookie;注意這裏的20個是指主鍵值,也就是20條Cookies記錄,但是每個Cookies記錄還可以包含若干子鍵,下面會詳細解釋。如果試圖存儲更多 Cookie,則最舊的 Cookie 便會被丟棄。有些瀏覽器還會對它們將接受的來自所有站點的 Cookie 總數作出絕對限制,通常爲 300 個。

2.Cookies的存儲格式

Cookies可以包含一個主鍵, 主鍵再包含子鍵。比如asp.net中獲取Cookies的格式是:
複製代碼 代碼如下:

Request.Cookies[key][subkey].ToString();

其中的key就是主鍵,subkey就是主鍵關聯的子鍵。

(1)本地磁盤存儲格式:

複製代碼 代碼如下:

My.Common.TestCookieInfo 
Pkid=999&TestValue=aaabbbcccdddeee 
localhost/ 
1536 
3059603968 
30021392 
2348960464 
30021191 
*

其中的Pkid=999&TestValue=aaabbbcccdddeee 是Cookies的值,由於使用了subkey=subvalue的格式, 所以此Cookies是包含子鍵的。

(2)Javascript中的Cookie格式

在Javascript中給的Cookie是一個字符串,通過document.cookies獲取。字符格式如下:
My.Common.SubKey=Pkid=999&TestValue=aaabbbcccdddeee; SingleKey=SingleKeyValue
上面的字符串包含了兩個Cookies,一個是不包含子鍵的SingleKey, 一個是包含pkid和TextValue兩個子鍵的My.Common.SubKey,兩個Cookie通過“;”分割。

(3)Asp.Net中的Cookies格式

和所有的服務器端語言一樣,Asp.Net中使用集合類保存Cookies集合:
複製代碼 代碼如下:

public sealed class HttpCookieCollection : NameObjectCollectionBase
{...}

通過HttpResquest和HttpResponse對象的Cookies屬性,可以獲取和寫入當前頁面的Cookies。

3.Cookies的內容編碼格式

Cookies的值中可以保存除了“;”以外的標點符號。但是不能保存漢字。保存漢字會出現亂碼。
所以對於Cookies中的內容要進行統一的編碼和解碼。

爲了在瀏覽器端和服務器端都能夠進行解碼和編碼, 所以要統一使用UTF編碼格式。

主要是因爲javascript中只能使用UTF編碼格式。

4.Cookies的Path屬性

Cookies的Path屬性表示當前的Cookies可以作用在網站的那個路徑下。
比如下面的兩個同名的Cookies:


允許存在兩個同名但是Path不同的Cookies。

無論是服務器端還是客戶端,在獲取時優先獲取本頁路徑下面的Cookies。
也就是說如果在、/chapter10/路徑下面的頁面, 獲取testKey這個Cookies的值,則只能獲取到testValue222222這個值。

5.Cookies的過期時間

如果保存Cookies時未設置過期時間, 則Cookies的過期時間爲“當前瀏覽器進程有效”,即和Session一樣關閉瀏覽器後則消失。在asp.net中還可以通過設置HttpCookie對象的過期時間爲DateTime.MinValue來指定此Cookies爲跟隨瀏覽器生效。(這句話來之不易啊,在腦袋等人的幫助下才查到的。)
如果設置了過期時間並且大於當前時間,則會保存Cookies值。
如果設置了過期時間但是小於等於當前時間,則清除Cookies值。

6.Cookies與Session

有時我們會忽略Cookies與Session的關係。但是兩者是密不可分的。
Session的唯一標示:SessionID是通常保存在Cookies中的(也可以保存在URL中)。對於Asp.Net而言,SessionID保存在鍵值爲“ASP.NET_SessionId”的Cookies中,如圖:

因爲Cookies的存儲數量是有限制的,所以我們的系統在保存Cookies的時候一定要注意防止沖掉這一個關鍵的Cookies。在下文介紹的最佳實踐-以強對象方式保存Cookies的代碼中特意對這個Cookies做了處理。

7.cookie加密:

取決於cookie的敏感屬性,他們通常被編碼加密來包含其中的數據。 —《owasp-testing-guide-v4-zh》

在設置Cookies的屬性時,有一個選項Secure用來控制Cookie的加密特性。
如果通過 SSL 連接 (HTTPS) 傳輸 Cookie,則爲 true;否則爲 false。默認爲 false。

如果我們保存一個Cookies並設置加密,那麼在非HTTPS的頁面中,無論是使用javascript還是服務器端都無法獲得此Cookies。但是在本地依然可以看到此Cookies的存在。


8.Cookies與Ajax

如果Ajax請求訪問一個服務器頁面,此服務器頁面是可以向用戶瀏覽器寫入Cookies和Session的。

增加cookie安全性:

  • secure屬性
    當設置爲true時,表示創建的 Cookie 會被以安全的形式向服務器傳輸,也就是只能在 HTTPS 連接中被瀏覽器傳遞到服務器端進行會話驗證,如果是 HTTP 連接則不會傳遞該信息,所以不會被竊取到Cookie 的具體內容。

  • HttpOnly屬性
    如果在Cookie中設置了”HttpOnly”屬性,那麼通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,這樣能有效的防止XSS攻擊。

對於以上兩個屬性,
首先,secure屬性是防止信息在傳遞的過程中被監聽捕獲後信息泄漏,HttpOnly屬性的目的是防止程序獲取cookie後進行攻擊。
其次,GlassFish2.x支持的是servlet2.5,而servlet2.5不支持Session Cookie的”HttpOnly”屬性。不過使用Filter做一定的處理可以簡單的實現HttpOnly屬性。GlashFish3.0(支持servlet3.0)默認開啓Session Cookie的HttpOnly屬性。
也就是說兩個屬性,並不能解決cookie在本機出現的信息泄漏的問題(FireFox的插件FireBug能直接看到cookie的相關信息)。


參考lists:

Cookies的各方面知識(基礎/高級)深度瞭解

Cookie的原理解析——利用服務器發送來的Cookie進行判斷並保存一些信息


會話令牌:


本地js加密&調試:

view-source:http://211.139.201.104:9080/fsyd/wego/js/des.js

還沒試着怎麼去本地調試


others參考list:

密碼邏輯漏洞小總結

總結:

什麼情況下服務器會發放cookie?
- 查了資料後,簡單地說,看第一次訪問頁面時,看頁面的Response有沒set-cookie字段
- 再具體一些就看,cookie設置中的domain字段寬鬆與否,如果比較寬鬆,那麼一開始獲得cookie就可以一直用下去

發佈了55 篇原創文章 · 獲贊 21 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章