sql注入之你问我答小知识
/*每日更新,珍惜少年时博客*/
1.问:为啥order by 是排序。而在注入当中后面加的却不是字段而是数字捏?
答:第N个字段嘛。order by 5就是第五个字段,如果5存在,6不存在。就说明只有五个字段咯。
2.问:为啥order by 猜出字段数了以后,就是联合查询的时候的个数(比如字段为4,为啥就是select 1,2,3,4捏?)
答:指定表就是:select 列名 form 表名 所以说有几个字段数,就有几个列明
3.问:为啥会出现显示位这个东东呀?
答:联合查询的结果是对应出现的。
mysql> select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)
4.问:为啥判断mysql.user大于0就可以判断他是否具有读写权限?and (select count(*) from mysql.user)>0--
答:既然能够判断mysql.user的用户长度,那么也就是说他可以读取到mysql.user的数据。说明是可以读取的。
5.问:逐字解码法和普通的联合注入法。为啥逐字解码法那么麻烦还要用逐字解码法?
答:因为有些是不支持联合查询的,所以就只能使用逐字解码法进行注入。
6.问:mysql的站注入,5.0以上和5.0以下有什么区别?
答:因为5.0以下没有information_schema这个数据库,故只能想access那样跑。
7.问:你知道distinct是干嘛的吗?limit呢?like?join嘞?between?
答:
distinct的是用于消除一样的字段,需要注意的是必须要放在字段的开头,其用法为:select distinct id from admin;
limit主要是用于于对返回值的处理,比如:select id from admin limit a,b; 就是取出第a行到第b行的数据(a,b为数字)
like是模糊查询,用法为:select * from admin like "%王%";
jion
between音译是“之间”其实作用个人觉得于limit类似,用法为:selec * from admin where between a and b; (a,b需是数字)
8.问:id减去1,页面如果返回正确页面说明是有注入,那加1可以吗?(www.test.com/xsn.php?id=12+1)
答:显然不行,因为加号在url里面是空格的意思。
9.问:mysql中,你知道/*! ... */是啥意思吗?这个/*!5000WORLD*/和/*!323202WORLD*/和/*!40001HELLO*/执行会是啥样啊?
答:在其它数据库中是不会被执行,但在MYSQL中它会执行。属于特有。
10.问:关于table_name,table_schema你造吗?
在MySQL中,数据库名存放在information_schema数据库下schemata表schema_name字段中
在MySQL中,表名存放在information_schema数据库下tables表table_name字段中
11.问:你知道为什么,查询语句的时候总用倒叙吗?
答:取出最新的数据咯。
12.问:一个帅哥问:and ord(mid(user(),1,1))=114/*是啥意思啊,并且附言道这是判断权限的。
mysql> select 0x313233;
+------------+
| 0x313233 |
+------------+
| 123 |
+------------+
16.问:你知道mysql里的information_schema是什么吗?介绍一下吧。
答:information.schema是mysql自带的数据库,里面保存了所有的mysql信息。
select table_name from information_schema.tables #读取所有的表明
select column_name from information_schema.columns #读取所有的列明
17.问:select select * from admin可以执行吗?倘若不可以请说明。
答:不可以执行,在使用select 双层的时候要把第二个括起来。否则无效。
18.问:倘若空格过滤了,你知道有哪些可以绕过吗?或者说你知道哪些可以替代空格吗?告诉你个秘密,其实是可以绕过的注入的哟。这些是空字符。比如un%0aion会被当做union来处理。
答:
%09
%0A
%0D
+
/*|--|*/
/*@--|*/
/*?--|/
/*|%20--%20|*/
都可以替代空格
19.问:某黑客在手注登录框的时候,输入了,账号:test") 密码:123 然后就爆出了如下的错误。你能够根据下面的错误,猜测出原来的SQL语句是怎么写的吗?是咋判断出来的呢?
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')" and password="123" LIMIT 0,1' at line 1
答:原来的sql语句应该是:select 列明 from 表明 where username="$username" and password="$password";
根据出来的错误提示,and password="123" 该处就已说明。密码输入为“123”,那么系统自动为123加上了双引号(如下图),所以其两侧必定是有双引号的。密码这样写,账号肯定也是这样写。
20.问:在登录框注入的时候,输入--+注释符不可以当中注释符,#却可以。这是怎么回事呢?
答:如题的重点是登录框中注入,在登录框--+被带入数据库,还是--+,而--+并非注释符,-- 才是。注意哦,--的后面有一个空格。在URL里可以用是因为会+会自动转码为空格。
21.倘若过滤了<>你知道还可以用啥吗?
答:like
22.select count(*) from 表明; 你知道这句sql是啥意思吗?
答:查询表明里面所有的记录数
23.group_concat的作用是啥你知道吗?
答:
24.你知道开启mysql外链的命令吗?
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root密码' WITH GRANT OPTION;
25.你知道SQL Server 2000和SQL Server 2005如果存在注入有啥区别吗?
答:如果权限是sa的话可以直接执行CMD命令,如果是db权限的话可以选择差异备份。2000的可以列目录,2005的不能列目录
/*该章将会永久性持续更新.如果有好的答案或者答案错误欢迎指出,虚心求指教!*/
THE END
By:珍惜少年时博客:http://www.cnblogs.com/xishaonian/
*-------------------------------------------*