精华内容
下载资源
问答
  • 通过两个ctf题来做讲解,第一个很简单,第二个多了些限制http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.phphttp://ctf5.shiyanbar.com/web/wonderkun/web/index.html 万能密码原理万能密码...

    8f7823b7920c4988e2c18c5708f638c6.png

    434f53907657640d7103c9eecbfd7570.gif通过两个ctf题来做讲解,第一个很简单,第二个多了些限制http://lab1.xseclab.com/sqli2_3265b4852c13383560327d1c31550b60/index.phphttp://ctf5.shiyanbar.com/web/wonderkun/web/index.html 3e5ad1caf958da73bb9384dffd17a465.gif万能密码原理万能密码漏洞都是因为提交字符未加过滤或过滤不严而导致的。
    $sql = "SELECT * FROM user WHERE username = '{$username}' AND password = '{$password}'";$res = $dbConnect->query($sql);
    后台数据库中会执行
    select * from user where username = ' ' and password = ''
    两种情况:1.已知账户名既然知道了username,就可以将后面的注释使逻辑为真常用方法:

    bc5c946b1d985e72628a2b32e42aec61.png

    2.未知账户名

    需要通过构造sql语句使where为真常用方法:

    6a6eaf090a43620e07a2568473d6f85d.png

    8c51597df7236223f74f2d0b5e43b5c0.png

    fe9510dfb3726db14f8db6b348ac1e01.png

    ' '+' ' 相当于false(0)

    5dc579b67c65bc5c3d331143b0920d0f.png

    ' ' = ' ' 为Ture(1)' '+' ' 和 ' '=' ' 和 0 = 0都是为了使where username = ' ' and password = ' '成立where 0 and 0 或 where 1 and 1bcfe713b3a7ece6d101b1f9c6bde9d09.gif结合例子讲解

    第一题:

    源码中告诉我们有个用户名是admin

    c48b8b39a6db117eb9bed40166cc4f71.png

    f1179eb2de9a079b2f5206a954693ad3.png

    假如我们并不知道admin这个用户

    b87de4bce6a8774c326828d8ecb6a831.png

    发现也可以成功绕过

    第二题

    我们不知道任何用户名的情况下

    1e9a9e60f23f834b071601cc69113bc0.png

    65d9a5581db4c3a3e4d1028527d0f387.png

    我们发现貌似不行了,or被过滤了。看看都过滤了哪些字符

    24088c85e7431a43ee26e818f67f9e01.png

    ae613d791a969fd764cf3a94e750241b.png

    可以看到# and  or都被过滤了,+和=没有被过滤

    898c3b7a97e24bcaf58893d78361eba7.png

    1d4e8ca20ff3c2e032e238a52cced8de.png

    20229c5392da6ecfd0377a487040ae64.png

    36ca4b6cd36e07b36e467b7e73af97f7.png

    最终通过' ' = ' ' 获得了flag

    6c39d31afadc722c9c662fd859f57f54.png 对于select * from user where username = ' ' and password = ''来说只要我们能够构造出合适的语句使where后面的为真就可以了本质上就是使where 1 and 1 或 where 0 and 0
    内 容 来 源 | 五 号 黯 区

     QQ 交流群 | 662588477

           官 网 地 址 | www.dark5.net

    50b10b41c829a6a39dcf6550044029aa.png
    展开全文
  • 什么是sql注入?所谓SQL注入,就是通过把SQL命令插入到 Web表单... 登录框(页面请求查询)二、SQL注入原理SQL注入(SQLInjection)是这样一种漏洞:当我们的Web app 在向后台数据库传递SQL语句进行数据库操作时。如果对...

    什么是sql注入?

    所谓SQL注入,就是通过把SQL命令插入到 Web表单提交 或 URL 或 页面请求等的查询字符串中,最终达到欺骗服务器执行恶意的SQL命令。

    注:从这句话看出常见的注入点在

    a. web表单

    b. URL链接中

    c. 登录框(页面请求查询)

    二、SQL注入原理

    SQL注入(SQLInjection)是这样一种漏洞:当我们的Web app 在向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。

    SQL注入漏洞的本质是把用户输入的数据当做代码来执行,违背了"数据与代码分离"的原则。

    SQL注入漏洞有两个关键条件,理解这两个条件可以帮助我们理解并防御SQL注入漏洞:

    用户能控制输入的内容

    Web应用执行的代码中,拼接了用户输入的内容

    以sql万能密码为例(在登录框中注入)

    (查表语句)select * from users(表名) where id='1' and paw='22'

    在登录框中写入1' or 1='1

    a3cdfc4f382000866328f00a55b2bed8.png

    在数据库底层实际上是做了个select操作:select * form users where id=' 1' or 1='1 ' and paw= ' 1 ' or 1 = '1'

    注意在用户名和密码两个地方的框中都要写

    (2) 写入1'='1'

    select * from users where id='1'or 1!='1' and paw='22'

    相当于or后都为假,要知道用户名就可以登录

    从以上可以看出sql注入就是本来我只有我能操作数据库,只是让你输入内容就走,而你却输入命令,从而在我不知情下操作数据库

    三、SQL注入的产生

    动态字符串构建

    不正确的处理转义字符(宽字节注入)

    不正确的处理类型(报错泄露信息)

    不正确的处理联合查询

    不正确的处理错误(报错泄露信息)

    不正确的处理多次提交(二次注入)

    不安全的数据库配置

    默认预先安装的用户

    以root、SYSTEM 或者Administrator权限系统用户来运行

    默认允许很多系统函数(如xp_cmdshell, OPENROWSET 等)

    四、SQL注入的作用

    绕过登录验证(万能密码等)

    获取敏感数据(获取数据库中的信息)

    文件操作(读取、写入文件等)

    执行系统命令 等等

    五、常见的SQL注入分类

    A.按照数据库执行结果是否显示到页面上分类

    a.SQL回显注入(数据库的执行结果直接显示到页面上)

    SQL回显注入又可以分为:

    01:union联合查询注入

    02:报错注入

    b.SQL盲注(不显示到页面上)

    SQL 盲注又可以分为:

    01:布尔盲注

    02:时间注入

    B.按照注入点类型来分类

    数字型注入点

    在 Web 端大概是 http://xxx.com/news.php?id=1 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。

    字符型注入点

    在 Web 端大概是 http://xxx.com/news.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='admin'。有时候是是双引号:where name="admin

    展开全文
  • 前言很多同学问注入bypass的一些细节,刚好前几天晚上做了一个梦,梦里进行了一些测试,今天觉得应该记录一下。本文纯属虚构,如有雷同纯属放屁。正文梦里发现了一处mssql报错注入然后发现有云锁云锁.jpg(假装有图)...

    前言

    很多同学问注入bypass的一些细节,刚好前几天晚上做了一个梦,梦里进行了一些测试,今天觉得应该记录一下。

    本文纯属虚构,如有雷同纯属放屁。

    正文

    梦里发现了一处mssql报错注入

    cdeac162480c0838b6d7f16f0ca28d02.png

    然后发现有云锁

    云锁.jpg(假装有图)

    用自己写的的脚本生成垃圾数据

    #coding=utf-8import random,stringfrom urllib import parse# code by yzddMr6varname_min = 5varname_max = 15data_min = 20data_max = 25num_min = 50num_max = 100def randstr(length):    str_list = [random.choice(string.ascii_letters) for i in range(length)]    random_str = ''.join(str_list)    return random_strdef main():    data={}    for i in range(num_min,num_max):        data[randstr(random.randint(varname_min,varname_max))]=randstr(random.randint(data_min,data_max))    print('&'+parse.urlencode(data)+'&')main()

    如果是POST型就直接把垃圾数据放到你要注入的字段前后,如果是GET型就把他转为POST型再放垃圾数据。

    88b2a4349f5a0de52b5ee4d4049cee54.png

    第一次可能生成太少了,还是被云锁drop包

    3bf6fa7d3730ec1ca3cc35e134cc1320.png

    多粘贴几次,最后发现在数据包到30KB左右就可以正常注入了

    509825d69b91a0b11a4cedf7e31ad14a.png

    然后就可以查数据了

    5efbca2b002898f70950c2cf7a5b9d40.png

    测试数据

    目前为止的bypass测试数据:

    云锁:30KB宝塔:30KB阿里云:200+键值对安全狗没测过,有空测一下

    建议先抓包手工试一下到底多少垃圾数据合适,没问题之后再上sqlmap,不然容易ban ip

    回答几个问题

    为什么不直接在get上加垃圾数据?因为GET型有长度限制,有时候还没加到能bypass的程度服务器就报错。

    为什么不用一个超长字符串要用这么多键值对?因为经过测试,超长字符串对于阿里云没用,超多垃圾键值对才有用。

    适用类型有哪些?在梦里的测试中本方法对于市面上绝大多数waf都可以用。

    最后

    然后梦就醒了,收拾一下准备去工地搬砖了。

    a60c83197924c2307a19729c060be968.png

    点赞,转发,在看

    欢迎加入作者的知识星球

    39609569940be6caf30604c350b2233e.png

    展开全文
  • SQL注入万能密码

    千次阅读 2020-07-09 20:31:08
    SQL注入万能密码 SQL注入万能密码实际上是利用了网址后台的漏洞,打开下面的网址不用密码和账号也可以登录后台 http://www. .com/admin/admin_login.asp 账号:djlfjdslajdfj(随意输入) 密码:1‘or’1’=...

    SQL注入之万能密码

    SQL注入的万能密码实际上是利用了网址后台的漏洞,打开下面的网址不用密码和账号也可以登录后台
    http://www. .com/admin/admin_login.asp
    账号:djlfjdslajdfj(随意输入)
    密码:1‘or’1’=‘1
    1. 用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。用户登录时,后台执行的数据库查询操作(SQL语句)是:【Selectuser_id,user_type,email From users Where user_id=’用户名’ And password=’密码’】。
    2.由于网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入用户名【admin】和万能密码【2’or’1】时,执行的SQL语句为:【Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’or’1’】。3.由于SQL语句中逻辑运算符具有优先级,【=】优先于【and】,【and】优先于【or】,且适用传递性。因此,此SQL语句在后台解析时,分成两句:【Select user_id,user_type,email From users Where user_id=’admin’ And password=’2’】和【’1’】,两句bool值进行逻辑or运算,恒为TRUE。SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。
    输入用户名【admin】,密码【2’or’1】,即可登录成功。(加粗部分为切入点,其他随意填写)
    在网站开发中也有些人是这样做的,T_users是表名,username是数据库中字段名,name和pwd是变量。
    "select * form T_users where username=’ “+ name +” ’ “+” and password=’ “+ pwd +” ’ ";
    如果变量name赋值为root,pwd变量赋值为root的话,这根本不会有什么问题,和上面一模一样。
    即等价于"select * from T_users where username= ‘root’ and password= ‘root’ "
    3.但是如果变量name赋值:随意输入,而pwd被赋值 1 or 1=1 ,
    那么整个语句就变成了这个样子:
    "select from T_users where username=‘adsfafsf’ and password=‘1 or 1=1’ "
    可以看出,此时整个查询语句返回值始终为true.
    万能密码形式:‘or’=‘or’ *
    例如:select * from table where username=’’ or ‘=’ or ‘’ and password=’’; //and优先于or,且’='为真
    类似形式还有:
    “or"a”="a
    ')or(‘a’='a
    ")or(“a”="a
    ‘or 1=1–
    “or 1=1–
    'or”=’
    'or 1=1%00
    'or 1=1/

    admin’ or 1=1/*
    SQL注入的漏洞源码如下(输入万能密码即可登录)
    using System;
    using System.Data.SqlClient;
    namespace 第一个数据库程序
    {
    class Program
    {
    static void Main(string[] args)
    {
    //解决数据库添加不进去数据,两个mdf问题冲突问题代码,即.
    /***************************************************/

            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\")
                || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
            /************************************************/
    
            Console.WriteLine("请输入用户名:");
            string user = Console.ReadLine();
            Console.WriteLine("请输入密码:");
            string pwd = Console.ReadLine();
      
            //与数据库建立连接
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();//打开连接
    
                //创建sql语句命令
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    //SQL语句查询命令
                    cmd.CommandText = " select * from [T_users] where username='"+ user + "'" + "and password='" + pwd + "'" ;
    
                    int i = Convert.ToInt32(cmd.ExecuteScalar());//返回第一行第一列的值
                    if (i > 0)
                    {
                        Console.WriteLine("登陆成功!");
                    }
                    else 
                    {
                        Console.WriteLine("登陆失败!");
                    }
                }
            }
    
            Console.ReadKey();
        }
    }
    

    }在这里插入图片描述
    修改源码:(万能密码不可用)
    using System;
    using System.Data.SqlClient;
    namespace 第一个数据库程序
    {
    class Program
    {
    static void Main(string[] args)
    {
    //解决数据库添加不进去数据,两个mdf问题冲突问题代码,即.
    /***************************************************/

            string dataDir = AppDomain.CurrentDomain.BaseDirectory;
            if (dataDir.EndsWith(@"\bin\Debug\")
                || dataDir.EndsWith(@"\bin\Release\"))
            {
                dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;
                AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);
            }
            /************************************************/
    
             Console.WriteLine("请输入用户名:");
            string user = Console.ReadLine();
            Console.WriteLine("请输入密码:");
            string pwd = Console.ReadLine();
    
            //与数据库建立连接
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True"))
            {
                conn.Open();//打开连接
    
                //创建SQL命令语句
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    //SQL查询语句
                    cmd.CommandText = "select * from T_users where username=@NAME and password=@PW";
    
                    cmd.Parameters.Add(new SqlParameter("NAME", user));//NAME 和PW是参数,名字自己随意取,但必须和上面的一致。
                    cmd.Parameters.Add(new SqlParameter("PW", pwd));
    
                    int i = Convert.ToInt32(cmd.ExecuteScalar());//函数返回第一行第一列的值
                    if (i > 0)
                    {
                        Console.WriteLine("登陆成功!");
                    }
                    else
                    {
                        Console.WriteLine("登陆失败!");
                    }
                }
            }
    
            Console.ReadKey();
        }
    }
    

    }
    在这里插入图片描述
    注:部分转自百度

    展开全文
  • sql注入万能密码总结万能密码万能密码原理万能密码asp aspx万能密码PHP万能密码jsp 万能密码 万能密码 啊这,一般用来ctf登录的时候试试, 这是sqli-labs用的时候,我来记录一下 万能密码原理 原验证登陆语句: ...
  • SQL注入-万能密码注入原理

    千次阅读 2018-08-01 18:13:38
    查询数据库就是执行SQL语句。 用户登录时,后台执行的数据库查询操作(SQL语句)是: 【Select user_id,user_type,email From users Where user_id=’用户名’ And password=’密码’】。 2.由于网站后台在进行...
  • 就是在登录、注册、input中输入一些影响sql语句的代码导致你的sql语句出现问题,比如说这个问题:select * from web_manage where username='xxx' and pass='ddd' or '1'所有的sql注入或攻击就是破坏原有的sql语句,...
  • 万能密码的构造,大概的去揣测正常的SQL语句是如何的。2.3.00x1SQL万能密码的构造在登录框当中可以添加了一个单引号。报错信息如下所示:据此报错,我们大概的可以猜测其网站的正常是SQL语句如下:$sql="select ...
  • 1.万能密码的构造,大概的去揣测正常的SQL语句是如何的。 2. 3. 00x1SQL万能密码的构造 在登录框当中可以添加了一个单引号。报错信息如下所示: 据此报错,我们大概的可以猜测其网站的正常是SQL语句...
  • 用户进行用户名和密码验证...查询数据库就是执行SQL语句。 用户登录时,后台执行的数据库查询操作(SQL语句)是: ... 由于网站后台在进行数据库查询的时候没有对单引号进行过滤,当输入用户名【admin】和万能密码【2’...
  • 万能密码】的原理用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。针对此BBS论坛,当用户登录时,后台执行的数据库查询操作(SQL语句)是【Selectuser id,user type,email From users ...
  • SQL注入原理——万能密码注入

    千次阅读 2018-08-06 10:59:19
    万能密码】的原理 用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。针对此BBS论坛,当用户登录时,后台执行的数据库查询操作(SQL语句)是【Selectuser id,user type,email From ...
  • ’or 1=1# 初入SQL注入万能语句

    万次阅读 多人点赞 2018-09-23 00:32:36
    噢,终于知道CTF里面的那些SQL注入题里面,每题基本都有 id=1’ 这个东西,然后就是一串语句后面加个 # 。 现在终于理解了。至于这个东西为什么叫万能语句,继续看吧。 在介绍之前,先介绍一下我们一般的登陆...
  • 初识SQL注入万能语句’or 1=1#

    千次阅读 2019-04-29 20:48:02
    sql注入什么的也是挺有意思的,初识了SQL注入万能语句’or 1=1# 我们在编写登陆过程一般都是这样的: 输入用户名:”username" 输入密码:“password" 当语句编写如下时: 当我们输入相应正确的用户名和密码时,就...
  • sql万能注入语句

    2013-01-23 11:25:00
    1.针对有单引号的情况 : 万能密码 : select * from users where username='xxxx' and password='xxxxxx' or 1='1'; 万能用户名 : select * from users where username='xxxx' un...
  • sql注入万能钥匙注入

    千次阅读 2018-04-17 18:57:18
    根据提示,这道题使用sql输入,题目中说已经使用过滤,但是我们...万能密码:也就是使用逻辑语句使结果返回。普通的select语句为:select * from user where username = 'user' and password = 'passwd' 因为引号...
  • SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入...
  • 万能密码SQL注入基本原理

    千次阅读 2014-09-16 10:54:34
    SQL语句: string id = "'haha' + or 1=1 or 1=1", string password = "'123'"(any password) string sql = string.format("select * from users where id={0} and password={1}", id, password); 可以取出一个...
  • password的字符串中,加上 ' or '1'= '1 就可以制作出万能密码。原因如下:原代码中密码是123456执行数据库查询语句实际上执行的SQL语句是:select * from sw_user where username='swift' and password='123456'这...
  • SQL注入

    2021-03-12 20:47:55
    5.union6.\# 是注释符7.concat_ws(':',value 1,value 2)注入过程注入语句万能密码 Or 1 定义 SQL注入是服务器端,未严格校验客户端发送的数据,而导致服务端的SQL语句被恶意修改并执行成功的行为称为SQL注入。 分类 ...
  • SQL语句注入

    2016-06-20 17:09:00
    1: select *from user where username='admin' and password='123456' or 1='1'; 万能密码 2: select *from user where username='admin' union select *from user ;/* and password='123456'; 万能用...
  • SQL数据库常见问题解答及万能密码注入原理讲解[图] 【万能密码】的原理 用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。针对此BBS论坛,当用户登录时,后台执行的数据库查询操作(SQL...
  • sql注入

    2021-03-08 11:21:46
    万能密码 sql注入案例 sql注入流程 sql注入信息收集 sql内置数据库: sql语句查询数据库核心语法 报错注入的方法 布尔盲注 布尔盲注案例 时间盲注 时间盲注代码 其它sql输入代码:...
  • SQL注入总结

    2021-03-26 21:42:14
    SQL注入总结 SQL注入原理 数字型 字符型 SQL注入分类 布尔盲注 union注入 报错注入 延时注入 宽字节注入 ...万能密码 防止SQL注入 严格的数据类型 特殊字符转义 使用预编译语句 框架技术 存储过程 ...
  • password的字符串中,加上 ' or '1'= '1 就可以制作出万能密码。 原因如下: 原代码中密码是123456 执行数据库查询语句 实际上执行的SQL语句是: select * from sw_user where username='swift' and ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
关键字:

sql注入语句万能密码