CTF-WEB-SQL
关于**’or 1=1#** sql万能语句的笔记……
sql注入万能语句
‘or 1=1#
'or 1=1 #
一般在我们登陆的时候都需要输入:username和password
输入之后程序通过验证机制来判断我们所输入的账户和密码的而正确性,并保护我们的信息
<?php
$conn=@mysql_connect("localhost",'root','') or die("数据库连接失败!");;
mysql_select_db("injection",$conn) or die("您要选择的数据库不存在");
$name=$_POST['username'];
$pwd=$_POST['password'];
$sql="select * from users where username='$name' and password='$pwd'";
$query=mysql_query($sql);
$arr=mysql_fetch_array($query);
if(is_array($arr)){
header("Location:manager.php");
}else{
echo "您的用户名或密码输入有误,<a href=\"Login.php\">请重新登录!</a>";
}
?>
这个段代码就是验证我们输入的账户和密码是否正确的一个方式。
拿出一个重要的语句来讲:
$sql="select * from users where username='$name' and password='$pwd'";
1
通过阅读和一点sql语言的基础知识很容易知道上面的代码主要是在进行数据库中的查询,如果正确就登陆进去了,如果不正确当然无法登录。
如果我们在用户名中输入;
’or 1=1#
那么我们的代码就变成了这样;
select * from users where username='’or 1=1# and password=aabcd
其中 # 在sql是注释的意思。
而且在sql中where相当于判断句,这句话又是由 or 连接的,所以 username=’’ 和 1=1 中有一个为真就为真,这句话就成立。1=1肯定为真,那么这段话就变成了
select * from user
那么它根本就不会在乎你password上输入的是什么东西了,也无法去判断你的username到底在不在表中。
所以要谨慎使用这样子的判断,会存在很大的漏洞。
学习链接: