《Web安全攻防渗透测试实战指南》学习笔记

学习笔记

  • 第一章 渗透测试之信息收集
  • 第二章 搭建漏洞环境及实战
  • 第三章 常用的渗透测试工具
  • 第四章 Web安全原理剖析之SQL注入

第一章 渗透测试之信息收集

知己知彼,百战不殆 ——《孙子兵法》

信息收集:
1. 服务器的配置信息
2. 网站敏感信息

具体细节:

  1. 收集域名信息:域名->域名注册信息:DNS服务器信息、注册人信息

方法:
1)Whois查询
i. Whois是一个标准的互联网协议,可用于收集网络注册信息,注册的域名,IP地址等,即为:一个用于查询域名是否已被注册以及注册域名的详细信息的数据库,可以得到注册人信息。
ii.一些常用网站:whois.aizhan.com whois.chinaz.com www.virustotal.com
2)备案信息查询
i.针对国内网站,注册人需要对网站进行备案。
ii.一些常用网站:www.beianbeian.com www.tianyancha.com

  1. 收集敏感信息

方法:
1)Google Chrome
可以通过构造特殊的关键字语法来搜索互联网上的相关敏感信息
2)Burp Suite的Repeater功能获取服务器的信息
3)乌云漏洞表查看历史漏洞信息:wooyun.shuimugan.com

  1. 收集子域名信息
    子域名也叫做二级域名,如果主域名防护周全,不如试试其下的某个子域;

方法:
1)子域名检测工具
Layer子域名挖掘机、K8、wydomain、dnsmaper、Sublist3r、subDomainsBrute等;
2)搜索引擎枚举
利用Google语法搜索子域名;
3)第三方聚合应用枚举
很多第三方服务汇聚了大量DNS数据集,可通过它们检索某个给定域名的子域名;
4)证书透明度公开日志枚举
i.证书透明度是证书授权机构CA的一个项目,会将每个SSL/TLS证书发布到公共日志中,SSL/TLS证书通常包含域名、子域名和邮件地址。
ii.常用网站:
crt.sh: https://crt.sh
cesys.io: https://censys.io
子域名爆破网站: phpinfo.me/domain、dns.aizhan.com

  1. 收集常用端口信息
    通过扫描服务器开放的端口以及从该端口判断服务器上存在的服务,以便对阵下药;

1)工具:Nmap、ZMap、御剑、Masscan

  1. 指纹识别

CMS指纹识别、计算机操作系统及Web容器的指纹识别;
1)特征:
应用程序在一些文件中可能会包含一些特征码,这个特征码就是CMS的指纹,当碰到其他网站也存在此特征时,就可以快速识别出该CMS,所以叫指纹识别;
2)CMS:
Content Management System:整站系统or文章系统。开发者只要给客户一个软件包,安装配置好,就可以定期更新数据来维护网站。常见的CMS有:Dedecms、Discuz、PHPWEB、PHPWind、WordPress等;
3)CMS识别工具:
御剑Web指纹识别、WhatWeb、WebRobo;
4)查询CMS指纹识别:
BugScaner:whatweb.bugscaner.com/look/
云悉指纹:www.yunxi.cn/finger.html
WhatWeb:whatweb.net/

  1. 查找真实ip

目标服务器可能只有一个域名,通过这个域名来确定真实IP;
1)服务器不存在CDN
直接通过www.ip138.com来获取目标的IP和域名信息;
2)服务器存在CDN
i.CDN
内容分发网络,主要解决因传输距离和不同运营商节点造成的网络速度性能低下的问题。它们是一组在不同运营商之间的对接节点上的高速缓存服务器,把用户经常访问的静态数据资源直接缓存到节点服务器上,当用户再次请求时,会直接分发到离用户近的节点服务器上响应给用户,当用户有实际数据交互时才会从远程Web服务器上响应,这样可以大大提高网站的响应速度及用户体验;如果购买了CDN服务,则ping该域名得到的响应是离我们最近的一台CDN服务器发送的,我们无法直接得到目标真实IP段范围;
ii.判断是否使用了CDN
通过ping目标主域,观察域名解析情况来判断
在线网站17CE: www.17ce.com 进行全国多地区的ping服务器操作,比对IP结果,如果都是一致的,极有可能不存在CDN;
iii.绕过CDN寻找真实IP
确认了存在CDN后,需要绕过CDN;
方法:
1.内部邮箱源:一般的邮件系统都在内部,没有经过CDN的解析,通过目标网站用户注册或者RSS订阅功能,查看邮件、寻找右箭头总的邮件服务器域名IP,ping这个邮件服务器的域名,就可以得到真实IP(必须是目标自己的邮件服务器,第三方或公共邮件服务器是没有用的);
2.扫描网站测试文件:phpinfo、test等;
3.分站域名:主站可能挂了CDN,但分站可能没有,可以通过ping二级域名获取分站IP,可能会出现分站和主站不是同一个IP但是在同一个C段下面的情况,从而能判断出目标的真实IP段;
4.国外访问:国内的CDN只对国内用户的访问加速,而国外的CDN就不一定了。可以通过国外在线代理网站APP Synthetic Monitor:https://asm.ca.com/en/ping.php 访问,可能会得到真实的IP;
5.查询域名的解析记录:如果目标网站很久前没有使用过CDN,可以通过网站NETCRAFT www.netcraft.com 来观察域名的IP历史记录;
6.如果目标网站有自己的APP,可以尝试利用Fiddler或Burp Suite抓取APP的请求,从里面得到真实IP;
7.绕过CloudFlare CDN查找真实IP:很多网站使用CloudFlare提供的CDN服务,可以先尝试通过在线网站CloudFlareWatch: http://www.crimeflare.us/cfs.html#box 对Cloud Flare客户网站进行真实IP查询;
iv.验证获取的IP
找到IP后如何验证其真实性?
1.如果是Web,最简单的是直接尝试用ip访问;
2.在目标段比较大的情况下,借助Masscan的工具批量扫描对应IP段中所有开了80、443、8080端口的IP,诸葛尝试IP访问。观察结果是否为目标站点;

  1. 收集敏感目录文件

