XEE相關(guān)
一笼裳、簡介
https://www.cnblogs.com/xhds/p/12327732.html
XXE漏洞全稱(XML External Entity Injection)即xml外部實(shí)體注入漏洞,XXE漏洞發(fā)生在應(yīng)用程序解析XML輸入時(shí),沒有禁止外部實(shí)體的加載老速,導(dǎo)致可加載惡意外部文件,造成文件讀取、命令執(zhí)行、內(nèi)網(wǎng)端口掃描姆打、攻擊內(nèi)網(wǎng)網(wǎng)站、發(fā)起dos攻擊等危害肠虽。xxe漏洞觸發(fā)的點(diǎn)往往是可以上傳xml文件的位置幔戏,沒有對上傳的xml文件進(jìn)行過濾,導(dǎo)致可上傳惡意xml文件税课。
二闲延、繞過技巧
編碼繞過:iconv - f utf-8 -t utf-16 1.xml > 2.xml 繞過waf
-
關(guān)鍵字過濾
1.繞過SYSTEM的過濾:PUBLIC+隨機(jī)字符串 約等于 SYSTEM
2.繞過遠(yuǎn)程dtd過濾:先寫到dtd文件,在提交dtd韩玩,文件名改成.d就行
-
其他繞過:空格
PHP相關(guān)
一垒玲、md5繞過 (值不一樣的,但是md5的值一樣)
-
V1:雙等號的弱相等:利用0exxx == 0exxxx找颓,md5(string)-> 0exxxxxx
繞過:https://blog.csdn.net/weixin_45897324/article/details/108961503
eg.s878926199a合愈;s155964671a;s214587387a击狮;s214587387a
-
V2:三個(gè)等號的強(qiáng)相等:利用false===false佛析,md5(array)-> false
繞過:a[]=xxxx
-
V3:強(qiáng)項(xiàng)等且強(qiáng)制要求a是字符串,md5碰撞
練習(xí)1:一個(gè)數(shù)字小于2020彪蓬,+1大于2021
解:intval函數(shù)是取整數(shù)操作寸莫,不僅可以處理十進(jìn)制,還可以是八進(jìn)制和科學(xué)計(jì)數(shù)法(php5有效档冬,php7無效)傳入1e5
intval(1e5) = 1 (非數(shù)字開始后面的全部丟棄)
intval(1e5+1)=100001(+1之后intval就當(dāng)作科學(xué)計(jì)數(shù)法處理了)
練習(xí)2:一個(gè)值的md5 等于這個(gè)值
解:md5(0exxxx)==0exxxx 腳本爆破
練習(xí)3:不是回文序列膘茎,但是正序和逆序取整之后的值相等
- num=numpositive說明需要傳一個(gè)整數(shù),但是正則中又加入了小數(shù)點(diǎn):利用浮點(diǎn)數(shù)精度繞過
- 回文繞過:100.0010酷誓,小數(shù)點(diǎn)最后加0
- 最終payload
練習(xí)4:一個(gè)數(shù)的md5的md5等于本身
解:爆破得到結(jié)果 0e1138100474滿足要求
二披坏、hash長度擴(kuò)展攻擊
https://www.cnblogs.com/pcat/p/5478509.html。一般題目是這樣的:
準(zhǔn)備了一個(gè)密文(secret)和一些數(shù)據(jù)(“admin”)構(gòu)造成一個(gè)字符串呛牲,并且使用了MD5之類的哈希函數(shù)生成了一個(gè)哈希值(也就是所謂的signature/簽名刮萌。hash_admin)密文長度是已知量驮配。
讓攻擊者可以提交數(shù)據(jù)(username)以及哈希值(hash_user)娘扩,雖然攻擊者不知道密文(secret)
服務(wù)器把提交的數(shù)據(jù)(username)跟密文(secret)拼接,判斷哈希后是否等于提交的哈希值(hash_user)
-
解題工具:hashpump(https://github.com/bwall/HashPump)
參數(shù):hash_admin壮锻;“admin”琐旁; secret的長度; “ abc”(任意字符串)
結(jié)果:第一行是新的簽名猜绣,也就是hash_user; 第二行就是username灰殴,把\x替換為%后post提交
3e67e8f0c05e1ad68020df30bbc505f5
admin\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\abc
三、變量覆蓋
- extract :$a=“Cat”掰邢, 直接覆蓋原來的值“Original”
- $$可變變量
- parse_str(): 把查詢字符串解析到變量中牺陶,如果沒array 參數(shù)伟阔,則該函數(shù)設(shè)置的變量將覆蓋已存在的同名變量。
練習(xí)1:parse_str
解:首先要求使用GET提交id參數(shù)掰伸,然后parse_str($id)對id參數(shù)的數(shù)據(jù)進(jìn)行處理皱炉,再使用判斷$a[0] != ‘QNKCDZO’ && md5($a[0]) == md5(‘QNKCDZO’)
的結(jié)果是否為真,為真就返回flag狮鸭。
只需要找到一個(gè)字符串md5后的結(jié)果是0e開頭后面都是數(shù)字的就行合搅,如240610708,s878926199a歧蕉。之后利用parse_str函數(shù)將a[0]賦值為240610708 :GET請求id=a[0]=240610708灾部,這樣會將a[0]的值覆蓋為240610708
練習(xí)2: extract
https://blog.csdn.net/qq_38154820/article/details/113874923
解:模板渲染
- file_get_contents函數(shù)讀取template數(shù)組中tp對應(yīng)的value,tp的通過get方式獲得惯退,只需要用extract函數(shù)覆蓋template的值赌髓,就可以利用tp參數(shù)控制對應(yīng)的value值:var[template][tp1]=template.php
?var[template][tp1]=aaa
等同于輸入了$template=array('tp1'=>'aaa');
全部覆蓋了template
- 實(shí)現(xiàn)變量覆蓋后催跪,訪問一下路徑看到template.php源碼春弥,這里file_get_content讀取到的并不是直接顯示,而是被template.php寫入到了某個(gè)地方叠荠。
后續(xù)可以用file_get_content讀取我們輸入的data流匿沛,然后被寫入。file_get_contents觸發(fā)phar榛鼎。
- phar八股文逃呼,生成.phar文件
echo file_get_contents("php://filter/convert.base64-encode/resource=phar.phar");
- payload:
?var[template][tp1]=data://text/plain;base64,R0lG....(上面的輸出)AAR0JNQg%3D%3D&tp=tp1
四、隨機(jī)數(shù)問題
Mt_rand()偽隨機(jī)數(shù):種子固定者娱,隨機(jī)數(shù)就固定抡笼。
注意php版本,版本不同種子一樣的話黄鳍,隨機(jī)數(shù)也會不一樣
問題場景:給出前10個(gè)隨機(jī)數(shù)推姻,求出剩下的10個(gè)20個(gè)隨機(jī)數(shù)。
解決:
-
php_mt_seed工具框沟,可以根據(jù)隨機(jī)數(shù)恢復(fù)種子(兩種模式:多個(gè)隨機(jī)數(shù)限制范圍/單個(gè)隨機(jī)數(shù)不限制范圍)
(需要用第一個(gè)生成出的隨機(jī)數(shù)去猜種子)
-
不需要爆破:https://www.anquanke.com/post/id/196831
(適用于種子定時(shí)更新且第一個(gè)隨機(jī)數(shù)不知道的情況)
五藏古、遠(yuǎn)程代碼執(zhí)行(有點(diǎn)復(fù)雜,沒跟上)
無參數(shù)RCE:gem-love.com/ctf/530.html
正則要求:最里面的括號里不能有參數(shù)
六忍燥、create_function拧晕、disable_function
略
Python相關(guān)
一、Flask框架的Debug模式
https://baijiahao.baidu.com/s?id=1675623348653265301&wfr=spider&for=pc
有一個(gè)PIN碼梅垄,固定的厂捞。訪問一個(gè)會報(bào)錯的頁面,點(diǎn)擊下圖紅色箭頭那里。
輸入PIN碼就可以得到python的console靡馁。
這個(gè)pin碼需要知道其他信息才能知道欲鹏,這些其他信息的獲得一般是考察其他漏洞點(diǎn)。我們?nèi)绻軌騻卧爝@六個(gè)值我們就能夠生成一個(gè)一模一樣的PIN碼了臭墨。debug pin由六個(gè)值決定:
用戶
flask.app
Flask
flask目錄下的一個(gè)app.py的絕對路徑
當(dāng)前電腦的MAC地址貌虾,為mac地址的十進(jìn)制表達(dá)式
首先嘗試讀取/etc/machine-id或者 /proc/sys/kernel/random/boot_i中的值,若有就直接返回裙犹;假如是在win平臺下讀取不到上面兩個(gè)文件尽狠,就去獲取注冊表中SOFTWARE\Microsoft\Cryptography的值,并返回
二叶圃、Flask Session
- 偽造session:先獲得key袄膏,解密現(xiàn)有的session獲得格式,然后加密自己構(gòu)造的session
https://blog.csdn.net/weixin_42172261/article/details/104454478
- 結(jié)合ssti 模板注入 {{}}
https://www.dazhuanlan.com/mayulove/topics/1196791
JavaScript相關(guān)
一掺冠、類型污染
練習(xí)1:first和second不相等沉馆,但是加上salt后sha1的值相同
解:字符串的“0”(first)和數(shù)字0(second),加上一個(gè)字符串“0”(salt)
但這樣是不對的德崭,因?yàn)閿?shù)字沒有l(wèi)ength斥黑,改用數(shù)組 ["0"]
二、原型鏈污染
補(bǔ)充知識
1. 文件讀取的繞過
https://www.cnblogs.com/zaqzzz/p/10288162.html
空格: ${IFS} $IFS $IFS$9 , < <> %09
-
關(guān)鍵字(eg. 繞過php過濾) :
ph\p ph‘’p p[h]p p{a..z}p
變量拼接(a=test.ph;b=p;cat $a$b)
通配符(ph? 或 ph*)
-
內(nèi)聯(lián)執(zhí)行(將反引號內(nèi)命令的輸出作為輸入執(zhí)行)
cat `ls` //執(zhí)行l(wèi)s輸出 index.php 和 flag.php 眉厨。然后再執(zhí)行 cat index.php;cat flag.php
base64編碼 : base64( "cat test.php")=Y2F0IHRlc3QucGhw
- 讀取文件的替代指令:cat more less fmt nl short rev