[【通过】] sql注入之你问我答小知识

[复制链接]
WHILE 发表于 2017-3-14 10:39:07 | 显示全部楼层 |阅读模式

正式成员|主题 |帖子 |积分 4

本帖最后由 WHILE 于 2017-3-15 13:07 编辑

ps:此前在我的博客园发表过,(不知道发自己博客出来算不算打广告,博客名字叫珍惜少年时。目的是为表明原创性.)此外再无发表。如果大家发现有错误或者需要增加的大家可以留言,该贴长期有效。
才开贴没多久就收到纠正错误的,十分感到抱歉,但是我相信,错误不可怕。自己一直闷着错误的知识藏在自己的大脑里才是最可怕的。如对答案有不同的见解非常欢迎大家指出。
1.问:为啥order by 是排序。而在注入当中后面加的却不是字段而是数字捏?
   答:第N个字段嘛。order by 5就是第五个字段,如果5存在,6不存在。就说明只有五个select返回的列明数。@K4r1iNNg 朋友指出
2.问:为啥order by 猜出字段数了以后,就是联合查询的时候的个数(比如字段为4,为啥就是select 1,2,3,4捏?)
  答:select语句中返回的列明数。@K4r1iNNg 朋友指出
3.问:为啥会出现显示位这个东东呀?
   答:联合查询的结果是对应出现的。
mysql> select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00sec)
4.问:为啥判断mysql.user大于0就可以判断他是否具有读的权限?and (select count(*)from mysql.user)>0--
    答:既然能够判断mysql.user的用户长度,那么也就是说他可以读取到mysql.user的数据。说明是可以读取的。@80uncle[size=13.3333px] 提出
5.问:逐字解码法和普通的联合注入法。为啥逐字解码法那么麻烦还要用逐字解码法?
    答:因为有些是不支持联合查询的,所以就只能使用逐字解码法进行注入。
6.问:mysql的站注入,5.0以上和5.0以下有什么区别?
    答:因为5.0以下没有information_schema这个数据库,故只能想access那样跑。
7.问:你知道distinct是干嘛的吗?limit呢?likejoin嘞?between
答:
distinct的是用于消除一样的字段,需要注意的是必须要放在字段的开头,其用法为:select distinctid from admin;
limit主要是用于于对返回值的处理,比如:select id fromadmin limit a,b; 就是取出第a行到第b行的数据(a,b为数字)
like是模糊查询,用法为:select * fromadmin like "%王%";
jion
between音译是“之间”其实作用个人觉得于limit类似,用法为:selec * from adminwhere 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_nametable_schema你造吗?
在MySQL中,数据库名存放在information_schema数据库下schemata表schema_name字段中
在MySQL中,表名存放在information_schema数据库下tables表table_name字段中
11.问:你知道为什么,查询语句的时候总用倒叙吗?
 答:取出最新的数据咯。
12.:一个帅哥问:and ord(mid(user(),1,1))=114/*是啥意思啊,并且附言道这是判断权限的。
  答:这里就必须要了解两个函数了,一个是ord一个是mid。
Ord函数是返回第一个字符的ascii码值。
Mid函数是用于得到字符串的一部分。这个函数有三个参数,第一个是需要得到的字符串,第二位是从这个函数的第几位开始截取,第三个是截取的长度。
那么也就是说,得到字符串user()里面的第一个ascii值。加上后面的那句,=114
总的推出该句的意思就是:倘若得到的第一个字符串的ASCIII码值等于114的话,就返回正确的页面。114的ASCII值是r
13.问:你知道mysql里有几种注释方式吗?
答:三种
1.# 这个注释直到该行结束
2./*注释
     多行*/
3.--+ 这个注释直到该行结束
第三种需要解释一下,因为之前我不知道这个方法,说--是注释符我还大概有印象,但是--+就懵。其实是-- ,注意--的后面有一个空格。但是在url里你直接空格会被浏览器直接处理掉,就到不了数据库里。所以特意用加号代替。
14.问:你知道union allunion的区别吗?
 答:去重复   
15.问:216进制以及base64unicode可以在mysql当中执行吗?如果否为什么黑客们都说用这些编码绕过WAF或者一些web防护呢?
 答:16进制可以,base64在版本5.6以上的也增加了base64,所以在mysql版本5.6以上的也是支持base64的。其他的不可以。