探测Web目录结构和隐藏的敏感文件是必不可少的;
1)相关工具:DirBuster、御剑后台扫描珍藏版、wwwscan、Spinder.py等;
2)网站:http://www.webscan.cc/

  1. 社会工程学 <—这是最难的
社工库是违法的!

第二章 搭建漏洞环境及实战

千虚不搏一实。 ——《象山集·语录》

Wamp的搭建与DVWA的安装:
https://blog.csdn.net/qq_32261191/article/details/80338091
(侵删)

windows下sqli-libs的搭建:
https://blog.csdn.net/qq_27214561/article/details/72809423
(侵删)

windows下xss测试平台的搭建:
https://www.cnblogs.com/zhengna/p/12119643.html
(侵删)

第三章 常用的渗透测试工具

工欲善其事,必先利其器。 ——《论语·卫灵公》

SQL

  1. SQLMap——自动化注入工具

         功能:扫描、发现、利用URL的SQL注入漏洞;
                 1)数据库指纹识别;
                 2)数据库枚举;
                 3)数据提取;
                 4)访问目标文件系统;
                 5)在获取完全操作权限时实行任意命令;
         支持数据库:MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB;
         注入技术:
                 1)布尔盲注:根据返回页面判断条件真假的注入;
                 2)时间盲注:不能根据也i按返回的内容判断任何信息,要用条件语句查看时间延迟语句是否执行来判断(页面返回时间是否增加);
                 3)报错注入:页面会返回错误信息,或者把注入的语句的结果直接返回页面中;
                 4)联合查询注入:使用Union的情况下的注入;
                 5)堆查询注入:同时执行多条语句时的注入;
    
    1. 安装SQLMap——不支持Python3

    2. SQLMap入门

       1)判断是否存在注入
               命令:sqlmap.py -u "url"
       2)判断文本中的请求是否存在注入
               从文件中加载HTTP请求,SQLMap可以从一个文本文件中获取HTTP请求,这样就可以不设置其他的参数,txt内容为Web数据包;
               命令:sqlmap.py -r 文件路径
       3)查询当前用户下的所有数据库
               确定网站存在注入后,查询当前用户下的所有数据库,可列出表;
               命令:sqlmap.py -u url --dbs(如果要继续注入库,可以将--dbs缩写成-D xxx)xxx是数据库名称
       4)获取数据库中的表名
               查询完数据库后,查询指定数据库中所有的表名;
               命令:sqlmap.py -u "url" -D xxx --tables(如果要继续注入库,可以将--tables缩写成-T xx)
       5)获取表中的字段名
               查询完表名后,查询表中所有的字段名;
               命令:sqlmap.py -u "url" -D xxx -T xx --columns(如果要继续注入库,可以将--columns缩写成-C)xx是表名)
       6)获取字段名中的内容
               查询完字段名后,获取该字段中具体内容
               命令:sqlmap.py -u "url" -D xxx -T xx -C x --?(x是字段名,?是字段内容)
       7)获取数据库的所有用户
               列出数据库的所有用户,当前用户有权限读取包含所有用户的表的权限时,使用该命令就可以列出所有管理用户;
               命令:sqlmap.py -u "url" --users
       8)获取数据库用户的密码
               列出数据库用户的密码,如果当前用户有读取包含用户密码的权限,SQLMap会先列举出用户,然后列出Hash尝试破解;
               命令:sqlmap.py -u "url" --paswords
       9)获取当前网站数据库的名称
               列出当前网站使用的数据库;
               命令:sqlmap.py -u "url" --rurrent-db
       10)获取当前网站数据库的用户名称
               列出当前网站使用的数据库用户
               命令:sqlmap.py -u "url" --current-user
      
    3. SQLMap进阶

       1)--level 5:探测等级
               默认为level 1,第五级包含的Payload最多,会自动破解出cookie、XFF等头部注入。在不确定哪个Payload或参数为诸如点时,为了保证全面性,建议使用高的level值;
       2)--is-dba:当前用户是否有管理权限
               查看当前账户是否为数据库管理员账户,如果返回true,则为管理员账户;
               命令:sqlmap.py -u "url" --is-dba
       3)--roles:列出数据库管理员角色
               查看数据库用户的角色。如果当前用户有权限读取包含所有用户的表,输入该命令会列举出每个用户的的角色,也可以用-u参数指定看哪一个用户的角色;(仅适用于数据库是Oracle的情况)
       4)--referer:HTTP Referer头
               SQLMap可以在请求中伪造HTTP中的referer,当level>=3时,会尝试对referer进行注入;
               命令:--referer url
       5)--sql-shell:运行自定义SQL语句
               执行指定的SQL语句;
               命令:sqlmap.py -u "url" --sql-shell
       6)--os-cmd,--os-shell:运行任意操作系统命令
       7)--file-read:从数据库服务器中读取文件
               命令:sqlmap.py -u "url" --file-read "路径" -v 1
       8)--file-write+--file-dest:上传文件到数据库服务器中
               命令:sqlmap.py -u "url" --file-write "路径+文件" --file-dest "路径+文件" -v 1
      

