黑客是如何利用网站漏洞入侵你的账户

相关阅读

视频讲解

相关资源

burpsuite工具

通过burpsuite进行sql批量注入完成密码暴力破解

FoxyProxy

视频中的FoxyProxy插件作用是快速帮我们快速修改浏览器的代理端口,这样就避免每次手动去设置浏览器端口了

Owasp Juice Shop

Owasp Juice shop是视频中进行测试的站点,您可以通过npm的方式进行部署

git clone https://github.com/juice-shop/juice-shop.git
cd juice-shop
npm install
npm start

也可以直接docker部署

docker pull bkimminich/juice-shop
docker run --rm -p 3000:3000 bkimminich/juice-shop

两者最终均需要通过http://localhost:3000进行访问

原理解释

视频中通过SQL注入的方式登录进网站究竟是什么原理?

用户名输入了admin '--就成功登录了这是为什么呢

举例

这里面先举个简单的例子进行分析,代码中如果确认登录的方式如下

当账户是admin且密码是password时,两者同时满足便可以登录

SELECT * FROM user WHERE username = 'admin' ADN password = 'password'

如果adminadmin '--,则下面的语句会变成

SELECT * FROM user WHERE username = 'admin'-- 'AND password = 'password'

-- '后面的内容都被注释掉了,意思是只要查询到admin用户就能登陆了,改变了原有表达式的含义

SELECT * FROM user WHERE username = 'admin'

与此类似的还有admin 'or 1=1admin '#,你也可以继续进行分析,最终都将后面密码部分注释掉了,则只需要验证存在admin账户方可登录了!

这些相当于是网站开发者没有注意到的漏洞,但是现在很多开发者都在使用框架了,框架的话会有专门的防sql注入的地方,会对表达式中的特殊符号进行过滤,就没有这么简单了!不过这个思路在很多比较老的业务系统还是很奏效的

juice-shop分析

可以看到登录的时候其实也是调用的sql语句,这里随便输入个'在网络中就可以看到下面的语句

图片[1]-黑客是如何利用网站漏洞入侵你的账户-FancyPig's blog

核心登录代码在routes/login.ts中,如下

 models.sequelize.query(`SELECT * FROM Users WHERE email = '${req.body.email || ''}' AND password = '${security.hash(req.body.password || '')}' AND deletedAt IS NULL`, { model: models.User, plain: true }) // vuln-code-snippet vuln-line loginAdminChallenge loginBenderChallenge loginJimChallenge

© 版权声明
THE END
喜欢就支持一下吧
点赞26赞赏 分享
评论 共4条

请登录后发表评论