OWASP TOP10
注入漏洞
失效的身份认证和会话管理
敏感信息泄露
xxe
中断访问控制
安全配置错误
xss
反序列化
使用已知含有的漏洞的组件
不足的记录和监控漏洞
注入漏洞(Injection)
原理:攻击者通过向应用程序输入恶意代码,使其执行未经授权的操作。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等1。 攻击方式:例如,SQL注入通过在SQL查询中插入恶意代码来操纵数据库。 防御方法:使用参数化查询、输入校验和白名单、最小化权限等。
失效的身份认证(Broken Authentication)
原理:攻击者利用身份认证和会话管理中的漏洞,绕过或破解身份验证机制。 攻击方式:密码猜测、会话劫持、CSRF等。 防御方法:强密码策略、多因素身份验证、会话管理、访问控制等。
敏感数据泄露(Sensitive Data Exposure)
原理:应用程序在未加密或未正确加密的情况下存储和传输敏感信息。 攻击方式:网络嗅探、数据泄露等。 防御方法:加密、数据保护、强密码策略等。
XML外部实体漏洞(XML External Entities, XXE)
原理:应用程序解析XML时,未正确处理外部实体,导致攻击者可以访问系统文件、执行命令等。 攻击方式:XXE攻击。 防御方法:禁用外部实体、使用最新版本的XML解析器、输入校验等。
失效的访问控制(Broken Access Control)
原理:应用程序未正确实现访问控制机制,导致攻击者能够访问未授权的资源。 攻击方式:直接访问、暴力破解等。 防御方法:访问控制、安全编码、安全测试等。
安全配置错误(Security Misconfiguration)
原理:应用程序或其环境未正确配置,导致攻击者可以访问敏感信息、执行未经授权的操作。 攻击方式:目录遍历、错误页面泄露等。 防御方法:安全配置、代码审计、最小化权限等。
跨站脚本攻击(Cross-Site Scripting, XSS)
原理:攻击者向应用程序中输入恶意脚本,使其在用户的浏览器中执行2。 攻击方式:反射型XSS、存储型XSS等。 防御方法:输入校验、输出编码、HTTPOnly标记等3。
不安全的反序列化(Insecure Deserialization)
原理:应用程序在反序列化数据时未正确验证其完整性和有效性,导致攻击者可以执行未经授权的代码1。 攻击方式:注入恶意对象等。 防御方法:输入验证、使用最新版本的序列化器、最小化权限等2。
使用含有已知漏洞的组件(Using Components with Known Vulnerabilities)
原理:应用程序使用已知存在漏洞的第三方组件,导致攻击者可以利用这些漏洞攻击应用程序。 攻击方式:利用已知漏洞等。 防御方法:使用最新版本的组件、实时跟踪漏洞等。
不足的日志记录与监控(Insufficient Logging & Monitoring)
原理:应用程序未正确记录或监控其活动,导致攻击者可以执行未经授权的操作而不被检测。 攻击方式:暴力破解、DDoS攻击等。 防御方法:安全审计、日志监控、入侵检测等。
常见的web安全漏洞
SQL注入
原理: 用户将恶意SQL语句的参数拼接到动态SQL语句,后端没有进行校验,然后在在数据库中执行。
分类: 按照最常见的分类:联合查询注入、报错注入、布尔盲注、时间盲注(延时盲注);
盲注是什么?怎么盲注?
盲注是在 SQL 注⼊攻击过程中,服务器关闭了错误回显,我们单纯通过服务器返回内容的变化来判断是否存在 SQL 注⼊和利⽤的⽅式。
盲注的⼿段有两种,
⼀个是通过⻚⾯的返回内容是否正确 (boolean-based),来验证是否存在注⼊。
⼀个是通过 sql 语句处理时间的不同来判断是否存在注⼊ (time-based),在这⾥,可以⽤ benchmark,sleep 等造成延时效果的函数,也可以通过构造⼤笛卡⼉积的联合查询表来达到延时的⽬的。
宽字节注入原理
1、产⽣原理
在数据库使⽤了宽字符集而 WEB 中没考虑这个问题的情况下,在 WEB 层,由于 0XBF27 是两个字符,在 PHP 中⽐如addslash 和 magic_quotes_gpc 开启时,由于会对 0x27 单引号进⾏转义,因此 0xbf27 会变成 0xbf5c27, ⽽数据进⼊数据库中时,由于 0XBF5C 是⼀个另外的字符,因此 转义符号会被前⾯的 bf 带着 “吃掉”,单引号由此逃逸出来可以⽤来闭合语句。
2、根本原因
character_set_client(客户端的字符集) 和 character_set_connection(连接层的字符集) 不同, 或转换函数如,iconv、mb_convert_encoding 使⽤不当。
3、解决办法
统⼀数据库、Web 应⽤、操作系统所使⽤的字符集,避免解析产⽣差异,最好都设置为 UTF-8。或对数据进⾏正确的转义,如 mysql_real_escape_string+mysql_set_charset 的使⽤。
防御:对特殊字符进行过滤、转义等。过滤特殊函数,使用安全的api,预编译。
sqlmap常用命令
数据库常见端口号
sql注入如何检测
被过滤,如何绕过
sql注入加固
XSS跨站脚本攻击
原理: 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script 代码会被执行,从而达到恶意攻击用户的目的
类型:
反射型 XSS 跟存储型 XSS 的区别:
DOM 型 XSS 跟前两种 XSS 的区别:
防御
xss绕过
CSRF跨站请求伪造攻击
SSRF服务端请求伪造
SSRF绕过方式
xss、csrf、SSRF区别
正向连接和反向连接的区别
文件包含
任意文件下载
任意代码执行RCE
目录遍历
命令执行
PHP反序列化有了解吗?
序列化就是将一个对象转换成字符串,反序列化则反之,将字符串重新转化为对象。
此外,PHP反序列化又可以简单分成两种,一种无类,一种有类,无类利用就略微简单,如果源码会将输入的值进行反序列化,那我们就需要提前将数据序列化后再传入。而想要利用有类就要用到魔术方法,而魔术方法就像一个潜规则一样,例如我们在创建对象时,就会触发__construct(),并执行__construct()中的代码。再用通俗的话来说,例如有人喊出了你女朋友的名字,你脑海中就会马上复现出她的身影一样,没有人让你特意去想,只是一种无意识的规则调用。
JAVA反序列化了解吗?有没有了解过shrio反序列化?(最常
问,无论hvv还是工作面试)?
Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,其作用把对象转换成字节流,便于保存或者传输,而ObjectInputStream类的readObject()方法用于反序列化,作用就是把字节流还原成对象。shiro反序列化主要是Apache shiro提供了一个remember的一个功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用,而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其bs64解码,再进行AES解密,再将其反序列化进行校验,而漏洞就是出现在这里,我们都知道AES它是一个硬编码,他是有默认密钥的,如果程序员没有去修改或者过于简单,那我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(密钥我们已经爆破出来了),再进行bs64编码,形成我们新的cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。
逻辑漏洞遇到过哪些,给你登录框有没有什么思路?
常见逻辑漏洞:越权,响应包修改,支付金额修改,cookie爆破,密码找回方面等等
登录页面思路:爆破,session覆盖,sql注入,xss,任意用户注册,js文件查看敏感信息,短信轰炸,万能密码,二次注入,模板注入等等
CDN和DNS区别?CDN绕过思路?
CDN:内容分发网络,主要作用就是让用户就近访问网络资源,提高响应速度,降低网络拥堵。
DNS:域名服务器,主要作用就是将域名翻译成ip地址。
CDN绕过思路:子域名,内部邮件,黑暗引擎搜索,国外ping,证书及DNS查询,app抓包,配置不当泄露,扫全网,DOS攻击等。
框架&中间件漏洞
IIS:PUT漏洞、短文件名猜解、远程代码执行、解析漏洞等
Apache:解析漏洞、目录遍历等
Nginx:文件解析、目录遍历、CRLF注入、目录穿越等
Tomcat:远程代码执行、war后门文件部署等
JBoss:反序列化漏洞、war后门文件部署等
WebLogic:反序列化漏洞、SSRF任意文件上传、war后门文件部署等
渗透测试流程
常见的waf绕过方法
编码绕过
使用各种编码方式可以绕过WAF的检测。例如,URL编码、二次URL编码、Unicode编码、Base64编码、Hex编码等。编码后的参数在进入数据库查询语句之前会被解码,从而绕过WAF的过滤。
# 二次URL编码绕过示例
payload = "%31%2527%20%61%6e%64%20%2527%31%2527%3d%2527%32"
字母大小写转换
部分WAF只过滤全大写或全小写的敏感字符,可以通过对关键字进行大小写转换来绕过。
# 大小写转换绕过示例
payload = "sleeP(3)"
空格过滤绕过
部分WAF会对空格进行过滤,可以使用空白符、‘+’号或注释符/**/替换空格进行绕过。
# 使用注释符替换空格绕过示例
payload = "1'/**/and/**/sleep(3)/**/and/**/'1'='1"
内联注释绕过
在MySQL中,/**/是多行注释,MySQL扩展了解释的功能,如果在开头的/后加了惊叹号(/!50001sleep (3)*/),那么此注释里的语句将被执行。
# 内联注释绕过示例
payload = "1+and+/*!50001sleep(3)*/+and+1=1"
请求方式差异绕过
有些WAF同时接收GET和POST方法,但只在GET方法中增加了过滤规则,可以通过发送POST方法进行绕过。
# POST请求绕过示例
payload = "id=1+and+sleep(4)"
异常Method绕过
有些WAF只检测GET和POST方法,可以通过使用异常方法进行绕过。
# 异常Method绕过示例
payload = "DigApis /xxx/?id=1+and+sleep(3)HTTP/1.1"
超大数据包绕过
部分WAF只检测固定大小的内容,可以通过添加无用字符进行绕过检测。
# 超大数据包绕过示例
payload = "1+and+sleep(3)+and+" + "1" * 1000 + "=1"
复参数绕过
在提交的URL中给一个参数多次赋值,部分WAF在处理的过程中可能只处理前面提交的参数值,而后端程序在处理的时候可能取的是最后面的值。
# 复参数绕过示例
payload = "id=1&id=2+and+sleep(3)"
添加%绕过过滤
将WAF中过滤的敏感字符通过添加%绕过过滤。
# 添加%绕过过滤示例
payload = "1 union s%e%lect 1, 2, 3 from admin"
Windows常用指令
一.文件/目录操作
1.cd 切换目录
cd //显示当前文件所在
cd.. //显示上一级目录
cd /d x:\ //进入x盘根目录
cd /d x: //进入上次x盘所在的目录 (可直接输入 x:)
cd x: //显示上次x盘所在的目录
cd /d x:\a //进入x盘里的a文件夹
cd a\b\c //进入当前目录下的a\b\c文件夹
2.dir 显示目录里的内容
dir //显示当前目录里的子文件夹和文件
dir /b //只显示当前目录子文件夹、文件的文件名
dir /p //分页显示当前目录子文件夹、文件
dir /ad //只显示当前目录中的文件夹
dir /a-d //显示当目里的文件
dir x:/a //显示x盘下a文件夹中的内容
dir 1.txt //显示当目下1.txt的信息
dir /s //递归显示当目中的内容 ctrl c终止当前命令
dir a* //显示当目下a开头的文件、文件夹信息
dir /ah /os //显示当目下隐藏的文件和目录,按文件大小从小到大排序
3.tree 显示目录结构
tree //树状显示当前目录的结构
tree x:\a //显示x:\a的目录结构
4.ren 文件或目录重命名
ren a b //将当前目录下的a文件
ren x:\a b //将x盘里的a文件夹改名为b
5.md 创建目录 rd 删除目录
md a //在当前目录下创建a目录
md x:\a\b //创建x:\a\b目录
rd a //删除当前目录下的空文件夹
rd /s /q x:\a //安静模式删除x盘a目录下的所有子目录、文件
/s 递归 /q 安静模式
6.copy 拷贝文件
copy 1.txt x:\a //拷贝当前目录下的1.txt到x:\a(文件名重复询问是否覆盖)
copy a x:\b //拷贝当前目录下a文件夹里的文件(不递归子目录)到x:\b
copy /y 1.txt x:\a //拷贝当前目录下的1.txt到x:\a(重复不询问直接覆盖)
copy 1.txt x:a\2.txt //将当前目录下的1.txt拷贝到x:a,并重命名为2.txt
copy 1.txt + //刷新文件的日期
copy /y 1.txt + 2.txt 3.txt //将当前目录下的1.txt 2.txt内容合并写入3.txt ,不询问直接覆盖,按输入顺序写
copy /b a.* a //将当前目录下a.开头的所有文件按名称升序排序依次合并生成a
copy /b a.1 + a.2 a //将当前目录下的a.1 a.2文件合并生成a
7.move 移动文件
move *.txt a //将当前目录下的所有txt文件移动到当目下的a文件夹(重复询问覆盖)
move /y *.txt a //~重复不询问直接覆盖
move 1.png x:\a\2.png //将当前目录下的1.png图片移动到x盘的a文件夹中,并改名为2png,重复询问
move a x:\new //若x盘有new文件夹则将当前目录下的a文件夹移动到x盘new中,若没有移动到x盘,文件改名为new(跨盘不行)
8.del 删除文件
del a //删除当前目录下的a文件夹里的所有非只读文件(不删除子目录下的文件,删除前确认 )
del /f a //删除当前目录下a文件夹的所有文件(包括只读文件,不删除子目录下的文件,会进行确认,等价于del /f a\*)
del /f /s /q a x:\ b\*.doc //删除当前目录下a文件夹中所有文件以及x:\b\下所有doc文件(包括只读文件,递归子目录下的文件,直接删除不确认)
二.文件查看
1.type 显示文本文件内容
type x:\1.txt //显示x盘下的1.txt文件内容
type x:\1.txt | more //分页显示x盘里1.txt的内容
more 1.ini //逐屏显示当目下1.ini的文本内容(空格:下一屏 q:退出)
三.特殊符号
& // 顺序执行多条命令,不管是否执行成功
&& // 顺序执行多条命令,遇到执行错误的命令后停止执行后面的命令
|| //顺序执行多条命令,遇到执行正确的命令后停止执行后面的命令
, //在特殊情况下可代替空格
; //隔开相同命令的多个目标用,若果执行中发生错误返回错误报告,但继续执行。
四.输出
echo. // 输出一个"回车换行",空白行
echo off // 后续所有命令在执行前,不打印出命令的内容
echo on // 后续的所有命令在执行前先打印出命令的内容
echo 123 // 输出123到终端屏幕
echo "我!" // 输出我!到终端屏幕
echo a > 1.txt // 输出a的字符串到当前目录中的1.txt文件中(以覆盖的方式)
五.文本处理
1.edit 1.txt // 编辑1.txt文件(进入edit编辑器,alt选对应菜单)
find 文件中搜索字符
findstr 文件中搜索字符串
/n带行显示 /i不区分大小写 /c只显示找到的次数 /v//只显示未包含123的行
六.网络操作
ping baidu.com //测试与baidu服务器的连接情况
ping 220.181.111.86 //测试与220.181.111.86的连接情况
ping x //测试与机器名为x的机器的连接情况
ping -l(L) 60000 -n 5 qq.com //向qq.com发送5次60000字节的ping
ping -n 6 127.0.0.1 //对当前主机执行6次ping操作(花费时间为5s)
ping -t baidu.com //不断的测试baidu服务器发连接情况(ctrl+pause break:查看ping的统计信息;ctrl+c终止当前任务)
ipconfig /all //查看本地ip地址等详细信息
ipconfig /displaydns //显示本地dns缓存的内容
ipcondig /flushdns //清除本地dns缓存的内容
nslookup www.x.com //获取www.x.com的域名解析
netstat -a //查看开启了哪些端口
netstat -n //查看端口的网络连接情况
netstat -v //查看正在进行的工作
netstat -p tcp //查看tcp协议的使用情况
tracert 182.140.167.44 //查看本机到达182.140.167.44的路由路径
route print //显示出ip路由
telnet 182.140.167.44 8000 //探测182.140.167.44是否使用TCP协议监听8000端口(telnet命令不支持UDP端口检测)
七.进程操作
tasklist //显示当前运行的进程信息(可查看PID)
taskkill //结束指定的进程
taskkill /im a.exe //结束名为a.exe的进程
taskkill /pid 1230 /pid 1241 /pid 1253 /t //结束pid为1230、1241、和1253的进程以及由它们启动起来的子进程
taskkill /f /im a.exe /t //强制结束名为a.exe的进程以及由它启动起来的子进程
八.用户操作
net user //查看当前机器上的用户
net user administrator //查看当前机器上的administrator用户的信息
net user x /active:yes //启用x用户
net user a 123456 /add //新建一个名为a,密码为123456的用户
net localgroup administrators a /add //把名为a的用户添加到管理员用户组,使其具有管理员权限
net user a /del //删除名为a的用户
九.其他基本操作
cls //清除屏幕
ver //显示当前windows系统的版本号
winver //弹框显示当前windows
vol //显示当前分区的卷标
label //显示当前分区的卷标,同时提示输入新卷标
date //设置新的当前日期(格式:YYYY/MM/DD)
date /t //显示当前时间
start // 运行某程序或命令
exit //退出当前cmd窗口
color //设置当前cmd窗口背景色和字体颜色(前景色)
shutdown //关闭、重启、注销、休眠计算机
shutdown /s //关闭计算机
shutdown /s /t 600 //600s后,关闭本地计算机
shutdown /a //终止系统关闭
shutdown /r //关闭并重启本地计算机
shutdown /m 192.168.1.166 /r //关闭并重启ip为192.168.1.166的计算机
shutdown /g //关闭并重启计算机,重启后重新启动所有注册的应运程序
shutdown /I //注销本地计算机
shutdown /h /f //休眠本地计算机(强制关闭正在运行的营运程序,不前台警告用户)
shutdown /s //关闭计算机
Linux常用指令
1. ls:列出当前目录中的文件和子目录
2. pwd:显示当前工作目录的路径
3. cd:切换工作目录
4. mkdir:创建新目录
5. rmdir:删除空目录
6. rm:删除文件或目录
7. cp:复制文件或目录
8. mv:移动或重命名文件或目录
9. touch:创建空文件或更新文件的时间戳
10. cat:连接和显示文件内容
11. more/less:逐页显示文本文件内容
12. head/tail:显示文件的前几行或后几行
13. grep:在文件中搜索指定文本
14. ps:显示当前运行的进程
15. kill:终止进程
16. ifconfig/ip:查看和配置网络接口信息
17. ping:测试与主机的连通性
18. wget/curl:从网络下载文件
19. chmod:修改文件或目录的权限
20. chown:修改文件或目录的所有者
21. tar:用于压缩和解压文件和目录
22. df/du:显示磁盘使用情况
23. mount/umount:挂载和卸载文件系统
24. psql/mysql:用于与PostgreSQL或MySQL数据库交互的命令行工具
25. top/htop:显示系统资源的实时使用情况和进程信息
26. ssh:远程登录到其他计算机
27. scp:安全地将文件从本地复制到远程主机,或从远程主机复制到本地
28. find:在文件系统中查找文件和目录
29. grep:在文本中搜索匹配的行,并可以使用正则表达式进行高级搜索
30. sed:流编辑器,用于文本处理和替换
31. awk:用于文本处理和数据提取的文本处理工具
32. ssh-keygen:生成SSH密钥对,用于身份验证远程服务器
33. date:显示或设置系统日期和时间
34. echo:将文本输出到标准输出
35. ln:创建硬链接或符号链接
36. uname:显示系统信息
37. shutdown/reboot:关闭或重新启动系统
38. who/w:显示当前登录的用户信息
39. curl:用于与网络资源进行交互,支持各种协议
40. zip/unzip:用于压缩和解压ZIP文件
41. chmod/chown:修改文件或目录的权限和所有者
42. useradd/userdel:用于添加和删除用户账户
43. passwd:更改用户密码
44. cron:定时任务管理器,用于自动执行计划任务
45. uptime:显示系统的运行时间和负载情况
46. hostname:显示或设置计算机的主机名
47. iptables/ufw:用于配置防火墙规则
48. netstat/ss:显示网络连接信息
49. ps/top/htop:显示进程信息和系统资源使用情况
50. history:查看命令历史记录
51. free:显示系统内存使用情况
52. lsblk/fdisk:查看磁盘分区信息和管理磁盘
53. nc:用于网络连接测试和数据传输
54. stat:显示文件或目录的详细信息
55. nmcli:用于管理网络连接的命令行工具
56. tailf:实时追踪文件的末尾,类似于tail -f
57. scp:安全地将文件从本地复制到远程主机,或从远程主机复制到本地
58. rsync:用于在本地和远程系统之间同步文件和目录
59. dd:用于复制和转换文件
60. sudo:以超级用户权限运行命令
给你一个登录页面,你该如何做渗透测试呢?
万能密码/弱口令/空口令
-
虽然几率很小,但也就随手试一下的事情:
-
如果是一些开源平台或网络设备或安全设备之类的一定要去尝试一下默认口令。
爆破/枚举
这里有个前提,就是没有验证码,有验证码的话,看后面检测验证码。
用户名枚举:我们尝试完万能密码和弱口令都无果以后,可以使用Burp抓包看看用户名是否可枚举,通过返回包的大小来判断用户存在与否。
密码爆破:然后拿着枚举出来的账号进行密码的爆破,通常Web就是用Burp
Sql注入
有的系统在登录口就存在SQL注入,我们通过正常登录进行抓包,然后发送到repeater进行不断尝试。
或者直接Sqlmap梭哈,用Burp抓个登录包,放入txt,然后用sqlmap跑。
密码找回功能
1、用户名枚举:如果页面存在密码找回功能的话,利用密码找回功能也可以用Burp抓个包,看看返回包内容是否一致,如果不一致可能存在用户枚举。
2、账号相关敏感信息泄漏:然后通过枚举到的用户名进入密码找回功能,还是要抓个包,看看返回内容,指不定有惊喜哦,也很有可能返回一个携带敏感信息的json串。
3、应答中存在影响后续逻辑的状态参数:有的还可以任意密码重置,比如
客户端发一个验证码包,我们这时随意输入验证码,发包,返回包。
返回包错误的回显为{"status":0}
将返回包的东西换成{"status":1},即可重置密码
4、重置凭证泄漏:有的是使用手机号进行密码找回,那么我们可以通过Burp抓包看看是否会把code返回过来,进行前端验证。
5、用户混淆:有的还可以通过自己的手机号接收一个验证码,然后这个验证码可以重复利用,code没有进行销毁。没有一个手机号对应一个验证码,只不过是检索是否有这个验证码。
6、重置凭证未校验:修改密码的时候,抓个包,把request包里的手机号修改为自己手机号,接收到验证码,可能就任意密码重置了。
注册功能
1、注册功能大多时候都是手机号或邮箱,而且是短位的验证码,这时候我们其实最好用的就是爆破,直接任意用户注册一波。
2、注册时如果显示该用户已注册,在注册新用户的时候抓包,把自己的信息改为admin,有可能覆盖admin,重新注册。
未授权登录、认证绕过
1、当我们尝试登录时候,抓包看返回结果,看到一些参数就修改为true、Success、1等就可能登录绕过。
2、如果是通用的框架的话,可以找其他一个弱口令进去,抓一个正常登录的返回包,然后复制过来,替换掉返回包,很可能就绕过登录了。
3、有一些跳转登录的话,修改返回包为200ok,会直接跳到正确页面。
4、修改cookie的值看时候可以直接越权使用管理员权限
目录扫描/目录遍历
目录扫描是一个存在惊喜的地方,说不定能扫描到后台未授权访问的链接、备份文件、编辑器、敏感信息等。
禁用JS 分析F12的源代码
禁用JS和查看源代码,有时候也会有意想不到的惊喜。插件Disable JavaScript
例如某些重定向,某些权限缺失,在我们未授权进入后台一瞬间,就会重定向回去登录页面,而如果此时我们禁用了JS,则可以进行一定权限的控制。
查看源代码则不用多说,有的不大聪明的程序员可能会在源代码里泄露一些不可告人的秘密,例如测试账号,还有我们可能会找到一些网站的后台结构,以及JS接口。
验证码相关
1、验证码可修改接收者
可将A账号的修改密码验证码接受者修改为B,这样A账号的验证码就会发到B的手机上,从而B可以重置A的账号密码
例如A账号moblephone=13333888888 ,这点是可控的,我们修改为moblephone=18888888888,即可收到A账号的重置验证码
骚操作:再比如moblephone=13333888888,我们可以修改为moblephone=13333888888,18888888888,看两个手机号是否都可以收到验证码
2、登录验证码可绕过
可能存在万能验证码0000或者9999,不过此类情况较为罕见。更多的情况为修改返回包,可能会出现可绕过逻辑判断。
3、验证码可爆破
验证码失效的时间过长,并且为纯数字或者过短字符,导致可被爆破。
4、验证码回显前端
有的网站验证码会回显到前端,只需要抓包即可获得验证码
5、验证码不刷新
验证码不会自动刷新,导致我们可一码多次使用,我们只需要输入一次验证码就可以让我们能够开始进行暴力破解。
6、验证码识别
可以通过burp插件captcha-killer做验证码识别爆破
JWT垂直越权
JWT全称叫 JSON Web Token,现代 web 应用中替代 cookie 表示用户身份凭证的载体。
通常 token 要么用作身份凭证、要么用于防 CSRF,若是前者,就不应该与同样表示身份凭证的 cookie 同时存在,若是后者,通常为 16 位或 32 位的哈希值,而非用点号分隔的三段 base64。于是,依次将每段解码:
短信轰炸/邮箱轰炸
短信轰炸很常见,一般在发送验证码后抓包,不断repeate即可,如果做了一定防护的话,在添加空格,或者特殊符号,或+86等都可以进行绕过。未经过防护的短信爆破十分常见。一般人可能抓包重放失败后就放弃了。
发送短信处一般每隔60秒才能发送一次,但若是发包时在手机号后加上一个空格、加号或换行符等特殊字符。然后重新发送,这时若发送成功,则说明可绕过限制。在intruder模块只要持续递增空格就可造成无限短信轰炸
框架漏洞shiro、log4j
shiro:shiro如果存在默认密钥,可以构造remeberme请求头执行任意命令。
log4j:可以通过在账号密码处或者请求头处插入指定payload看是否可以接收到jndi请求。
XSS
x-forward-for:通过在x-forward-for请求头插入xss payload,看管理员是否会查看日志触发xss。
username:通过在账号处插xss payload,看管理员是否会查看日志触发xss。
应急响应
应急响应之Windows/Linux(入侵排查篇)_主机入侵排查应急响应-CSDN博客
Windows入侵排除
- 一、检查系统账号安全
- 二、检查异常端口、进程
- 三、检查启动项、计划任务和服务
- 四、检查系统相关信息
- 五、日志分析
- 六、工具查杀
应急响应大致可以分为五个部分,其基本流程包括收集信息、判断类型、深入分析、清理处置、产出报告。
收集信息:收集客户信息和中毒主机信息,包括样本。
判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS等等。
深入分析:日志分析、进程分析、启动项分析、样本分析。
清理处置:直接杀掉进程,删除文件,打补丁,抑或是修复文件。
产出报告:整理并输出完整的安全事件报告。
勒索和挖矿事件,可以占比50%以上,而且这两种安全事件业务特征极其鲜明,因此可以单独提流程出来处置。
信息收集表
客户名称 什么区域的什么客户
感染主机数 感染了多数台主机
补丁情况 打了哪些补丁,是否存在补丁漏打
中毒现象 勒索/挖矿/DoS/僵尸网络/后门/木马
帐号密码 确认是否有弱密码
对外开发端口 对外开发了哪些端口
开启的服务 开启了哪些服务
操作系统版本 操作系统版本信息
客户需求 确认客户具体需求
取证要素:取证并非毫无头绪的,病毒本身必然有网络行为,内存必然有其二进制代码,它要么是单独的进程模块,要么是进程的dll/so模块,通常,为了保活,它极可能还有自己的启动项、网络心跳包。
总之,可以归结为如下4点要素:流量、内存、模块、启动项。
流量特征分析
一、流量特征
1、SQL注入
(1)对sqlmap的判断:若攻击者使用sqlmap且未加 --random-agent参数,则可以通过捕获请求包的user-agent字段来判断攻击者是否在使用sqlmap进行攻击;sqlmap在进行初识监测时会进行一些预检测,第一条语句是对数据库类型和XSS漏洞进行监测,且这句话几乎每次注入都不变,即我们可以通过XSS测试语句判断。
(2)出现一些特殊字符:比如单引号括号'(
(3)出现SQL命令或语句:增加、删除、修改、查询
(4)出现注释符号:比如连续两个减号--
(5)url上出现万能密码字段:'or'1'='1
2、XSS
payload包含<script></script>标签;
标签的一些事件:比如onclick、ondbclick、onload;
标签的超链接属性:比如href、src。
3、挖矿行为
若存在连续几个数据包中都符合stratum协议的json载荷特征,那么主机存在挖矿,stratum协议是目前主流的矿机和矿池间的TCP通讯协议,也可通过CPU使用率来判断,找到CPU占用高的进程获取PID信息。
二、webshell流量特征
1、中国菜刀
请求体中存在eval、base64等特征字符;
连接过程中使用base64编码对发送的指令进行加密;
还有一段以QG开头,7J结尾的固定代码。
2、蚁剑
默认的user-agent请求头是antsword XXX(不过可以修改)
一般将payload进行分段,分别进行base64编码;
一般具有像eval这样的关键字和@ini_set("display","0");这段代码。
3、冰蝎
PHP代码中可能存在eval、assert等关键词;
jsp代码中可能会有get class(),get class loader()等字符特征。
三、对告警流量分析
1、信息泄露
看访问路径中是否存在特殊文件或路径
2、SQL注入
看请求参数、请求头、请求体中是否包含SQL语句或关键字(比如union select)
3、文件上传
看请求体中是否包含代码内容(如果响应体中有success等上传成功的字样,或者有该文件的访问记录,则说明webshell上传成功)
4、XSS
看请求参数或请求体中是否包含JavaScript代码,将响应体的数据复制到文件中执行,如果弹窗,说明攻击成功。
5、代码执行
看请求参数、请求头、请求体中是否包含恶意代码(比如请求体中包含PHP代码,fastjson反序列化攻击,thinkph5远程代码执行)