资安学习路上-网站常见漏洞与 Injection的爱恨情仇4

SQL Injection

  1. 承接上次所提,透过万用字串' or 1=1--,可不须验证,盗用其他人帐号,甚至可以进一步读取密码纪录档案等,那要怎麽防护呢?

  2. 防护方法:
    (1)可以最小化使用者权限设定(限制使用者,只授予能取得的权限)
    (2)过滤使用者输入
    %% 切记不要使用黑名单,会永远禁止不完(如:double encoding)
    (3)double encoding(可以轻易躲开黑名单限制)
    将%252E%252E%252F%252E%252E%252F转换一次,再转换一次变成特殊字串../../
    https://ithelp.ithome.com.tw/upload/images/20220510/20148431q0no8PekCi.png
    https://ithelp.ithome.com.tw/upload/images/20220510/20148431DDnGUFUNLr.png

  3. 发生位置
    最常发生 SELECT 查询中的 WHERE 条件
    https://ithelp.ithome.com.tw/upload/images/20220510/20148431QW25SfxU4V.png

Injection类型

可概分为「字串型」及「数字型」,分述如后:

字串型

WHERE 条件中有单/双引号(表示字串)进行查询

  1. Demo:用'让第一个单引号闭合,再用or让'1'='1'(永远成立),让WHERE 条件失效,显示SELECT * FROM user_data结果
    https://ithelp.ithome.com.tw/upload/images/20220510/20148431PXjC4KEEeT.png

  2. 起手式
    (1)观察输入点, GET、POST、Cookie 等参数
    (2)会透过一些特殊符号来确认後端的逻辑

  空
   '
   "
   `
   ')
   ")
   `)
   '))
   "))
   `))	

(3)当看到 500 error 有机会有弱点

数字型:

WHERE 条件中无单引号(表示数字或布林)进行查询

https://ithelp.ithome.com.tw/upload/images/20220510/20148431KDPXFwMppb.png

  1. Demo:利用or,让login_count为''或者1=1(永远成立)均可成立,在运用注解符号 --,将userid注解掉,让WHERE 条件失效,显示SELECT * FROM user_data结果https://ithelp.ithome.com.tw/upload/images/20220510/201484313fZ6sRReQS.png
  2. 起手式
    (1)观察输入点, GET、POST、Cookie 等参数
    (2)会透过一些「数学运算」来确认後端的逻辑
* true
* 1
* 1>0
* 2-1
* 0+1
* 1*1
* 1%2
* 1 & 1
* 1&1
* 1 && 2
* 1&&2

(3)当看到

  • id=2 跟 id=1+1 的显示结果一样
  • 500 error
  • 有机会有弱点

<<:  [ C# 开发随笔 ] 在 Async/Await 情况使用 ReaderWriterLockSlim 出现无法解锁的状况

>>:  如何完成这while回圈

Day 19动画的封装与简化

AnimatedWidget AnimatedWidget是一个有状态的StatefulWidget...

【Day12】Git 版本控制 - git checkout 移动 head

什麽是 head? 我们在 commit 版本时,其实是将档案 commit 到一条 branch(...

LeetCode解题 Day13

1189. Maximum Number of Balloons https://leetcode....

Innodb资料页结构-Part1(使用者纪录、空闲空间、页面中最小与最大的纪录)

前文提到页是Innodb的基本存取单位,一般为16kb,Innodb为了实现功能其实设计了许多不同类...

Day 6:JUCE 框架基本架构

本文介绍 Projucer 建立的 GUI Application 框架基本架构。框架(Framew...