收集于网络与自身面经,更新中。。。
拿到一个待检测的站,你觉得应该先做什么
1)信息收集
1,获取域名的whois信息,获取注册者邮箱姓名电话等。(社工密码生成,钓鱼)
2,查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的cms或者其他漏洞。
3,查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏洞
4,查看IP,进行IP地址端口扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
5,扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏,比如php探针
6,google hack 进一步探测网站的信息,后台,敏感文件
2)漏洞扫描
开始检测漏洞,如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意文件读取,下载,文件包含,
远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等
3)漏洞利用
利用以上的方式拿到webshell,或者其他权限
4)权限提升
提权服务器,比如windows下mysql的udf提权,serv-u提权,windows低版本的漏洞,如iis6,pr,巴西烤肉,
linux脏牛漏洞,linux内核版本漏洞提权,linux下的mysql system提权以及oracle低权限提权
5) 日志清理
6)总结报告及修复方案
代码审计的函数
1. 命令执行
exec //执行一个外部程序
shell_exec || `` //通过shell环境执行命令,并且将完整的输出以字符串返回
system //执行外部程序,并且显示输出
popen //通过popen()的参数传递一条命令,并且将完整的输出以字符串的方式返回
passthru //执行外部程序并且显示原始输出
proc_open //执行一个命令,并且用来打开输入/输出的文件指针
2. 文件包含 (漏洞利用需开启文件包含allow_url_include=On)
include //找不到文件会警告,程序继续运行,程序运行到该文件才执行
include_once //只包含一次,重复的将不包含
require //找不到文件会报错,程序停止,程序一运行就执行
require_once //只包含一次,重复的将不包含
3. ssrf
file_get_contents
fsockopen
curl_exec
4. 文件操作函数
copy //拷贝文件
file_get_contents //将整个文件读入一个字符串
file_put_contents //将一个字符串写入文件
file //把整个文件读入一个数组中
fopen //打开文件或者url
move_uploaded_file //将上传的文件移动到新位置
readfile //输出文件
rename //重命名一个文件或者目录
rmdir //删除目录
unlink || delete //删除文件
nmap扫描端口用什么命令?
-p 加端口号或1-65535
拓展:nmap端口扫描参数
-sS (TCP SYN扫描)
-sT (TCP connect()扫描)
-sU (UDP扫描)
-sV (版本探测)
-O (启用操作系统检测)
-f (报文分段); --mtu (使用指定的MTU)
-D <decoy1 ,decoy2,...> (使用诱饵隐蔽扫描)
-S <IP_Address> (源地址哄骗)
sqlmap常用命令?
-u 检查是否有注入点
--data 使用post
--identify-waf 判断是否有waf
--random-agent 随机agent
--dbs 查看所有数据库
--current-db 查看当前数据库
-D 指定数据库
--tables 列出表名
-T 指定表名
--columns
-C 指定字段
--dump 列出字段内容,转存数据
--level 探测等级
--is-dba 当前用户是否是管理员权限
--roles 查看数据库用户具有的操作权限
--users 枚举所有用户
--passwords 枚举所有用户密码
--tamper 使用tamper
多个tamper脚本之间用空格隔开
-
apostrophemask.py
用utf8代替引号 -
equaltolike.py
like代替等号 -
space2dash.py
绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,一个随机字符串和一个新行(’ n’) -
greatest.py
绕过过滤 >
- space2hash.py
空格替换为#号 随机字符串以及换行符
- apostrophenulencode.py
绕过过滤双引号,替换字符和双引号。
- halfversionedmorekeywords.py
当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论
- space2mssqlblank.py
空格替换为其它空符号
- base64encode.py
用base64编码替换
- modsecurityversioned.py
过滤空格,包含完整的查询版本注释
- space2mysqlblank.py
空格替换其它空白符号(mysql)
- between.py
用between替换大于号(>)
- space2mysqldash.py
替换空格字符(' ')(' -')后跟一个破折号注释一个新行(' n')
- space2plus.py
用+替换空格
sql注入写入shell
使用sql语句的into outfile进行导出数据
sqlmap命令 --os-cmd
sqlmap命令 --os-shell
log4j原理
原理是log4j2的日志输出jndi远程对象时,调用远程对象没做检查导致,主要是log4j
提供了lookup功能,该功能允许通过ldap协议去读取相应环境中的配置。但在实现的过
程中,并未对输入进行严格的判断,从而造成远程代码执行漏洞的发生,所以我们可以
通过jndi配合ldap协议后面跟上某个文件路径来利用漏洞
防御:禁用jndi 采用最新版本 对dnslog相关访问做过滤 移除jndilookup类文件
敏感文件
1. phpinfo
2. htaccess
3. rar
4. zip
5. .git
6. .svn
7. robots
poc和exp的区别
POC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。
EXP,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。
owasp 漏洞都有哪些?
1、SQL注入防护方法:
2、失效的身份认证和会话管理
3、跨站脚本攻击XSS
4、直接引用不安全的对象
5、安全配置错误
6、敏感信息泄露
7、缺少功能级的访问控制
8、跨站请求伪造CSRF
9、使用含有已知漏洞的组件
10、未验证的重定向和转发
哪些漏洞getshell
1. 文件包含
2. 命令执行
3. sql注入
4. 端口弱口令
5. 文件上传
逻辑漏洞
- 注册处
任意用户注册
短信轰炸
修改发送包手机号
- 登录处
任意用户登录
验证码可绕过
用户账号可撞库
验证码爆破
修改用户参数(修改登陆成功的返回包数据,比如ID)
- 支付和越权
extractvalue和updatexml的区别
两者的报错回显长度都是32个字符,如果超过得使用substring来截取 extractvalue是对xml的查询,updatexml是对xml的更新,多了第三个参数
sleep和benchmark的区别
两者都是让程序睡眠N秒, 不同的是
- sleep是让程序睡眠N秒,精确控制时间。
- benchmark是一段代码重复执行的次数,不能精确控制时间
SQL注入防护方法?
1、使用安全的API
2、对输入的特殊字符进行Escape转义处理
3、使用白名单来规范化输入验证方法
4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。
渗透测试如何获取真实IP?
使用多地ping,如果ip唯一则是真实ip,否则是使用了dns
网站使用CDN如何获取真实IP?
1.查询历史DNS记录 //查看 IP 与 域名绑定的历史记录,可能会存在真实IP信息
2.查询子域名 //站点管理员可能只对部分网站部署了CDN等措施,因此可以通过搜集子域名尝试发现泄露的真实IP
3.使用国外主机解析域名 //一些CDN可能只做了国内的线路,所以使用国外主机可以获取到真实IP
4.网络空间搜索引擎 //网络空间搜索引擎会对整个互联网进行扫描,因此有可能会收录有服务器真实IP的相关信息
5.网站的邮件头信息 //比如说,邮箱注册,邮箱找回密码、RSS邮件订阅等功能场景,通过网站给自己发送邮件,从而让目标主动暴露他们的真实的IP,查看邮件头信息,获取到网站的真实IP。
6.利用网站本身缺陷 //phpinfo等信息泄露
7.扫描全网 //使用masscan、Zmap等工具
讲一下常见的安全漏洞?CVE有哪些比较熟悉?
SQL注入分类以及讲一下原理?
原理就是没有对用户输入的内容进行严格的过滤而直接带到数据库中去执行
1.报错注入 //利用报错信息
2.二次编码注入 //'引号可能会进行转义,这时可以用%2527进行代替,%25=%,再跟27结合%27='
3.base64注入 //针对传递的参数被base64加密后的注入点进行注入
4.二次注入 //有些虽然被转义后存入数据库,但是有可能会被使用的时候被利用
5.宽字节注入 //原理跟base64类似,当数据库设置为gbk编码时,可以使用%df%5C%27代替" 運' "
6.http头注入
7.布尔盲注 //没有报错信息时可以利用布尔盲注,常用函数:substr、substring、length、ascii、if
7.时间盲注 //没有报错信息时可以利用布尔盲注,常用函数:sleep、benchmark、substr、substring、length、ascii、if
了解哪些WAF?SQL注入如何绕过WAF?
1.空白符替换:a0%、注释符、+
2.绕过关键字:大小写、双写、编码
3.使用等效函数或命令
4.参数污染,如使用id=1&&id=2,Apache / PHP会有解析漏洞,只获取最后一个
5.缓冲区溢出,waf必须在性能与安全之间中和,如果出现缓冲区溢漏洞可能会导致WAF崩溃
安全服务的职责以及工作内容了解吗?
1.负责公司安全产品部署,更新以及日常运维,如系统状态监控,日志分析,故障恢复;
2.配合公司安全专家进行各类安全事件应急响应、排除等工作;
3.关注最新的安全动态和漏洞信息,及时发现客户相关系统的漏洞,并协助相关单位进行修复跟进工作;
4.参与客户系统安全漏洞的扫描和评估工作;
5.客户交代的其他工作。
代码执行,文件读取,命令执行的函数都有哪些?
1)代码执行:
eval,preg_replace,assert,call_user_func,call_user_func_array,create_function
2)文件读取:
file_get_contents(),highlight_file(),fopen(),readfile(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等
3)命令执行:
system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()
平时是怎么了解安全资讯的?
1. 公众号
2. 博客
3. 官网
4. blibli
include、require、include_once的区别
include找不到文件会警告,程序继续运行,程序运行到该文件才执行
require找不到文件会报错,程序停止,程序一运行就执行
怎么找到绝对路径
1. 输入错入内容使程序报错,爆出路径
2. 如果有读写权限,可用load_file读取配置文件信息查找
3. nginx文件类型错误解析爆路径
4. eval()函数可控的话,直接传入phpinfo(),通过phpinfo页面中Document_Root参数获取网站绝对路径。
whois查詢主要查的是什么?
1.域名信息
2.注册商
3.联系人
4.联系邮箱
5.网站创建时间
6.网站过期时间
7.DNS信息
8.网站状态
IIS常见漏洞
1、PUT漏洞
2、短文件名猜解
3、远程代码执行
4、解析漏洞
发现IIS的网站,怎样试它的漏洞?
区分版本
1.IIS6.0/7.5解析漏洞
2.IIS 7.5 NET源代码泄露和身份验证漏洞
3.IIS 7.5经典的ASP验证绕过
4.IIS 6.0安装PHP绕过认证漏洞
遇到WebLogic的网站容器,你会测什么漏洞?
weblogic反序列化漏洞
常测什么端口
443 网页浏览端口
445 共享文件夹
3306 mysql数据库
1443 mssql数据库
20 21 ftp
拓展:常见端口号
端口号 端口说明 攻击技巧
21/22/69 ftp/tftp:文件传输协议 爆破\嗅探\溢出\后门
22 ssh:远程连接 爆破OpenSSH;28个退格
23 telnet:远程连接 爆破\嗅探
25 smtp:邮件服务 邮件伪造
53 DNS:域名系统 DNS区域传输\DNS劫持\DNS缓存投毒\DNS欺骗\利用DNS隧道技术刺透防火墙
67/68 dhcp 劫持\欺骗
110 pop3 爆破
139 samba 爆破\未授权访问\远程代码执行
143 imap 爆破
161 snmp 爆破
389 ldap 注入攻击\未授权访问
512/513/514 linux r 直接使用rlogin
873 rsync 未授权访问
1080 socket 爆破:进行内网渗透
1352 lotus 爆破:弱口令\信息泄漏:源代码
1433 mssql 爆破:使用系统用户登录\注入攻击
1521 oracle 爆破:TNS\注入攻击
2049 nfs 配置不当
2181 zookeeper 未授权访问
3306 mysql 爆破\拒绝服务\注入
3389 rdp 爆破\Shift后门
4848 glassfish 爆破:控制台弱口令\认证绕过
5000 sybase/DB2 爆破\注入
5432 postgresql 缓冲区溢出\注入攻击\爆破:弱口令
5632 pcanywhere 拒绝服务\代码执行
5900 vnc 爆破:弱口令\认证绕过
6379 redis 未授权访问\爆破:弱口令
7001 weblogic Java反序列化\控制台弱口令\控制台部署webshell
80/443/8080 web 常见web攻击\控制台爆破\对应服务器版本漏洞
8069 zabbix 远程命令执行
9090 websphere控制台 爆破:控制台弱口令\Java反序列
9200/9300 elasticsearch 远程代码执行
11211 memcacache 未授权访问
27017 mongodb 爆破\未授权访问
常见端口和服务
端口 | 说明 | 攻击方法 |
---|---|---|
21 | FTP-文件传输协议 | 弱口令、爆破、嗅探、后门 |
22 | ssh-安全隧道远程登陆 | 弱口令、爆破 |
23 | telnet-远程连接 | 弱口令、爆破、嗅探 |
25 | smtp-简单邮件传输协议 | 邮件伪造 |
53 | domain-DNS域名解析服务 | DNS劫持、缓存投毒 |
80/443 | http服务 | 常见Web漏洞、IIS写文件、OpenSSL |
139 | Samba服务 | 爆破、远程代码执行 |
445 | 局域网共享 | ms-17010漏洞(Win7及之前版本) |
873 | Rsync | 远程代码执行 |
1433 | MSSQL数据库 | 爆破、SQL注入 |
2049 | NFS | 未授权访问 |
3306 | MySQL数据库 | 爆破、SQL注入 |
3389 | rdp-远程桌面连接 | 爆破、漏洞ms12-020等 |
5432 | postgresql | 爆破、注入 |
5632 | Pcanywhere | 拒绝服务等漏洞、爆破 |
5900 | VNC远程登陆 | 爆破、认证绕过 |
6379 | Redis | 未授权访问 |
7001/7002 | weblogic | Java反序列化漏洞 |
9990 | jboss | 远程代码执行、Java反序列化 |
sql注入判断数据库
后台数据库类型判断:
一、通过页面返回的报错信息,一般情况下页面报错会显示是什么数据库类型,在此不多说;
二、通过各个数据库特有的数据表来判断:
1、mssql数据库 sysobjects
http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1
2、access数据库 msysobjects
http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 and 1=1
3、mysql数据库(mysql版本在5.0以上) information_schema
http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1
4、oracle数据库 sys
http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1
判断出网站的CMS对渗透有什么意义?
1. 查找网上已曝光的程序漏洞。
2. 如果开源,还能下载相对应的源码进行代码审计。
如何突破注入时字符被转义?
1. 宽字符注入
2. hex编码绕过
mysql5.0以上和5.0以下有什么区别?
1. 5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。
2. 5.0以下是多用户单操作,5.0以上是多用户多操做。
在有shell的情况下,如何使用xss实现对目标站的长久控制?
后台登录处加一段记录登录账号密码的js,并且判断是否登录成功,如果登录成功,就把账号密码记录到
一个生僻的路径的文件中或者直接发到自己的网站文件中。在登录后才可以访问的文件中插入XSS脚本。
CSRF、SSRF和重放攻击有什么区别?
CSRF是跨站请求伪造攻击,由客户端发起\
SSRF是服务器端请求伪造,由服务器发起\
重放攻击是将截获的数据包进行重放,达到身份认证等目的
说出至少三种业务逻辑漏洞,以及修复方式?
密码找回漏洞中存在
1)密码允许暴力破解、
2)存在通用型找回凭证、
3)可以跳过验证步骤、
4)找回凭证可以拦包获取
等方式来通过厂商提供的密码找回功能来得到密码。
身份认证漏洞中最常见的是
1)会话固定攻击
2) Cookie 仿冒
只要得到 Session 或 Cookie 即可伪造用户身份。
验证码漏洞中存在
1)验证码允许暴力破解
2)验证码可以通过 Javascript 或者改包的方法来进行绕过
sql注入写文件都有哪些函数?
select '一句话' into outfile '路径'
select '一句话' into dumpfile '路径'
select '<?php eval($_POST[1]) ?>' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php';
outfile函数可以导出多行,而dumpfile只能导出一行数据
outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式