【面试二三事】安全岗面试谈关于SQL注入
来源:互联网 发布:网络系统管理课程 编辑:程序博客网 时间:2024/09/21 06:33
【面试二三事】安全岗面试谈关于SQL注入
- 0x01 起因
最近去面试xm某家安全公司(子公司),问到关于SQL注入的一个问题,我支支吾吾的回答了问题之后,对自己的答案还算满意,可不想却得到一句:
你会一点,但是“不懂原理”
扎心了!
- 0x02 问题
- 跳过个人介绍,面试官就对我进行了探底,谈谈我Web渗透的“基本”流程。
- 因为本身就是安全岗,就简述了自己总结的Web渗透过程。
- 1、定期对网段进行端口扫描,对每个端口的服务进行资料收集(因为安全多为白帽测试,在大一点的公司联系相关可获取到更有利的信息,也都愿意配合)
- 2、对开放的端口进行分类,对涉及Web服务的URL进行整理
- 3、对存在的系统进行登录渗透
- 防撞库
- SQL注入
- 万能密码
- 短信炸弹
- 明文传输
- 4、对功能、找接口、找输入框。
- 5、对以上收集资料进行跨站脚本批量测试。
- 6、对实际功能进行越权测试。
这确实就是最最基本的流程了,其他的当然就是随机应变了。
问题自然就出现了,SQL注入和万能密码本是同根,我最后灵机一动说:万能密码,一般登录渗透测试做的是万能密码。
不料弄巧成拙了,问题自然也被引出来了:
- SQL注入和万能密码有什么不同吗?
- SQL注入or 1=1和or 1=2结果一样吗?
- SQL注入中and 1=1和and 1=2返回结果一样,是否存在注入点。
- 0x03 解决问题
以下为个人见解,因为是Web开发转安全岗,所以站在开发的角度上思考。
1、万能密码是实质就是SQL注入,但又存在区别。
String user;String psw;//1String sql = "Select * from user where username='"+ user +"' and psw='" + psw+"'";//2String sql = "Select password from user where username='"+user+"'";
一般的登录验证为如上两种方法,但是其实形成SQL注入的并不是哪种方法引起的,而是如下。
- 采用字符串拼接的形式使得SQL语句可控。
- 对用户输入的内容过于信任,没有进行过滤。
做个大胆的假设,万能密码是在SQL注入存在的前提下才会产生。
以上的代码中,我为拼接成如下:
String user = “1’ or 1=1–”
String psw = “1’ or 1=1”;
Select * from user where user=’1’ or 1=1– and psw=’1’ or 1=1
因为两个-为注释后面所有SQL语句,后面的语句也被过滤,psw为了防止空验证则随意填写。
那么第二句话的“区别”究竟在哪里呢?
万能密码不仅仅是实质上的SQL注入,还存在逻辑漏洞
为什么这么说,因为万能密码能实现的关键其实是下一句的代码:
if(result != -1) { //登录成功代码} else { //登录失败代码}//或者如下if(rs.next()) { //登录成功}
这段代码中是开发中经常写的,仅仅判断是否为-1(因为没有找到相应的行的时候返回-1)或者是否存在返回内容。
而这些不严谨的判断方式也正是引起万能密码的原因之一。
- 0x04 总结教训
最后,跟大家说一句,面试这类模棱两可的答案,不会是面试官想要的,不要过度的深究和钻牛角尖,很可能把自己绕进去,也可能把水平一般的面试官也给绕进去,即使你是对的那在当时你也只能是错的,因为面试本来就是门“技术活”。
- 【面试二三事】安全岗面试谈关于SQL注入
- 关于web安全之sql注入攻击
- 谈面试关于web
- SQL面试
- sql面试
- 面试sql
- sql 面试
- sql面试
- sql面试
- SQL面试
- sql面试
- sql面试
- sql面试
- SQL面试
- SQL面试
- SQL面试
- Java菜鸟面试突破系列之SQL注入
- 关于面试
- [项目实训]6.13 contest_modify html文件编写
- Spring Boot集成cache
- 【剑指offer】题8:旋转数组的最小值
- 1059. C语言竞赛(20)
- This document in intended to assist with identifying and resolving system panics related to Solaris
- 【面试二三事】安全岗面试谈关于SQL注入
- java&jsp最简单的注册数据库连接
- 数据库专家:MySQL分片水很深
- 软件工程课程总结
- 单点登录实现
- Tree(2)--二叉树(Binary Tree)
- 用Java怎样把String 转换为double
- CSAPP shell-lab
- Mybatis 学习 (3) 配置文件