编码绕过一般是一用不同层面的差异,比如这个十六进制,php当数字,mysql当字符串。
举例子,php接到这个参数,检查里边有没有select,十六进制它当数字处理,所以没检查出来,但是mysql继续当成select执行了。
mysql> select0x313233;
+------------+
| 0x313233 |
+------------+
|      123     |
+------------+
16.问:你知道mysql里的information_schema是什么吗?介绍一下吧。
  答:information.schema是mysql自带的数据库,里面保存了所有的mysql信息。
selecttable_name from information_schema.tables #读取所有的表明
selectcolumn_name from information_schema.columns #读取所有的列明
17.问:select select * fromadmin可以执行吗?倘若不可以请说明。
  答:不可以执行,在使用select 双层的时候要把第二个括起来。否则无效。
1.png
18.问:倘若空格过滤了,你知道有哪些可以绕过吗?或者说你知道哪些可以替代空格吗?告诉你个秘密,其实是可以绕过的注入的哟。这些是空字符。比如un%0aion会被当做union来处理。
  答:
%09
%0A
%0D
+
/*|--|*/
/*@--|*/
/*?--|/
/*|%20--%20|*/
都可以替代空格
19.问:某黑客在手注登录框的时候,输入了,账号:test") 密码:123 然后就爆出了如下的错误。你能够根据下面的错误,猜测出原来的SQL语句是怎么写的吗?是咋判断出来的呢?
Youhave an error in your SQL syntax; check the manual that corresponds to yourMySQL server version for the right syntax to use near ')" and password="123" LIMIT 0,1' at line1
    答:原来的sql语句应该是:select 列明 from 表明 whereusername="$username" and password="$password";
根据出来的错误提示,andpassword="123" 该处就已说明。密码输入为“123”,那么系统自动为123加上了双引号(如下图),所以其两侧必定是有双引号的。密码这样写,账号肯定也是这样写。
1.png
20.问:在登录框注入的时候,输入--+注释符不可以当中注释符,#却可以。这是怎么回事呢?
  答:如题的重点是登录框中注入,在登录框--+被带入数据库,还是--+,而--+并非注释符,-- 才是。注意哦,--的后面有一个空格。在URL里可以用是因为会+会自动转码为空格。
21.倘若过滤了<>你知道还可以用啥吗?
  答:like
22.selectcount(*) from 表明; 你知道这句sql是啥意思吗?
  答:查询表明里面所有的记录数
23.group_concat的作用是啥你知道吗?
    答:返回的两个值,合成一个
mysql> select group_concat(1,2);
+-------------------+
| group_concat(1,2) |
+-------------------+
| 12                     |
+-------------------+
24.你知道开启mysql外链的命令吗?
GRANT ALLPRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root密码' WITH GRANTOPTION;
25.你知道SQL Server 2000SQL Server 2005如果存在注入有啥区别吗?
    答:如果权限是sa的话可以直接执行CMD命令,如果是db权限的话可以选择差异备份。2000的可以列目录,2005的不能列目录
26.当使用sqlmap注入的时候,含有汉字该如何继续注入呢?[该问题由:@saline提出]    答:可以将汉字转换为hex,以此绕过。@joseph解答




/*该章将会永久性持续更新.如果有好的答案或者答案错误欢迎指出,虚心求指教!*/


评分

参与人数 1酒票 +5 收起 理由
管理05 + 5 欢迎加入90!

查看全部评分

baidunew 发表于 2017-3-14 10:49:18 | 显示全部楼层

正式成员|主题 |帖子 |积分 57

23.group_concat的作用是啥你知道吗? 没有答案哦。
Joseph 发表于 2017-3-14 10:55:01 | 显示全部楼层

90Sec Team|主题 |帖子 |积分 1754

大兄弟,你这个xss不错。&#129315;感谢你的提出
 楼主 WHILE 发表于 2017-3-14 11:05:23 | 显示全部楼层

正式成员|主题 |帖子 |积分 4

RE: sql注入之你问我答小知识

Joseph 发表于 2017-3-14 10:55
大兄弟,你这个xss不错。&#129315;感谢你的提出

你说我刚才论坛那个XSS?我也不敢确定,反正我测试真的可以!
 楼主 WHILE 发表于 2017-3-14 11:07:51 | 显示全部楼层

