思维导图
见 41WEB攻防
知识点:
- 75、Java安全-SQL注入-JDBC&MyBatis
- 76、Java安全-XXE注入-Reader&Builder
- 77、Java安全-SSTI模版-Thymeleaf&URL
- 78、Java安全-SPEL表达式-SpringBoot框架
章节点:
Web层面:Web2.0 & Web3.0
语言安全:JS,ASP,PHP,NET,Java,Python等(包含框架类)
OWTOP10:注入,文件安全,XSS,RCE,XXE,CSRF,SSRF,反序列化,未授权访问等
业务逻辑:水平垂直越权,支付签约&购买充值,找回机制,数据并发,验证码&弱口令等
特殊漏洞:JWT,CRLF,CORS,重定向,JSONP回调,域名接管,DDOS,接口枚举等
关键技术:POP链构造,JS逆向调试,NET反编译,JAVA反编译,代码解密,数据解密等
Web3.0:未待完续筹备中….
JAVA安全
https://github.com/bewhale/JavaSec
https://github.com/j3ers3/Hello-Java-Sec
https://mp.weixin.qq.com/s/ZO4tpz9ys6kCIryNhA5nYw
Java安全-SQL注入-JDBC&MyBatis
JDBC
- 1、采用Statement方法拼接SQL语句
- 2、PrepareStatement会对SQL语句进行预编译,但如果直接采取拼接的方式构造SQL,此时进行预编译也无用。
- 3、JDBCTemplate是Spring对JDBC的封装,如果使用拼接语句便会产生注入
安全写法:SQL语句占位符(?) + PrepareStatement预编译
MyBatis
MyBatis支持两种参数符号,一种是#,另一种是$,#使用预编译,$使用拼接SQL。
- 1、order by注入:由于使用#{}会将对象转成字符串,形成order by “user” desc造成错误,因此很多研发会采用${}来解决,从而造成注入.
- 2、like 注入:模糊搜索时,直接使用’%#{q}%’ 会报错,部分研发图方便直接改成’%${q}%’从而造成注入.
- 3、in注入:in之后多个id查询时使用 # 同样会报错,从而造成注入.
代码审计案例:inxedu后台MyBatis注入
Java安全-XXE注入-Reader&Builder
XXE (XML External Entity Injection), XML外部实体注入,当开发人员配置其XML解析功能允许外部实体引用时,攻击者可利用这一可引发安全问题的配置方式,实施任意文件读取、内网端口探测、命令执行、拒绝服务等攻击。
-XMLReader
-SAXReader
-SAXBuilder
-Unmarshaller
-DocumentBuilder
1 | /** |
Java安全-SSTI模版-Thymeleaf&URL
SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入,将其作为 Web 应用模板内容的一部分,在进行目标编译渲染的过程中,执行了用户插入的恶意内容。
- 1、URL作视图
- 2、Velocity
- 3、Thymeleaf
- 其他语言参考:
https://www.cnblogs.com/bmjoker/p/13508538.html
Java安全-SPEL表达式-SpringBoot框架
SpEL(Spring Expression Language)表达式注入, 是一种功能强大的表达式语言、用于在运行时查询和操作对象图,由于未对参数做过滤可造成任意命令执行。
- 1、Spring表达式
- 2、Spring反射绕过
参考:https://www.jianshu.com/p/e3c77c053359