安全面经个人复盘(一)

安全面经个人复盘(一)

四月 19, 2021

人生第一次面试上来聊了一下直接切入正题,但是太紧张老是结巴和复读,即使如此面试官也是很耐心的提问。真心爱了/(ㄒ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漏洞传送门(二)

fastjson漏洞

websphere漏洞

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 修改文件所在组