安全面经个人复盘(一)
人生第一次面试上来聊了一下直接切入正题,但是太紧张老是结巴和复读,即使如此面试官也是很耐心的提问。真心爱了/(ㄒoㄒ)/~~。
1、渗透测试的流程
1、信息收集:whois、网站源IP、旁站、C段网站、服务器系统版本、容器版本、程序版本、数据库类型、二级域名、防火墙、维护者信息
2、漏洞扫描:Nessus, AWVS
3、手动挖掘:Webshell,SSRF,XSS,逻辑漏洞,SQL注入,弱口令等等
4、验证漏洞
PS:当然不可能就这,这个只是个大概,这个问题如果面试的时候问到了,不能就向上面说个大概,这是能证明你实力的真正问题。本人面试的时候就说了20分钟以上(一定要细说),建议准备一下自己的大纲不然很容易复读和结巴😂。
2、XSS获取平台
各有各的,这里不说自己的平台了
3、XSS漏洞修补方式
1、输入编码转义
2、白名单过滤
3、添加Http-only尽量降低XSS的危害
4、XSS的绕过方法
1、双写绕过,例如在过滤domain为空时,可以通过domdomainaim进行绕过测试。
2、编码绕过,例如Payload: "><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>
3、空格绕过,例如:"><a href="javascr ipt:alert(document.domain);">XSS</a>
还有注释干扰,伪协议、空格Tab回车,css等绕过方法
5、Mysql注入写入一句话条件
1、获取网站可写目录的绝对路径OUTFILE
2、root权限
3、没有配置–secure-file-priv
6、Mysql注入写入一句话的函数
OUTFILE
7、Sql注入的修复方式
1、所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
2、对进入数据库的特殊字符(’”\尖括号&*;等)进行转义处理,或编码转换。
3、严格限制变量类型,比如整型变量就采用intval()函数过滤,数据库中的存储字段必须对应为int型。
4、数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。
5、网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。
6、严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。
7、避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。
8、Sql参数化查询
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。
9、Mysql的报错注入的函数
floor(),extractvalue(),updatexml(),exp()
10、Mysql的时间注入的函数
sleep(),benchmark(),笛卡尔积,GET_LOCK()加锁,RLIKE REGEXP正则匹配
11、SQLMAP常用命令
GET方式sqlmap -u “url” //这个URL必须含
POST方式sqlmap -u http://testasp.vulnweb.com/Login.asp –data “tfUName=1&tfUPass=1”
cookie注入sqlmap -u “url” –cookie “chsadj” –level 2 等等
12、SQLMAP -R参数的使用
-r 1.txt 对于用post方法提交的,参数不在URL里面的网页,可以先截获数据,保存成文件再用这个参数执行
13、SQLMAP GET型注入中许多参数只取其中一种
–param-del
14、SQLMAP其他参数的使用
–random-agent 使用随机的user-agent
–header=”\n” 指定头信息,如User-Agent:dsacs,大小写敏感,多个用\n分隔
–delay 请求延迟间隔,单位秒,默认无延迟
–level 设置检查的等级等
15、Sql注入宽字节注入原理
首先说下概念,GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符。
GBK 占用两字节,ASCII占用一字节,PHP中编码为GBK,函数执行添加的是ASCII编码(添加的符号为“\”),MYSQL默认字符集是GBK等宽字节字符集。
%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。
16、常见的逻辑漏洞
订单金额任意修改,验证码回传,未进行登陆凭证验证,接口无限制枚举,平行越权,垂直越权和交叉越权等等
17、Nmap使用
nmap -T4 -A -v ip nmap最好用命令
nmap ip/24 扫描目标所在网段
nmap -iL C:\targets.txt 扫描主机列表targets.txt中的所有目标地址
nmap ip/24 -exclude ip 扫描除某个地址以外的地址
nmap ip -p 21,22 扫描某一地址的端口21,22
18、Burp抓取返回包3种方法
1、proxy模块抓取包右键Do intercept选取Response to this request
2、proxy模块抓取包放入Repeater放行
3、设置中勾选参数即可每个包都返回响应包
19、渗透过程中有趣的漏洞
各有各的
20、XSS获取他人Cookie运用进行下一步渗透
如果获取的是普通用户Cookie则可以提交SRC,意义不大,若是获取管理员Cookie则可以进去后台进行下一步的渗透例如上传Webshell等等
21、半年之内常见的组件和中间件漏洞
IIS 1、PUT漏洞 2、短文件名猜解 3、远程代码执行 4、解析漏洞
Apache 1、解析漏洞 2、目录遍历
Nginx 1、文件解析 2、目录遍历 3、CRLF注入 4、目录穿越
Tomcat 1、远程代码执行 2、war后门文件部署
jBoss 1、反序列化漏洞 2、war后门文件部署
WebLogic 1、反序列化漏洞 2、SSRF 3、任意文件上传 4、war后门文件部署
其它中间件相关漏洞 1、FastCGI未授权访问、任意命令执行 2、PHPCGI远程代码执行
22、struts2/fuckjson/weblogic/websphere等漏洞
struts2漏洞传送门(一)、struts2漏洞传送门(二)
23、应急响应
参考文章https://github.com/Bypass007/Emergency-Response-Notes
24、 windows和Linux日志溯源
windows:win+R运行eventvwr进入事件查看器
Linux:/var/log下的日志
Web:查看Apache、Nginx、Mysql日志
25、爬虫脚本常用到哪些库
requests、json、lxml、BeautifulSoup、pyquery等
26、解析服务器H5语言提取关键信息
BeautifulSoup
27、常见的爬虫框架
pyspider、scrapy、Crawley、Portia、selenium等
28、Linux命令创建用户
useradd和adduser,建议使用adduser会自动进入创建密码、目录等
29、Linux命令删除用户
userdel和deluser,建议使用deluser会自动删除用户目录等相关文件
30、Linux命令切换用户
su username 切换用户
31、Linux命令显示用户组
首先cat /etc/passwd|grep username查找用户所在组ID
cat /etc/group查看所有组信息找到组ID对应名
PS:groups查看当前登录用户组内成员
32、Linux命令whereis
Linux whereis命令用于查找文件。
-b 只查找二进制文件。
-B<目录> 只在设置的目录下查找二进制文件。
-f 不显示文件名前的路径名称。
-m 只查找说明文件。
-M<目录> 只在设置的目录下查找说明文件。
-s 只查找原始代码文件。
-S<目录> 只在设置的目录下查找原始代码文件。
-u 查找不包含指定类型的文件。
33、Linux命令awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
awk ‘{[pattern] action}’ {filenames} # 行匹配语句 awk ‘’ 只能用单引号
awk -F #-F相当于内置变量FS, 指定分割字符
awk -v # 设置变量
awk -f {awk脚本} {文件名}
34、Linux命令创建目录
mkdir dirname
PS:mkdir -p确保目录名称存在,不存在的就建一个。
35、Linux命令删除目录和文件
rm -r dirname删除目录
rm filename 删除文件
PS:-i 删除前逐一询问确认,-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。-r 将目录及以下之文件删除。
谨慎使用rm -rf /*
36、Linux命令杀死进程
首先top或者ps,建议使用ps,因为top是实时信息并不是找到进程号的最快手段
使用ps aux | grep XXXX,例如ps aux | grep chrome可以快速找到与chrome相关的进程
然后kill -9 PID
PS:ps命令参数a =为所有用户显示进程,u =显示进程的用户/所有者,x =还显示未附加到终端的进程
kill 1=挂断,2=从键盘终端,9=杀死信号,15=中断信号,17、19、23=停止进程
37、Linux命令查看定时命令
crontab -l 列出目前的定时任务
PS:crontab -e 写入新的定时任务
crontab -r 删除当前的定时任务**(谨慎使用)**
38、Linux命令改变目录权限
chmod 4+2+1 filename
PS:chown username filename 修改文件所有人
chgrp groupname filename 修改文件所在组