信息安全学习攻略
- 信息安全 学习
- 准备工作
- 基础知识
- Web
- Reverse
- Pwn
- Miscellaneous
- 其他
- 密码学
- 安全审计
- 信息安全事件与应急响应
- 漏洞记录
- 安全工具使用和实现原理
- 简单算法编程
- 总结与测验
- 课外阅读
信息安全 学习
(很久以前的随笔,内容简单,且大部分过时了,建议别看,更新内容在其它平台)
建议安装 KALI 来入门,建议做 CTF 题目,建议了解基础计算机相关知识,建议去漏洞平台、公益 src 提交漏洞。
二进制方向建议看 CTF-All-In-One 《CTF 竞赛入门指南》,它和本文的最终目标形态相近。
帮助:
CTF-All-In-One 《CTF 竞赛入门指南》
Web安全学习笔记
狼组安全团队公开知识库
愿安全人不在踩坑,网络安全的学习经验
安全技能 -SecWiki
phith0n Mind-Map思维导图
信息安全从业者书单推荐
书栈网 · BookStack_开源编程书籍免费阅读
网络安全开放编辑电子版教材
bmjoker的博客
论坛:
FreeBuf网络安全行业门户
i 春秋 —— 白帽子技术/思路
EXPLOIT DATABASE
漏洞平台:
漏洞盒子 —— 公益 src
教育行业漏洞报告平台 —— 上交大
hackerone
坑:
- 打ctf 时有时flag不会显示到网页上,但在 html, Javascript 源代码等地方,所以有时觉得操作没错但是没反应,可以全局搜索是否有flag。全局搜索办法:打开浏览器开发人员工具 devtools,选中“源代码”项,右键“页面”项中的文件夹,就可以全局搜索。
- 在burpsuite的repeater里GET请求和POST请求互换时,右键选择change request method来更换,自己修改会可能会忘记编辑名为Content-Type的请求头导致无正确响应。参考:POST 提交数据的几种方式
- URL 如果带加号“+”,由于浏览器会将 “+” 等同于空格进行处理,有时会导致意料外的结果。如:http://ipaddress/redirect.php?url=1+2,这里的结果变成了1 2或为空,所以测试时基本都使用减号而不使用加号,如 ?url=5-3,得到结果 2,说明这里可以注入执行命令。如果一定要用加号,可以使用编码 %2B
注:标注 参考 的是参考资料,不一定有用,标注 帮助 的是个人认为对学习人员有一定帮助的,且内容一般各有不同之处。
准备工作
Kali Linux 环境准备
建议使用虚拟机安装 kali,具体参考帮助里的链接。
帮助:
获取kali linux
安装kali linux后的准备工作
Kali Linux 工具使用中文说明书
Windows 环境准备
安装 Python 等语言环境, 称心的 IDE, Burpsuite Pro, Wireshark 等
一些工具安装见文章后半部。
Android 环境准备
如果资源充足,也可以尝试将手机打造成安全工具。
无需 root 的步骤:
- 浏览器搜索并安装 F-Droid 开源软件市场。
- 在 F-Droid 中搜索 Termux 并安装最新版。Termux 是运行在 Android 上的 命令行终端,不需要root。
- 参考 Termux 高级终端安装使用配置教程 等进行 Termux 的配置,自选一些安全工具安装,如 安装 Kali NetHunter 等。
- F-Droid 软件市场中有一个 RSS 订阅软件 Feeder,可以添加一些安全相关的 RSS 订阅源,跟踪最新的安全咨询。
基础知识
常见的重要配置文件默认位置
待补充中······
参考:整理了一些下载利用文件
Linux:
- /etc/passwd 保存了系统中所有的用户信息
- /etc/shadow 用户的密码信息
- /root/.ssh/authorized_keys 公钥文件
- /root/.bash_history 用户终端操作历史记录
- /root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥 - /etc/my.cnf //mysql配置文件
- /etc/httpd/conf/httpd.conf //apache配置文件
- /root/.bash_history //用户历史命令记录文件
- /root/.mysql_history //mysql历史命令记录文件
- /proc/mounts //记录系统挂载设备
- /porc/config.gz //内核配置文件
- /var/lib/mlocate/mlocate.db //全文件路径
- /porc/self/cmdline //当前进程的cmdline参数
Windows:
- /windows/win.ini 或 C:\Windows\win.ini //Windows系统的一个基本系统配置文件
- C:\boot.ini //查看系统版本
- C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件
- C:\Windows\repair\sam //存储系统初次安装的密码
- C:\Program Files\mysql\my.ini //Mysql配置
- C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
- C:\Windows\php.ini //php配置信息
- C:\Windows\my.ini //Mysql配置信息
PHP:
- /usr/local/php/etc/php.ini
Apache:
- 主配置文件:/etc/httpd/conf/httpd.conf
- 默认站点主目录:/var/www/html/
参考:Apache的主要目录和配置文件详解
MySQL:
- /etc/my.cnf 或 /etc/mysql/my.cnf 于 Linux环境下
- my.ini 于Windows环境下
帮助
帮助:
常用和不常用端口一览表收藏
端口号大全
黑客常用端口利用总结
常见各类端口漏洞
HTTP 响应状态码
Web
要学习的内容:
-
熟练语法特性和相关知识点:
HTML, JavaScript, CSS, Linux, HTTP, Python,
PHP, MySQL, JSON -
至少粗略了解,知道长什么样,用到再学亦可(待补充):
Docker, Apache, Node.js, Nginx,
Flask, Django, FastAPI
Vue.js, React, Bootstrap,
Webpack, XML, Elasticsearch, YARA -
一个网站完整的技术栈和开发
参考:
快速做网站的一套技术栈介绍 及 对应项目
目录:
- file upload 文件上传漏洞
- local file include 本地文件包含漏洞
- xss 跨站脚本攻击
- csrf 跨站请求伪造
- ssrf 服务端请求伪造
- ssti 服务器端模板注入
- sql 注入
- 反序列化
- 未授权访问
- 源码泄露
- 爆破
- XML External Entity injection
- 综合练习
文件上传漏洞(file upload)
题目:
- BUU Upload-Labs-Linux 系列共20关
解答:
Upload-labs 通关笔记 - 20关
upload-labs通关记录 - 19关
upload-labs闯关笔记 - 18关
upload-labs Pass-12:文件名检测00截断绕过
upload-labs Pass 16:绕过图片二次渲染
注:第6、8题需要服务器是window环境,似乎是因为服务器换了linux。第11、12题需要php版本小于5.3.4,这里服务器php版本是7.2.21。 - 待补充
首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。
最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。
所以导出下列防御措施:
防御:
- 文件上传的目录设置为不可执行
- 使用白名单判断文件类型,应综合使用MIME Type、后缀校验等方式,对于图片等类型可以使用压缩函数等破坏文件中的代码。
- 随机数重命名文件名和文件路径。
- 单独设置文件服务器域名,由于浏览器同源策略,客户端攻击将缓解不少,如上传包含 Javascript 的XSS利用,但这需要看具体业务情况。
阿里云盘上传的文件无法修改后缀名,不知是否是出于防御文件上传漏洞的因素(如上传后重命名为 *.mp4、等 )。但是以前可以抓包修改后缀名,所以以前可能有漏洞。
帮助:
HTTP文件上传原理
一句话木马 - 介绍不好,待换
php一句话木马 - 待换
php文件上传后缀与文件类型对照表
php文件隐藏,让别的后缀也能执行php文件
几种文件上传漏洞介绍
本地文件包含漏洞(Local File Include)
- 题目:LFI Labs
解答: - 题目:[HCTF 2018]WarmUp
解答:
XSS跨站脚本攻击(Cross Site Scripting)
题目:
- BUU XSS-Lab
解答:
xss-labs通关大合集
xss-labs 通关学习笔记
xss靶场之xss-labs
第14关 exif xss 复现
xss-labs第1~13关 - BUU XSS COURSE 1
解答:似乎有问题,没有admin用户的访问情况
BUU_XSS_Course
BUU XSS COURSE 1
防御:
- 关键cookie加上HttpOnly(浏览器将禁止Javascript访问带有HttpOnly属性的Cookie),基本解决Cookie劫持,缓解XSS攻击。
- 输出时检查,变量输出到页面时,使用编码或转义,如Html代码使用HtmlEncode转为HTMLEntities(如 < 转为 <),Javascript使用JavascriptEncode并将输出的变量放在引号内部(如var x = “1; alert(1)”;)。
- 输入时检查,XSS Filter,也用于格式检查,过滤或编码特殊字符,但可能改变用户的语义。
帮助:
ISO/IEC 8859-1 实体名称及其编号
HTML转义字符大全
XSS 从零开始
XSS绕过WAF姿势总结
XSS之绕过简单WAF总结
课外阅读:
国内知名安全平台某BUF的xss漏洞 —— dom 型 js 前端漏洞
利用BeEF执行xss攻击 —— 注意是运行 /usr/share/beef-xss/beef
XSS 漏洞扫描工具 XSStrike
CSRF跨站请求伪造(Cross Site Request Forgery)
题目:
1.
防御:
- 重要操作要求验证码(辅助防御手段)
- 验证 HTTP Referer 字段(不一定能获取,所以只能作为监控手段);或者使用 Origin 头来让服务端判断请求是否来自合法的源(不那么容易伪造或清空,可防范CSRF)
- 在请求表单(或AJAX,如果用GET放在URL中可能被Referer头泄露)中添加 csrf token ( 注意,不是 JWT token ),服务器验证 token 正确性;客户端的 token 应该被保存到 local storage 或 session storage (一般是 session,关闭页面即失效)。
帮助:
关于 CSRF 和 csrftoken
什么是 CSRF 攻击?如何防御 CRSF 攻击?
CSRF、Cookie、Session和token之间不得不说得那些事儿
SSRF服务器端请求伪造(Server-Side Request Forgery)
攻击者伪造服务端的请求发起攻击,或者借由服务端为跳板来攻击目标系统,通常针对外部网络无法直接访问的内部系统。
协议利用:
gopher 协议初探
SSRF漏洞用到的其他协议(dict,file协议)
Dict 协议是什么
防御:
- 过滤返回信息。验证远程服务器对请求的响应是比较容易的方法,如果web应用是去获取某一种类型的文件,那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
- 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///, gopher://, ftp:// 等引起的问题
- 统一错误信息。避免用户可以根据错误信息来判断远端服务器的端口状态。
- 限制请求的端口。只允许 http 常用的端口,比如 80、443、8080 等。
- 设置 URL 白名单或者限制内网IP
- 对 DNS Rebinding,可以使用 DNS 缓存或者 Host 白名单
- 禁止跳转
帮助(以下链接都有必要看):
浅谈SSRF原理及其利用
SSRF — Web安全学习笔记 1.0 文档 —— 给出了可能的利用点列表
了解SSRF,这一篇就足够了
Web Security 之 SSRF —— Blind SSRF 和 隐藏攻击面 Referer 头
SSRF绕过
SSRF安全指北 —— 介绍了新型攻击手法,利用 tls 进行 ssrf
SSTI 服务器端模板注入(Server-Side Template Injection)
帮助:SSTI(模板注入)漏洞
SQL注入
题目:
- 攻防世界NewsCenter
解答:学习sqlmap用法 - 攻防世界supersqli 或 [强网杯 2019]随便注
解答:学习堆叠注入等,此题如果用sqlmap只能爆出库名supersqli
随便注write up
随便注&[GYCTF2020]Blacklist -wp - 攻防世界comment
解答:学习换行注释,注:题目下载的内容可能是不完整的,看下面链接。
攻防世界高手进阶之Web comment - BUU sqli-labs
防御:
- 使用预编译语句
- 使用安全的储存过程
- 如果无法避免动态SQL语句,应使用严格的输入过滤,如检查输入数据的数据格式和类型,或者使用安全的编码函数处理输入
- 数据库应该遵循最小权限原则,也应该为每个应用分配不同的账户。
帮助:
深入理解SQL注入与预编译(上)
深入理解SQL注入与预编译(下)
sqlmap常用操作命令
sqlmap使用
反序列化漏洞
序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
反序列化漏洞是基于序列化和反序列化的操作,在反序列化——unserialize()时存在用户可控参数,而反序列化会自动调用一些魔术方法,如果魔术方法内存在一些敏感操作例如eval()函数,而且参数是通过反序列化传入的,那么用户就可以通过改变参数来执行敏感操作,这就是反序列化漏洞。
帮助:
反序列化漏洞详解 —— 以 PHP 为例
一篇文章带你了解反序列化漏洞
参考:
浅析FastJSON反序列化漏洞(1.2.24——1.2.68)
从防护角度看Weblogic反序列化历史漏洞
深入利用Shiro反序列化漏洞
Shiro反序列化漏洞利用汇总
Shiro反序列化漏洞
未授权访问漏洞
帮助:
常见未授权访问漏洞总结
超全面未授权访问漏洞复现合集
源码泄露
帮助:
WEB安全-常见源码泄露
git源码泄露
题目:
帮助: