ACCESS 注入
01 漏洞产生原理
注入 是针对数据库语句注入(所以识别数据库类型很重要),注入漏洞产生于脚本
注入产生于数据交互的地方
1.网站分类
- 静态网页html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如(IE、Chrome等)解析。- 不依赖数据库- 灵活性差,制作、更新、维护麻烦- 交互性较差,在功能方面有较大的限制- 安全,不存在SQL注入漏洞
- 动态网页asp、aspx、php、jsp等,由相应的脚本引擎来解释执行,根据指令生成静态网页。- 依赖数据库- 灵活性好,维护简便- 交互性好,功能强大- 存在安全风险,可能存在SQL注入漏洞
- 伪静态- 比如index.jsp 地址栏加载成index.html- 可以尝试更换后缀为脚本类型后缀,看解析是否正常;观察是否有传参点- 如果各种脚本后缀都能正常解析,是做了容错处理,再根据中间件判断;apache/nginx默认搭php,iis的话八成的asp/aspx;系统为linux的九成会搭php/jsp;多方面综合分析- 伪静态伪的比较全面的话,是扫不出来什么漏洞的;可以通过爬行链接,如果存在搜索、注册、登录等页面这种存在数据交互的,那肯定就是非静态
2.数据库与脚本类型常见搭配
- 根据脚本对数据库做基本判断- asp + accesss 一般小型的企业网站,规模小,没有太多数据交互;有些会用sqlserver比如学校网站需要大量存储数据- aspx + sqlserver- php + mysql- jsp + mysql /sqlserver /oracle oracle数据库大
- 常测脚本:jsp > php > aspx >asp一般大型的会用到jsp比较多,而且jsp语言相对安全漏洞少,用asp的话漏洞多
3.Access数据库
单库,规模小,不需要搭载服务(其他的需要账号密码登录才能访问数据)
作为独立的文件,可以直接放在源码下
- 如果要进行拖库- 下载网站目录下.mdb文件,然后本地用工具打开就可以(比如数据管理–DatabaseBrowser)- 源文件一般存放在data/data.mdb,但是管理员可能对名称进行修改,下载后自己改后缀为mdb
- 下载的数据库文件被加密- 如果能下载网站的源码,源码中会记录调用数据库使用的明文密码- 用破解工具(数据管理–Access密码读取)尝试破解出密码
4.漏洞成因
02 ACCESS 手工注入
1.漏洞挖掘
- access数据库判断-
exists(select*from msysobjects)
#如果这条语句正确,说明是Access数据库 - 漏洞出现的位置- 手工挖掘:有参数传递、与数据库交互、我们可以控制- 工具扫描:Awvs、burp、appscan
- 判断是否有注入点- 如果合法语句和非法语句返回页面一样,说明做过防御;如果直接跳转主页或者404则是存在检测,无法注入;否则可能存在- 数值型:/ 和 -0- 字符型:单引号 ’
2.注入准备语句
- sqlmap定义的几种注入类型- union联合查询、布尔盲注、时间盲注、报错注入、多语句查询、内联注入- access只存在前两种,其他的高阶数据库才有
- 猜解字段长度- order by 9 页面返回正常,说明当前注入点字段总数为9- union select 1,2,3,4 form [表名](安装hackbar插件,用工具指定字段数就行)
- 猜解表名\列名- and exists(select * from [表名]) and exists (select [列名] from admin)- 表名:admin \manager \admin_name \admin_user \user ;admin拼接域名;扫出来的后台目录等等- 列名:后台页面查一下网页源码,看源码中表单所用参数
- 根据猜解的表明和列名,在回显点爆出用户名和密码
- 布尔盲注逐字猜解- 通过判断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- 以此类推
联合查询和布尔盲注是独立的两种方式,能用联合就用联合效率更快,union被过滤、没有回显点等情况才考虑用布尔盲注
- 假如爆出的用户密码登录不进后台- 查询的表名不对,比如查到admin表,其实后台登录验证的是admin_manager表- 后台地址不对,可能存在多个后台- 用户名密码错位:如果用户名和密码不是同时爆出来的,比如只有一个回显点,就很可能出现这样的情况,这时候用where语句绑定
03 工具使用
1.burpsuite爆破
- intruder加载字典跑(不用字典也可以布尔逐字猜),速度默认5个阿里云不会拦截
- 关于burpsuite Intruder爆破模块使用:burpsuite爆破用户名密码例子 Burp Suite Intruder四种密码爆破模式简析 BurpSuite-Intruder-Payloads和Options介绍
2.sqlmap
- –tables 列出表名,假如扫出来了100张表 --columns 爆列名
- 判断哪个表是管理员表 - –count 统计每个表的列数,列数较少的可能是管理员表- –search -C pass 查询表内是否存在pass列名,同时存在用户和密码列的比较可能是
3.穿山甲
如果没有waf扫access的话,穿山甲好用(漏洞利用–pangolin)
- 漏洞利用–panggolin,直接把url放进去跑
- win10用不了,可以放到虚拟机;字典小,可以把sqlmap的字典拿过来用
04 ACCESS偏移注入
用在猜出来表名,但没有猜出列名的时候
- 这里讲的不是非常清楚,access偏移注入原理
- 跨库查询- 步骤是一样的,只是在表名前面加上另一个站的绝对路径- 必须有查询其他站的权限- from [D:\wwwroot\1\Databases\xycms.mdb].admin- 情景:a网站存在注入,但拿不到数据,同时通过目录遍历查到了其他网站的路径下的mdb
05 拦截绕过
看图识WAF-搜集常见WAF拦截页面
1.通用弹框拦截
方法:变换提交方式,get改为post提交;抓包在cookie处注入也可以
2.安全狗
方法:加入无关参数进行干扰
3.360拦截
方法:%0a代替空格就可以
4.WTS西部数码
方法:+号代替空格,多个%%%%截断关键字
5.其他
%26%26代替and,%截断关键字、大小写、url编码、复写等等组合使用
方法:%0a代替空格就可以
4.WTS西部数码
[外链图片转存中…(img-CNyqItPd-1665394023312)]
方法:+号代替空格,多个%%%%截断关键字
[外链图片转存中…(img-rjxX8Dvh-1665394023313)]
5.其他
%26%26代替and,%截断关键字、大小写、url编码、复写等等组合使用
版权归原作者 venun7 所有, 如有侵权,请联系我们删除。