正式成员|主题 |帖子 |积分 4

RE: sql注入之你问我答小知识

Joseph 发表于 2017-3-14 10:55
大兄弟,你这个xss不错。&#129315;感谢你的提出

那个XSS让我怀疑人生了。应该是浏览器的缘故。具体的没深究。不会
K4r1iNNg 发表于 2017-3-14 21:35:31 | 显示全部楼层

正式成员|主题 |帖子 |积分 114

1,2 补充下 select col1,col2,col3 from admin 那么这条语句 order by 3返回正确 即使这个admin表有 col1 col2 col3 col4 col5 四个列 准确的说应该是 select 语句中返回的col(列明数) 而不是表admin的 所含的列名

评分

参与人数 1酒票 +1 收起 理由
管理05 + 1 积极参与讨论

查看全部评分

 楼主 WHILE 发表于 2017-3-14 23:06:55 | 显示全部楼层

正式成员|主题 |帖子 |积分 4

RE: sql注入之你问我答小知识

baidunew 发表于 2017-3-14 10:49
23.group_concat的作用是啥你知道吗? 没有答案哦。

返回的两个值,合成一个。  非常抱歉当时没能加上。感谢指出。


 楼主 WHILE 发表于 2017-3-14 23:07:37 | 显示全部楼层

正式成员|主题 |帖子 |积分 4

RE: sql注入之你问我答小知识

K4r1iNNg 发表于 2017-3-14 21:35
1,2 补充下 select col1,col2,col3 from admin 那么这条语句 order by 3返回正确 即使这个admin表有 col1 c ...

好的,感谢指出。谢谢!
80uncle 发表于 2017-3-15 00:19:57 | 显示全部楼层

九零元老|主题 |帖子 |积分 62

4.问:为啥判断mysql.user大于0就可以判断他是否具有读写权限?and (select count(*)from mysql.user)>0--
    答:既然能够判断mysql.user的用户长度,那么也就是说他可以读取到mysql.user的数据。说明是可以读取的。


这个不准确,写权限是由File_priv 权限决定的,有读mysql.user表的时候 File_priv 为N 也是不能写文件的,反之如果赋予了账户 File_priv 权限,那它有没有权限读user表都关系不大。

评分

参与人数 1酒票 +1 收起 理由
管理05 + 1 积极参与讨论

查看全部评分

saline 发表于 2017-3-15 00:30:29 | 显示全部楼层

正式成员|主题 |帖子 |积分 158

弱弱的问问..sqlmap测试某个注入点,但是路径里面如果出现了中文.无法读取肿么破
os-shell> dir e:\\白色模版
do you want to retrieve the command standard output? [Y/n/a] Y
[23:21:18] [INFO] the SQL query used returns 1 entries
[23:21:18] [INFO] retrieved: 指定的路径无效。
command standard output:    '指定的路径无效。'
os-shell> dir e:\\蓝色模版
do you want to retrieve the command standard output? [Y/n/a] Y
[23:21:22] [INFO] the SQL query used returns 1 entries
[23:21:22] [INFO] retrieved: 指定的路径无效。
command standard output:    '指定的路径无效。'
类似酱紫...
Joseph 发表于 2017-3-15 09:16:06 | 显示全部楼层

90Sec Team|主题 |帖子 |积分 1754

RE: sql注入之你问我答小知识

saline 发表于 2017-3-15 00:30
弱弱的问问..sqlmap测试某个注入点,但是路径里面如果出现了中文.无法读取肿么破

类似酱紫...

中文路径可以用hex代替
saline 发表于 2017-3-15 10:48:33 | 显示全部楼层

正式成员|主题 |帖子 |积分 158

RE: sql注入之你问我答小知识

Joseph 发表于 2017-3-15 09:16
中文路径可以用hex代替

用其他的方式搞定了~233感谢
 楼主 WHILE 发表于 2017-3-15 13:00:18 | 显示全部楼层

正式成员|主题 |帖子 |积分 4

RE: sql注入之你问我答小知识

80uncle 发表于 2017-3-15 00:19
4.问:为啥判断mysql.user大于0就可以判断他是否具有读写权限?and (select count(*)from mysql.user)>0-- ...

好的 感谢提出,关于详细的权限我也没有学习过,这就去弥补。
快速回复 返回顶部 返回列表