Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

$
0
0

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

数据库的数据如下


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

那么就能判断该网站存在注入了

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

很明显就查不出数据了因为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的数据。


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

即使 and 后面的表达式1=1成立 可是and 前面的number=8不存在 所以就查询不出数据

Sql注入的第二步就是 拆解字段猜字段的意思就是猜当前表里有多少个字段


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

哈哈页面报错了,这时 在网站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的意思之前已经讲过的吧!)


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


网络攻击防护之关于sql注入的一些理解 网络攻击 sql注入 sql注入解析 网络安全

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


Viewing all articles
Browse latest Browse all 12749

Trending Articles