网络攻击防护之关于sql注入的一些理解。sql注入是渗透最基础的东西我个人对sql注入的理解就是浏览器提交给服务器端的数据,在服务器端没有进行过滤,并带入数据库查询。要想彻底研究sql注入还得随便写一个页面。

代码如下(注释写了好久...)

数据库的数据如下

第一步 判断注入在url后面添加 and 1=1 如果网站正常显示 (如下图)

在url后面添加and 1=2 如果网站不正常显示 (如下图)

那么就能判断该网站存在注入了
判断注入想必大家都能明白 ,而为什么在url 后面添加 and 1=1和 and 1=2 就能判断出是否存在注入呢? 这个才是我们要研究的东西那么我就要从sql语句开始入手这是网站原本的sql语句 SELECT * FROM person where number=1这句话的意思就是说 查询person表里 number字段为 1 的全部信息

如果我们在参数后面 添加 and 1=1 sql语句就会变成SELECT * FROM person where number=1 and 1=1我们把这句话放进数据库查询

还是能查到数据为什么呢??因为person 表里的确有number值为1的数据 并且 1也确实等于1如果我们在参数后面 添加 and 1=2 sql语句就会变成SELECT * FROM person where number=1 and 1=2我们把这句话放进数据库查询

很明显就查不出数据了因为person 表里的确有number值为1的数据 但是 1不等于2呀再看sql语句 SELECT * FROM personwhere number=1 and 1=1这里面的and 就是并且的意思 前面number=1 要成立and 后面的表达式也要成立那么我们把number=1 换成number =8 这样也查询不出来了,因为在person表里没有number=8的数据。

即使 and 后面的表达式1=1成立 可是and 前面的number=8不存在 所以就查询不出数据
Sql注入的第二步就是 拆解字段猜字段的意思就是猜当前表里有多少个字段

显而易见 person表里有三个字段 分别是 number name birthday拆解字段的方法如下:先在网站url后面添加 order by 5 (因为我们知道表里有3个字段。。正常的一个页面应该从20开始猜)127.0.0.1/test.php?a=1 order by 5

页面报错了,说明字段数没有5个,这时我们折半 用 order by 3来试试127.0.0.1/test.php?a=1 order by 3

网页正常显示,我们在用 order by 4来试试127.0.0.1/test.php?a=1 order by 4

哈哈页面报错了,这时 在网站url 后面 添加order by 3网站正常显示在网站url 后面 添加order by 4 网站不正常显示就能判断出该表的字段数就是3。
公式 :页面表里的字段数=网站 url order by n (n表示这个网站最大正常显示的整数)
比如。。。。
提交3w.xxxx.康姆?a=1 orderby 20 网站正常显示
提交3w.xxx.康姆?a=1 order by21 网站不正常显示
那么字段数就是20!!!
接下来就是原理分析了,为什么在url 后面添加order by 语句就能判断出网页的字段数呢??
首先我们要弄懂order by 是干什么的.
order by 是对查询结果进行排序的函数首先我们用select * from person 语句查询结果如下(这句sql的意思之前已经讲过的吧!)

这时我们加上order by 1试试select * fromperson order by 1

哈哈是不是明白了? 查询出来的结果按照第一个字段也就是number 里面的值 从小到大排序了呢??额额还是不懂??那就再试试 order by 2select * fromperson order by 2

看出来了吧?order by 2 就是将结果按照person表里第二个字段里的值来进行排序数字在前面。。字母在后面 为什么是这个 顺序请自行百度asics表问题来了 为什么 order by4 就会报错了/?

因为这个表里就tm 3个字段你却让数据库按照第四个字段的值来排序这不是搞笑吗….