首页 > 数据库 >SQL注入之万能用户名

SQL注入之万能用户名

时间:2023-08-23 21:01:47浏览次数:57  
标签:username 语句 用户名 万能 userid SQL password select

分析代码

在安装的cms数据库目录C:\phpStudy\WWW\cms\admin下找到login.action.php文件,查看第20行,发现如下php代码:

$user_row = $db->getOneRow("select userid from cms_users where username = '".$username."' and password='".md5 ( $password ) ."'");
if (!empty($user_row )) {
	setcookie (userid, $user_row ['userid'] ); 
	header("Location: index.php");
}else{
	exit("<script>alert('用户名或密码不正确!');window.history.go(-1)</script>");

这段代码先用select语句做了数据库的查询操作,查询用户输入的用户名和密码(密码做md5加密),然后将查询的结果给if语句做判断,如果根据用户名密码不为空且能查到userid,就登录成功;否则,输出**“用户名或密码不正确”**。

如果我们能使用一个万能用户名,使if语句的判断永远为真,那么用任意密码就能成功登录数据库。

原理

将找到的这段select语句

"select userid from cms_users where username = '".$username."' and password='".md5 ( $password ) ."'"

去除php格式改写为

select userid from cms_users where username = 'admin' or '1'='1' and password='*****'

或直接用#注释掉后面的语句

select userid from cms_users where username = 'FUZZ' or '1'='1' # and password='*****'

这段语句中有逻辑与和逻辑或,以第二种方法为例,在逻辑运算中,一般先做与运算,再做或运算:

'1'='1' and password='*****' =false
'FUZZ' or false = true

也就是说,这段代码如果由数据库中if语句判断,它的结果永远为true,这样就能实现用万能用户名登录数据库的目的。

实现

输入万能用户名和任意密码:

FUZZ' or 1=1 #
****

FUZZ后面的分号是为了让该用户名在username = '$username’语句中与前一个分号共同组成完整的字符,不能省略。

输入如下:

SQL注入之万能用户名_数据库

登录成功:

SQL注入之万能用户名_数据库_02

标签:username,语句,用户名,万能,userid,SQL,password,select
From: https://blog.51cto.com/u_16227132/7207112

相关文章

  • PLSQL导出awr报告
    begindbms_workload_repository.create_snapshot();end;1、准备查询dbidselectdbidfromv$database;查询instance_numberselectinstance_numberfromv$instance;查询历史快照selectSNAP_ID,dbid,SNAP_LEVEL,BEGIN_INTERVAL_TIMEfromdba_hist_snapshotorderbySN......
  • 去重sql
    查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select*from表whereIdin(selectIdfrom表groupbyIdhavingcount(Id)>1)2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录DELETEfrom表WHERE(判断字段)IN(SELECT判断......
  • SQL注入之报错注入
    报错注入是什么?在注入点的判断过程中,发现数据库中SQL语句的报错信息,会显示在页面中,因此可以利用报错信息进行注入。报错注入的原理,就是在错误信息中执行SQL语句。触发报错的方式有很多,具体细节也不尽相同。此处建议直接背公式,将公式带换掉1=1的部分。报错注入就是在判断SQL注......
  • Mysql学习
    ​Mysql​数据库(DataBase,简称DB):存储和管理数据的仓库。数据库管理系统(DataBaseManagementSystem,简称DBMS)DBMS是操作和管理数据库的大型软件。将来我们只需要操作这个软件,就可以通过这个软件来操纵和管理数据库了。此时又出现一个问题:DBMS这个软件怎么知道要操作的......
  • MySQL 入门
    0x01简介数据库(Database)是按照数据结构来组织、存储和管理数据的仓库数据库管理系统(DatabaseManagementSystem,又称DBMS)主要用于对数据库的操作与管理,是一种软件,如MySQL0x02安装配置(1)Mac使用命令brewinstallmysql下载并安装使用命令mysql.serverstart启动My......
  • SQL注入基础学习5
    SQL注入基础学习5二、靶场实操(开始先学习手工,后面的话,可以采用sqlmap等自动化工具)靶场采用sqli-labs21、第21关第21关是也是属于cookie注入的登陆后查看页面或者报头信息(如图一),会发现,输入时uname=admin1,但是页面上显示的YWRtaW4x说明被编码了,试一下bsae64解码(如图二),图......
  • MySQL 查看SQL进程和杀掉进程
    要在MySQL中查看正在执行的长时间运行的SQL语句,您可以使用SHOWPROCESSLIST命令。这个命令显示了当前MySQL服务器上正在执行的所有进程的信息,包括每个进程的ID、用户、主机、数据库、命令和执行时间等信息。SHOWFULLPROCESSLIST;使用FULL关键字可以显示完整的SQL......
  • 支持多数据源联合查询的SQL运行引擎sycnany-SQL使用类型注解和类型转换
    使用介绍安装和配置使用自定义函数sycnany-SQL作为SQL运行引擎并不需要提前定义Schema信息,而且很多数据源本身就是无Schema信息的,例如NoSQL数据库MongoDB,所以从数据源查询数据和运行计算默认直接使用输入数据的类型完成查询和计算,此时查询数据或执行计算可能因数据类型不匹配产......
  • [MySQL]递归生成数据行
    来源:https://baijiahao.baidu.com/s?id=1744215294693190607&wfr=spider&for=pc DEMO:WITHRECURSIVEcteAS( SELECT1asnUNION SELECTn+1FROMcteWHEREn<30)SELECT*FROMcte; 递归生成最近30天WITHlast30dayAS( WITHRECURSIVEcteAS( SEL......
  • mysql8.0 新建数据库,迁移数据,账号权限,和mysql5.0的兼容性问题等踩坑记录
    项目里一直用的是mysql5.7,这次立了个新项目,我果断换上mysql8.0,心想肯定新版的性能更好更强大啊,其实无形间也踩了不少坑,mysql8.0和mysql5.0的小改动(升级)引发的兼容性问题。。一、mysql8.0搭建首先是搭建mysql8.0环境,这里当然使用时下最方便的docker-compose方式了my.cnf如下[m......