第四章 Web安全原理剖析之SQL注入

根深而枝叶茂。 ——徐干
1.SQL注入的基础
SQL注入是指,Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数代入数据库查询,攻击者可以通过构造不同的SQL语句实现对数据库的任意操作。
在这里插入图片描述

这一条语句是非常危险的。由于这里的参数ID可控,且带入数据库查询,所以非法用户可以任意拼接SQL语句进行攻击。

2.SQL注入的原理
满足注入的两个条件:参数可控+参数带入数据库查询
在这里插入图片描述
这一条语句传入了id的值,因此当传入的ID参数为1’,那么数据库执行的代码为:
在这里插入图片描述
当然这条语句不符合语法规范,会有报错显示。当传入的id参数威威and 1=1时,执行的SQL语句为:
在这里插入图片描述
此时返回的结果和id=1所返回的结果相同。如果传入的id参数为and 1=2,由于1!=2,所以会返回与id=1所不相同的结果。
如果上述的结果出现,则证明该ID参数存在SQL注入漏洞。
接着,使用order by 1-99语句查询该数据表的字段数量,如果id=1 order by 3的返回结果和id=1 order by 4的返回结果不同,可以判断数据表的字段为3。
接着,使用union注入,借助order by查询结果,构造语句:
在这里插入图片描述
如果页面没有返回union select的结果,就可知时因为代码只返回一条结果,所以union select获取的结果没有全部输出到页面。
如何解决呢?可以通过设置参数id的值,让服务端返回union select的结果,例如id=-1,由于数据库里没有id=-1的数据,所以会返回union select的结果。返回的结果若为2:3,意味着在
在这里插入图片描述
中,2和3的位置时可以输入MySQL语句并且输出结果。
因此我们可以构造这样的SQL语句:
在这里插入图片描述
这样我们就可以得到在原先显示2的位置得到数据库名。
得到数据库库名(“sql”)后,输入以下命令替换database()的位置(需要加括号)以查询表名:
在这里插入图片描述
若想要获得第二个表名,则可修改limit中的第一位数字,例如用limit 1,1来获取数据的第二个表名。
3.与MySQL注入相关的知识点
1)在MySQL 5.0版本之后,MySQL默认在数据库中存放一个information_schema的数据库。库中有三个十分重要的表名,分别是:schemata、tables和columns。
2)几个关键表
schemata表存储用户创建的所有数据库的库名,库名的字段名为schema_name;
tables表中数据库名和表名的字段文明分别为table_schema和table_name;
columns表存储用户创建的所有库名、表名、字段名,分别为table_schema、table_name和column_name;
3)limit的用法,使用格式为limit m,n;其中m是指记录开始的位置,从0开始,表示第一条记录,n是指取n条记录。例如,limit 0,1表示从第一条记录开始,取一条记录;
4)几个重要函数:database()、version()、user();
5)常见注释符号:#或–+或/**/;大小写、双写、内联注释、编码绕过
6)二次注入、布尔注入、报错注入、base64注入、cookie注入、XFF注入、宽字节注入、堆叠注入、时间注入、联合查询注入

你可能感兴趣的:(安全)