文章目录
- SQL 注入
- sql注入的原理?
- 如何通过SQL注入判断对方数据库类型?
- 补充一下其他方法判断数据库类型
- 时间盲注的函数
- XPath注入
- 抓不到http/https包,怎么办?
- app无自己的ssl证书
- app有自己的ssl证书-证书绑定(SSL pinning)
- 逻辑漏洞有哪些
- 身份验证漏洞
- 权限类逻辑漏洞
- 其他类型逻辑漏洞
- XSS绕过方式
- 常规插入及其绕过
- 规则探测及绕过
- SSRF协议有哪些
- XXE有了解吗?
- 域渗透中堡垒机渗透(绕过)
- 绕过ACL策略
- 通过堡垒机跳转绕过
- 其它绕过场景
- Fastjson
- fastjson反序列化漏洞
- Spring 漏洞你知道那些?
- 黄金票据与白银票据
- 域前置
- 总结
- 参考:
昨天的面试,忘记记录了,趁着还有些记忆特此把自己比较薄弱的知识点整理一下,很多东西答的比较口语化,没来得及背面试题emm,吃一点长一智吧……
SQL 注入
sql注入类型:
Boolean-based blind SQL injection(布尔型注入)
Error-based SQL injection(报错型注入)
UNION query SQL injection(可联合查询注入)
Stacked queries SQL injection(可多语句查询注入)
Time-based blind SQL injection(基于时间延迟注入)
sql注入的原理?
产生sql注入的根本原因在于代码中没有对用户输入项进行验证和处理便直接拼接到查询语句中。利用sql注入漏洞,攻击者可以在应用的查询语句中插入自己的SQL代码并传递给后台SQL服务器时加以解析并执行。
如何通过SQL注入判断对方数据库类型?
这个是真没答上来啊,下面是在网上收集的答案
1、数据库特有连接符判断
id=1 and ‘1’+’1’=’11’ #MySQL或者是MSSQL
id=1 and concat(‘1’,’1’)=’11’ #MySQL或者Oracle
id=1 and ‘1’||’1’=’11’ #Oracle
MySQL和Oracle使用concat函数进行字符串拼接,而MSSQL和Oracle使用‘+’运算符进行字符串拼接。使用这些语句用来判断正在运行的数据库类型。
2、特有数据表判断
id=1 and (select count(*) from sys.user_tables)>0 and 1=1 #Oracle
id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1 #MySQL5.0以上
id=1 and (select count(*) from sysobjects)>0 and 1=1 #MSSQL
id=1 and (select count(*) from msysobjects)>0 and 1=1 #access数据库
不同数据库含有特定的表或对象,并在任何情况下返回true值。Oracle使用sys.user_tables,而MySQL使用information_schema.TABLES,MSSQL使用sysobjects,Access使用msysobjects,这些都是元数据表或对象的名称。通过注入这样的语句并观察其响应,攻击者可以了解目标网站使用哪种类型的数据库系统。
3、特定函数判断
len和length
len():SQL Server 、MySQL以及db2返回长度的函数。
length():Oracle和INFORMIX返回长度的函数。
version和@@version
version():MySQL查询版本信息的函数
@@version:MySQL和SQL Server查询版本信息的函数
substring和substr
MySQL两个函数都可以使用
Oracle只可调用substr
SQL Server只可调用substring
4、特殊符号进行判断
/*是MySQL数据库的注释符
–是Oracle和SQL Server支持的注释符
;是子句查询标识符,Oracle不支持多行查询,若返回错误,则说明可能是Oracle数据库
#是MySQL中的注释符,返回错误则说明可能不是MySQL,另外也支持-- 和/**/
5、根据盲注特别函数判断
MYSQL
BENCHMARK(1000000,ENCODE('QWE','ASD'))
SLEEP(5)
PostgreSQL
PG_SLEEP(5)
GENERATE_SERIES(1,1000000)
SQL Server
WAITFOR DELAY '0:0:5'
6、通过报错提示内容判断
在注入点后直接加上单引号,根据服务器的报错信息来判断数据库。
错误提示Microsoft JET Database Engine 错误 ‘80040e14’,说明是通过JET引擎连接数据库,则表明数据库为ACCESS数据库,如果是ODBC的话则说明是MSSQL数据库。
补充一下其他方法判断数据库类型
1、根据开发语言判断数据库类型
asp:SQL Server,Access
.net:SQL Server
php:MySQL,PostgreSQL
java:Oracle,MySQL
2、端口判断
关系型数据库:
Oracle数据库默认端口号为,1521;
MySQL数据库默认端口号为,3306;
SQLServer数据库默认端口号为,1433;
postgreSQL数据库默认端口号为,5432;
NOSQL数据库:
MongoDB默认端口号为:27017;
Redis默认端口号为:6379;
memcached默认端口号为:11211;
时间盲注的函数
我好像就说了一个sleep() emmm
1、原理
由于服务器端拼接了SQL语句,且正确和错误存在同样的回显,即是错误信息被过滤,可以通过页面响应时间进行按位判断数据。由于时间盲注中的函数是在数据库中执行的,但是sleep函数或者benchmark函数的过多执行会让服务器负载过高
2、还有一个benchmark函数
XPath注入
1、原理
XPath注入是一种Web应用程序攻击方式,类似于SQL注入。攻击者可以利用XPath语言的强大功能,向Web应用程序发送恶意负载,以获取未经授权的信息或执行未经授权的操作。
攻击者可以在表单字段、URL参数和HTTP头中注入恶意XPath表达式。这些表达式可以被解释为查询XML文档中的节点或属性。如果Web应用程序没有正确地过滤输入数据,攻击者就可以将XPath注入负载嵌入到查询中,并从XML文档中检索敏感
2、利用
以一个普通实例来说,//users/user[username/text()= ’ ’ or ‘1’ or ‘1’ and password/text()=‘’],
这个字符串会在逻辑上使查询一直返回 true 并将一直允许攻击者访问系统。攻击者可以利用 XPath 在应用程序中动态地操作 XML 文档。攻击完成登录可以再通过XPath盲入技术获取最高权限账号和其它重要文档信息。延展开来,xpath的注入还有很多花样,像是通过updataxml()函数实现xpath报错注入,还有xpath的盲注。
抓不到http/https包,怎么办?
还能怎么办,平时这种带防护的小程序或app直接放弃了啊!,提问的目的应该是让我说出绕过的方法
不会是导出ssl证书这么简单吧?这点我还忘了说了
以下是找到的相关抓包方法
app无自己的ssl证书
有的app由于资金有限,所以不会去申请自己的ssl证书,就直接使用和浏览器一样的ssl证书,这个我们直接在安卓模拟器安装burp的ssl证书就能绕过
app有自己的ssl证书-证书绑定(SSL pinning)
SSL Pinning是一种安全机制,用于确保移动应用程序与特定服务器建立的SSL连接始终是安全的。它通过比较服务器的公钥指纹是否与预定义的指纹匹配来实现这一目的。在SSL Pinning中,应用程序会存储预先定义的服务器证书或公钥指纹,并在建立SSL连接时强制要求服务器提供匹配的证书或公钥指纹,以确保通信的安全性。这样可以有效地防止基于中间人攻击(Man-in-the-middle attack)的安全威胁。
证书绑定又叫单向认证,app不使用公开的ssl证书了,花钱去找证书颁发机构,去买一个属于自己的证书,并且自己设置了一个通信的密钥(密码)
Burp是抓应用层的包,不会抓其他层的包,由于burp没安装专属于这个app的ssl证书,burp抓到的是乱码的数据无法识别出是http的请求,burp会默认他为其他层的数据包,就不去抓这个包,导致无法抓包
绕过方法:
1、把App里面的证书揪出来,app和抓包软件的通信用那个证书。
2、删除掉App里面,单向认证的代码,让他能使用系统证书,然后他和抓包软件就能通信了。
揪证书需要逆向,很难,第二种可以使用工具进行hook,类似于断点处理
在已经安装好证书和ypn的情况下操作
使用工具hook有两种方法
1、 Xposed框架中的JustTrustMe
JustTrustMe在测试的时候会自动对app所有具有单向认证的地方进行hook
2、 objection绕过单向认证
逻辑漏洞有哪些
身份验证漏洞
暴力破解漏洞
可以针对用户名进行错误次数计算,高于一定阈值账号锁定一段时间,或者添加验证码
但是不能永久锁定,可能被用来进行账户恶意锁定
Session固定攻击
Cookie欺骗漏洞
漏洞介绍:通过伪造cookie信息能够伪造其他用户进行登录。
漏洞原理:开发者为了方便将身份信息/登录信息明文或者只是简单编码、哈希之后存放在cookies中,网站通过获取得到的cookies进行授权或者身份验证
漏洞点:cookie中有明显或者只是简单编码、哈希的字段时候 修改lsLogin值为1可以判定为用户已经登录
漏洞修复: Cookie不应该存储可理解的身份信息和登录信息,cookie对身份信息和登录信息的存储只能通过存储足够长度的随机字符串进行,避免篡改
权限类逻辑漏洞
平行权限跨越
垂直权限跨越
未经授权访问
图形验证码漏洞
找回密码逻辑漏洞
业务数据篡改漏洞
执行顺序逻辑漏洞
其他类型逻辑漏洞
条件竞争漏洞
数据包重放漏洞
XSS绕过方式
常规插入及其绕过
Script 标签
绕过进行一次移除操作:
<scr<script>ipt>alert("XSS")</scr<script>ipt>
Script 标签可以用于定义一个行内的脚本或者从其他地方加载脚本:
JavaScript 事件
我们可以像如下这样在元素中定义 JavaScript 事件:
<div οnclick="alert('xss')">
绝大部分的事件都被过滤器所移除了,但是依旧还有少量事件没有被过滤,
<divοnmοuseenter="alert('xss')">当用户鼠标移动到 div 上时就会触发我们的代码。
另一个绕过的办法就是在属性和= 之间插入一个空格:
<div onclick ="alert('xss')">
行内样式(Inlinestyle)
利用字符编码
%c1;alert(/xss/);//
绕过长度限制
"οnclick=alert(1)//
"><!--
--><script>alert(xss);<script>
过滤空格
策略:/**/,注释符号绕过;/符号绕过;
例:<img/src/onerror=alert(1)>
规则探测及绕过
WAF规则探测
使用无害的payload,类似,,观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤<>等等;
如果过滤闭合标签,尝试无闭合标签的payload(<b,<i,<marquee)观察响应;
尝试以下的payload
<script>alert(1);</script>
<script>prompt(1);</script>
<script>confirm (1);</script>
<scriptsrc="http://rhainfosec.com/evil.js">
大小写混合字符
SSRF协议有哪些
http://:探测内网主机存活、端口开放情况
gopher://:发送GET或POST请求;攻击内网应用,如FastCGI、Redis
dict://:泄露安装软件版本信息,查看端口,操作内网redis访问等
file://:读取本地文件
XXE有了解吗?
原理: 解析用户传入的xml
作用: 内网端口扫描、利用file协议等读取文件、攻击内网web应用使用get(struts2等)
危害:
1.导致可以加载恶意外部文件
2.造成文件读取
3.内网端口扫描
4.攻击内网网站
5.发起dos攻击等危害
防御: 过滤用户提交的XML数据、如果你当前使用的程序为PHP,则可以将
libxml_disable_entity_loader设置为TRUE来禁用外部实体,从而起到防御的目的
域渗透中堡垒机渗透(绕过)
关于堡垒机我之前就复现过一个JumpServer RCE
https://blog.csdn.net/weixin_53009585/article/details/129001750
堡垒机:运维审计系统
绕过ACL策略
服务器区防火墙或者交换机上没有做ACL,以及当ACL策略做的细粒度不够,导致用户区PC可以直接绕过堡垒机,直接远程服务器
通过堡垒机跳转绕过
另外一种场景就是,先通过堡垒机访问A服务器,然后再在A服务器上去访问B服务器,这样就绕过了堡垒机间接访问了B服务器
其它绕过场景
1、目标服务器远程端口受到ACL限制,但其他端口没有限制,那么最简单的解决方式就可以通过端口转发来绕过
2、甚至如果服务器可以访问外网,可以直接通过向日葵,todesk,Teamviewer进行远程,这样就完全绕开了堡垒机审计
需要对服务器网段封禁向日葵 Teamviewer等远程工具, 这种方式就不详细展开描述了
Fastjson
这里也是没怎么学
fastjson反序列化漏洞
正常请求是get请求并且没有请求体,可以通过构造错误的post请求,即可查看在返回包中是否有fastjson该字符串来判断
漏洞利用原理:
在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,没有对@type字段进行过滤,从而导致可以传入恶意的TemplatesImpl类,二这个类有一个字段就是_bytecodes,有部分函数会根据_byteencodes生成java实例,这就达到fastjson通过字段传入一个类,再通过这个类被生成时执行构造函数
无回显怎么办?
1、一种是直接将命令执行结果写入到静态资源文件中,如html、js等,然后通过http访问就可以直接看到结果
2、通过dnslog进行数据外带,但如果无法执行dns就无法验证了
3、直接将命令执行结果回显到请求POC的http响应中
Spring 漏洞你知道那些?
这里还是了解的不多,问到了才尴尬啊
CVE-2010-1622 Spring Framework class.classLoader 类远程代码执行
CVE-2013-4152 Spring Framework 中的 XML 外部实体(XXE)注入
CVE-2014-3527 Spring Security 验证绕过漏洞
CVE-2014-3578 Spring Framework 目录遍历漏洞
CVE-2016-6652 Spring Data JPA SQL 盲注
CVE-2018-1271 Spring MVC 目录穿越漏洞
CVE-2020-5405 Spring Cloud Config路径穿越导致的信息泄露
……
这么多我就回答一个敏感信息泄露
黄金票据与白银票据
这是刚学到啊,今天就学ing
域前置
还没学到啊emmm
总结
面试整体围绕简历上内容来提问,因为实习岗所以问的难度比较浅,但是范围还是蛮广的,通过面试来检测自己当前学习的状况还是挺不错的
参考:
https://www.cnblogs.com/Fluorescence-tjy/p/10400588.html
https://www.freebuf.com/articles/endpoint/359208.html
https://cloud.tencent.com/developer/article/1906218
https://blog.csdn.net/m0_38103658/article/details/105481323