绿盟面试点

SQL注入原理

攻击者利用Web应用程序中构建动态SQL查询的漏洞缺陷,在用户输入字段中插入恶意代码,欺骗数据库执行SQL命令,从而窃取、篡改或破坏各类敏感数据,甚至是在数据库主机上执行危险的系统级命令。

SQL注入防护

  • 对输入的特殊字符进行转义处理
  • 使用白名单来规范化输入验证方法
  • 对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
  • 服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除

在代码中对数字类型的参数先进行数字类型变换,然后再代入到SQL查询语句中,这样任何注入行为都不能成功。并且考虑过滤一些参数,比如get参数和post参数中对于SQL语言查询的部分。所以防范的时候需要对用户的输入进行检查。特别式一些特殊字符,比如单引号,双引号,分号,逗号,冒号,连接号等进行转换或者过滤。

SQL注入特征

  • 攻击者在注入SQL语句时,可能会使SQL语句产生异常或返回错误信息,这是SQL注入攻击的一个常见特征。

  • SQL注入攻击通常通过用户输入数据来实现,攻击者可能会输入特殊字符、关键字、特定的SQL语句等,来绕过应用程序的验证和授权机制。

  • 攻击者在注入SQL语句时,可能会访问不正常的URL或页面,这会在应用程序的访问日志中留下异常记录,是SQL注入攻击的另一个常见特征。

  • 攻击者可能会对应用程序进行频繁的访问,尝试不同的注入方法,以获取或修改数据库中的数据。

  • SQL注入攻击可能会导致数据库性能下降或崩溃,这是SQL注入攻击的另一个常见特征。

预编译能防范SQL注入,order by后面能使用预编译吗

order by后一般是接字段名,而字段名是不能带引号的,比如 order by username;如果带上引号成了order by ‘username’,那username就是一个字符串不是字段名了,这就产生了语法错误。

发现SQL注入的工具

  • SQLMAP、BP

bp怎么发现注入点

  • 识别注入点
    分析请求:检查捕获的请求,寻找可能的注入点,如用户输入字段。
  • 构造注入payload
    修改请求:在"Proxy"选项卡中,右键点击请求,选择"Send to Intruder"或"Send to Repeater"。
  • 利用Intruder进行模糊测试
    配置Intruder:设置攻击模式,输入payload列表,开始模糊测试。
  • 使用Repeater手动测试
    手动修改:在"Repeater"选项卡中手动修改请求,测试不同payload的效果。
  • 分析响应
    查看响应:分析服务器的响应,确定注入是否成功。
  • 利用漏洞
    提取数据:如果注入成功,尝试提取数据库中的敏感信息。

SQL注入类型

联合注入:
将多个SELECT语句的结果合并到一个结果集中

布尔盲注:
Web的页面的仅仅会返回True和False,那么布尔盲注就是根据页面返回的True或者是False来得到数据库中的相关信息

常用函数:
AND 和 OR: 用于构造布尔表达式,以判断条件是否成立。
LEFT() 和 RIGHT(): 用于从左或右提取字符串的指定长度。
LENGTH() 或 LEN(): 用于获取字符串的长度,便于逐字符枚举。

时间盲注:
时间盲注的一般思路是延迟注入,就是利用sleep()或benchmark()等函数让mysql执行时间变长并结合判断条件语句if(expr1,expr2,expr3),然后通过页面的响应时间长短来判断语句返回的值是True还是False,从而猜解一些未知的字段

宽字节注入:
宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字。
PHP中编码为GBK,函数执行添加的是ASCI编码,MYSQL默认字符集是GBK等

利用SQL注入提权

利用SQL注入:

  • 一旦确认存在SQL注入漏洞,你可以使用各种SQL注入技术来提取数据或修改数据库内容。
  • 常见的SQL注入技术包括联合查询(UNION SELECT)、盲SQL注入(基于布尔或基于时间的)和错误注入等。

提权尝试:

  • 枚举数据库信息:首先,你可能需要枚举数据库的结构、表、列和数据,以找到潜在的敏感信息或提权机会。

  • 查找敏感信息:搜索包含密码、哈希、密钥或其他敏感信息的表和列。

利用应用程序逻辑:

  • 有时,应用程序的逻辑或数据库设计可能允许你通过SQL注入来绕过身份验证或访问控制。
  • 利用存储过程或函数:如果数据库包含可以执行敏感操作的存储过程或函数,并且这些过程或函数可以从你的SQL注入点访问,那么你可能可以利用它们来提权。

提权到操作系统:

  • 在某些情况下,如果数据库配置不当或存在其他漏洞,你可能能够从数据库层面提权到操作系统层面。
  • 这可能涉及利用数据库文件系统的权限、数据库软件本身的漏洞或与其他服务的交互等。

清理痕迹:

  • 在进行任何非法活动时,攻击者通常会尝试清理其留下的痕迹,以避免被检测到。

XSS攻击

