写在前面
第17和18天都讲的sql注入,故合并
网络空间安全实训-渗透测试
-
Web渗透
-
定义
-
针对Web站点的渗透攻击,以获取网站控制权限为目的
-
-
Web渗透的特点
-
Web技术学习门槛低,更容易实现
-
Web的普及性决定了Web渗透更容易找到目标
-
网站程序开发者的技术参差不齐,更容易找到存在漏洞的网站
-
HTTP协议天然的安全缺陷,导致容易受到攻击
-
Web的身份识别技术存在天然的安全缺陷
-
通过入侵网站可以获得丰富的经济利益
-
-
OWASP TOP 10
-
SQL注入攻击
-
XSS攻击
-
CSRF攻击
-
Web暴力破解
-
文件包含攻击
-
命令注入攻击
-
Webshell文件上传攻击
-
-
-
SQL注入攻击
-
数据库基础
-
定义
-
数据库
-
存储数据的仓库,包含了若干张数据表
-
-
数据表
-
存储和记录数据的容器单位
-
-
行
-
描述一条数据
-
-
列
-
数据的某一个属性,又称字段
-
-
-
常见的数据库管理软件
-
MySQL
-
搭配PHP网站使用
-
-
Oracle
-
搭配Java应用使用
-
-
SQL Server
-
.NET开发的应用程序搭配使用
-
-
MariaDB
-
-
SQL
-
结构化查询语言,用于操纵数据库的语言
-
-
-
SQL注入定义
-
用户将自行构造的SQL查询代码插入或提交到系统执行的查询语言中,从而干扰和或影响到正常查询效果的攻击手段
-
-
SQL注入类型
-
普通SQL注入
-
手工注入
-
1.寻找存在SQL注入漏洞的页面
-
可以向系统后台提交信息的页面
-
寻找URL中以?的方式向服务器传递信息的页面
-
-
2.测试该页面是否存在SQL注入漏洞
-
在URL传递的参数后加上单引号
-
返回页面报错,则说明存在SQL注入漏洞
-
不报错,则说明网站有防御措施
-
-
-
3.验证漏洞是数字型还是字符型
-
在URL后分别加上1 and 1=1 和 1 and 1 =2
-
1 and 1=1 有结果返回,1 and 1 =2 无结果返回,则说明漏洞是数字型
-
-
在URL后分别加上1' and 1=1# 和 1' and 1=2#
-
1'and 1=1# 有结果返回, 1' and 1=2#无结果返回则说明漏洞是字符型
-
-
-
4.验证该页面查询的内容共有几个字段
-
在URL后加上order by 5
-
有结果返回则说明该页面查询出的字段不小于5个,继续增加猜测的数字,直到页面报错为止.报错数字的上一个数字就是字段总数
-
-
-
5.当前页面中显示了哪几个字段
-
在URL后加上 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-
当前页面中显示的数字就说明哪几个字段是被输出的
-
-
-
6.查询当前网站数据库的名称
-
在上一步的URL中,把有出场的数字替换成database()
-
-
7.查询当前数据库中所有的表名
-
在上一步的URL中,把有出场的数字替换成group_concat(table_name) ,在URL的最后加上 from information_schema.tables where table_schema = '当前数据库名'
-
-
8.查询表中字段名
-
在上一步的URL中,把有出场的数字替换成group_concat(column_name) ,在URL的最后加上 from information_schema.columns where table_name = '表名'
-
-
9.查询表中相应字段
-
子主题 1
-
在上一步的URL中,把有出场的数字替换成要查询的字段名 ,在URL的最后加上 from 表名
-
-
-
10.查询出的内容有md5加密,使用md5密文查询工具进行查询
-
-
SQLmap
-
1. sqlmap -u '存在漏洞的页面URL' --dbs
-
查询所有数据库名
-
-
2. sqlmap -u '存在漏洞的页面URL' -D 数据库名 --tables
-
查询某个数据库下的所有表名
-
-
3. sqlmap -u '存在漏洞的页面URL' -D 数据库名 -T表名 --columns
-
查询表中的所有列名
-
-
4. sqlmap -u '存在漏洞的页面URL' -D 数据库名 -T表名 -C字段名 --dump
-
查询表中对应字段的内容
-
-
-
-
盲注
-
手工盲注
-
1.寻找存在SQL注入漏洞的页面
-
可以向系统后台提交信息的页面
-
寻找URL中以?的方式向服务器传递信息的页面
-
-
2.测试该页面是否存在SQL注入漏洞
-
在URL传递的参数后加上单引号
-
返回页面报错,则说明存在SQL注入漏洞
-
不报错,则说明网站有防御措施
-
-
-
3.猜解数据库名的长度
-
在URL后加上'and length(database())=1',如果返回结果为假,说明数据库名的长度不止一位;继续增加猜解的数字,知道返回结果为真为止,此时的数字就是数据库名的长度
-
-
4.猜借数据库名的第一个字符
-
在URL后分别加上'and ascii(substr(database(),1,1))>97#,和 'and ascii(substr(database(),1,1))<122#,如果返回结果都为真,则说明第一个字符是小写字母
-
继续增加数字,直到返回结果为假,说明猜借的数字asccii码对应的字母就是数据库名的第一个字符
-
-
5.按照上一步的方法继续猜解数据库名的剩余字符
-
6.猜解数据库中包含的数据表的数量
-
在URL后加上'and (select count (table_name) from information_schema.tables where table where table_schema='dvwa' ) =1#
-
若返回结果为假,则继续增大数字;若为真,则猜解正确
-
-
7.在URL后加上'and length((select table_name form information_schema.tables where table_schema=database() limit0,1))=1# 若返回结果为missing,则继续增大数字直到返回exist,此时就是该表名的长度
-
8.按照猜借数据库名同样的方法猜解表名的每个字符内容
-
9.按照上述方法猜解表中字段名
-
10.按照上述方法猜解数据表中的数据内容
-
-
-
常见的SQL注入防范方法
-
1.对用户输入和提交的内容进行安全检查和过滤
-
单引号\双引号
-
括号
-
and、or、union、order by
-
-
2.在PHP中使用PDO技术
-
-
-