XSS类型包括:

  • 非持久型跨站:即反射型跨站脚本漏洞,是目前最普遍的跨站类型。跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码不存储到服务端(比如数据库中)。

  • 持久型跨站:这是危害最直接的跨站类型,跨站代码存储于服务端(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。

  • DOM跨站(DOM XSS):是一种发生在客户端DOM(Document Object Model文档对象模型)中的跨站漏洞,很大原因是因为客户端脚本处理逻辑导致的安全问题。

XSS的危害包括:

  • 钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞将目标网站重定向到钓鱼网站,或者注入钓鱼JavaScript以监控目标网站的表单输入,甚至发起基于DHTML更高级的钓鱼攻击方式。

  • 网站挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。

  • 身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS可以盗取到用户的Cookie,从而利用该Cookie盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie被窃取,将会对网站引发巨大的危害。

  • 盗取网站用户信息:当能够窃取到用户Cookie从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。

  • 垃圾信息发送:比如在SNS社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。

  • 劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等。

  • XSS蠕虫:XSS 蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS攻击等。

常用的防止XSS技术包括:

  • 与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。

  • 不仅要验证数据的类型,还要验证其格式、长度、范围和内容。

  • 不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。

  • 对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。

  • 在发布应用程序之前测试所有已知的威胁。

文件上传

在具有上传功能的网站上传恶意脚本文件,并找到文件所在目录位置,最后将恶意文件传递给php解释器执行。

文件上传绕过waf:
白名单:MIME绕过、%00截断、0x00截断、0x0a截断
黑名单:大小写绕过、点绕过、空格绕过、双后缀名绕过
前端:JS类防护
抓包修改:改后缀,改content-type值

  • Upload-labs-01 修改前端的检查上传文件函数checkFile()(删除或者修改为true),就可以上传文件(前端验证)
  • Upload-labs-02 bp抓包修改后端校验包文件类型(MIME绕过)
  • Upload-labs-03 修改黑名单和文件后缀(.php改成.php5)
    大小写绕过

文件上传漏洞防御方式:白名单,采用随机改写文件名和文件路径,文件上传目录设置为不可执行、限制上传文件大小、js前端过滤、将文件独立存储做静态处理

文件包含

文件包含漏洞原理:由于开发者便于在开发时调用文件并且执行,某些网站目录下的文件可直接以脚本代码运行。

文件包含漏洞类型:
1.本地包含(文件在本地服务器)
2.远程包含(当源代码中 php.inid的allow_url_fopen和allow_url_include为ON时可以包含第三方文件)

include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。

文件包含漏洞防御方式:关闭php.ini中allow_url_include开关、指定用户目录访问、过滤 …/ 等特殊字符。

文件包含漏洞绕过方法:\0或%00截断,多个字符突破文件格式判别。

文件下载漏洞

在某些网站目录下可直接下载文件,导致敏感信息文件泄露,源码文件泄露。

关键查找参数: readfile、fopen、file_get_contents

防御方式:过滤关键字符…/ 、固定访问目录、白名单、单独文件权限设置。

绕过:大小写,字符编码(16改8)

文件读取漏洞:

在网站参数中输入参数文件,显示文件中的源代码

防御方式:过滤关键字符…/ 、固定访问目录、白名单、单独文件权限设置。

绕过:大小写,字符编码(16改8)

SQLMAP

  • 判断是否有注入点

sqlmap -u url (get方式)
假如该数据为post数据或cookie时,需要捉包,并把该包保存在1.txt,然后在txt当前的目录下,输入sqlmap -r 1.txt即可

  • 查看当前的用户下的所有的数据库

sqlmap -u url --dbs

  • 查看当前的数据库表名

sqlmap -u url -D 库名 --tables

  • 查看当前的字段名

sqlmap -u url -D 库名 -T 表名 --columns

  • 获取字段内容

sqlmap -u url -D 库名 -T 表名 -C 字段名 --dump

  • 获取数据库的所有用户

sqlmap -u url --users

  • 延时探测

–delay=1(1秒)

  • 常用的等级组合

–level 3 --risk 2

  • 判断是否有管理权限

–is-dba(database admin)

Nmap

-O //系统扫描

-v //显示详情

-sT //TCP连接扫描

-sS //SYN扫描

-sP //Ping扫描

-sU //UDP扫描

-sA //扫描被屏蔽端口

-p <80> / /指定端口扫描

-sV //服务版本扫描

-iL 1.txt //扫描1.txt中的ip

192.168.?.1/24 //全网段扫描

-Pn //绕过ping扫描

Java反序列化

只有实现了Serializable接口的对象才可以被序列化,重写两个方法readObject()和writeObject()

如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。

TransformedMap类中的数据发生改变时,可以自动对进行一些特殊的变换,比如在数据被修改时,把它改回来; 或者在数据改变时,进行一些我们提前设定好的操作。

Runtime.getRuntime().exec(“calc.exe”)

DNSLOG:大多数反序列化漏洞造成RCE攻击没有回显,利用dnslog平台,在RCE的时候构造DNS请求,说明RCE成功,验证了漏洞存在性。

Weblogic T3:T3 协议是WebLogic私有的协议,相比于JRMP协议多了如下的一些特性:

服务端可以持续追踪监控客户端是否存活(心跳机制),通常心跳的间隔为60秒,服务端在超过240秒未收到心跳即判定与客户端的连接丢失。

通过建立一次连接可以将全部数据包传输完成,优化了数据包大小和网络消耗。

Java 反序列化漏洞利用工具通过T3 协议与Weblogic 进行的通信,实现Weblogic RMI 调用过程,从而实现远程加载恶意类。

T3 协议有自己的流量特征。反序列化标志:T3 协议中每个反序列化数据包前面都带有fe 01 00 00,而后再加上Java 反序列化标志ac ed 00 05。序列化数据。

注意:Java 反序列化数据开头包含两字节的魔术数字,这两个字节始终为十六进制的0xac 0xed,接下来是两字节的版本号这里为0x00 0x05。在T3 协议的数据包中,在这个四个字节前还有四个字节 fe 01 00 00

如何检测FastJson 漏洞是否存在,并且判断其版本?

可以使用BurpSuite 扩展FastjsonScan 进行漏洞检测。

Apache Shiro 550 和721 区别?

Shiro550 反序列化漏洞原理:

记住我的功能开启之后,会有Cookie 数据,Cookie 数据其实就是加密后的经过序列化的用户对象,也就是二进制字节流。
加密算法是AES 算法,算法很安全,但是秘钥是固定的,并且存储于源码中。

Shiro721 利用条件:

AES 秘钥不在是固定的了,但是此秘钥可以被爆破
需要提供一个合法用户,再点击remember me ,成功登录之后,获取Cookie remember-me 的值。

Java常用API

  • Math、System、Object类的toString方法、Object类的equals方法、Objects、BigDecimal

Java IO

Java IO(Input/Output)是用于处理输入和输出操作的API,它允许程序与外部世界进行数据交互
2.如何从数据传输方式理解IO流?
可以从三个不同的维度进行分类:

1、按照流的方向(输出输入都是站在程序所在内存的角度划分的)

  • 输入流:只能从中读取数据【主要由InputStream和Reader作为基类】

  • 输出流:只能向其写入数据【主要由outputStream和Writer作为基类】

2、按照流的操作颗粒度划分

  • 字节流:以字节为单元,可操作任何数据【主要由InputStream和outPutStream作为基类】

  • 字符流:以字符为单元,只能操作纯字符数据,比较方便【主要由Reader和Writer作为基类】

3、按照流的角色划分

  • 节点流:可以从/向一个特定的IO设备(如磁盘,网络)读/写数据的流,也叫【低级流,主要由】

  • 处理流:用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能,也叫【高级流】

密码相关

对称密码:SM1、SM4、SM5、SM6、SM7、SM8、ZUC
非对称密码:SM2、SM9
单向散列函数:SM3

SM2

椭圆曲线算法、计算复杂度:完全指数级、存储空间:192-256bit、速度:比RSA快百倍以上

$ y2=x3+ax+b $

对消息摘要进行签名

  • 计算椭圆曲线点 S = [h]pk, 其中 h = 1, 若 S 是无穷远点, 则报错并退出;
  • 选择随机数 k ∈ Z^∗q−1, 计算 c1 = [k]G = (x1, y1), [k]pk = (x2, y2);
  • 计算 c2 = [m]G + [k]pk;
  • c3 = H(x2||m||y2);
  • 输出密文 c = (c1, c2, c3)
    标准SM2方案的 c2 部分是 m ⊕ t, 其中 t = KDF(x2||y2, mlen),
    $ KDF : {{0, 1}}^∗ mlen →{0, 1}^{mlen} $
    但由于本方案的后续计算过程没有用到 t, 故在本方案中无需计算该值.

验证 c1 是否满足椭圆曲线方程, 若不满足则报错并退出;

  • 计算椭圆曲线点 S = [h]c1, 其中 h = 1, 若 S 是无穷远点, 则报错并退出;
  • 计算椭圆曲线点 [sk] c1 = (x2, y2), [m] G = c2 − [sk] c1;
  • 利用 BSGS 算法从 [m]G 中恢复 m;
  • 若是同态运算后的密文, 直接输出明文 m, 解密完成并退出;
  • 否则计算 u = H (x2||m||y2), 判断 u = c3 是否成立. 若成立, 输出明文 m, 否则报错并退出.

绿盟面试官问题

  • SQL注入类型有几种?
  • log4j是用来干嘛的?
  • 有打过什么比较完整的靶场吗?
    答:dvwa、皮卡丘、upload-files;
  • 有没有更完全一点的?
    答:没有了
  • 这个java的Maven是干嘛的?
  • 你这个Java项目说可以防止SQL注入,你试过吗?
  • 有没有复现过什么漏洞?
    答:复现过nexus的CVE-2024-4596(具体是不是这个编号记不清了,懒得查)的路径遍历漏洞
    问这些问题的原因是简历上写了学过Java,还将大二的一个数据库课设写了上去,没写这些的应该主要是问SQL注入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值