[【未通过】] 巧拿某ACCESS站的密码

[复制链接]
管理05 发表于 2016-3-16 11:35:04 | 显示全部楼层 |阅读模式

管理|主题 |帖子 |积分 936

一日路过一站,顺手检测,主站无果,在二级目录发现还有一个小站,是很老的ASP站,管理登陆界面就在主站上,
01.png
顺手丢一个万能密码,居然进去了,
02.png
点后面的管理登陆,直接进了后台。
03.png
转半天也没发现能拿WEBSHELL的地方,管理员这里居然只有一个删除功能。
04.png
因为需要搞出管理的密码做社工主站用,所以只好注入,这样的站根本就没一点防注入功能,随便找一个注入点跑,结果死活跑不出表名。没表名怎么跑管理员密码呢?又不知道数据库位置,后台又没什么用,这个二级站基本上就废了。
正准备放弃的时候,突然灵机一动,那个管理员的登录框能不能利用下呢?
         于是开始研究这个登录框,这个登陆框写的比较奇怪,只要密码正确,就能登陆进去,管理员不管写什么都没关系,管理写1,密码写 1’ or ‘1’=’1,就能登录。大概猜想下,程序的验证登陆的SQL语句效果可能类似于下面的语句:
Select * from [未知管理表] where password=’注入点
注入的地方我们是可以随便写的,也就是说我们是可以控制这条SQL 语句的,大概构造下
Where password= ‘[‘ or 1=1 and ‘1’=’1]’
[]里是我构造的语句。注入的时候是没有[]的。用’ or 1=1 闭合前面 的逗号,让前面为真,控制后面的语句让程序做判断。
测试
Select * from [未知管理表] Wherepassword= ‘[‘ or 1=1 and ‘1’=’1]’ ,判断正确,成功登入
Select * from [未知管理表] Wherepassword= ‘[‘ or 1=1 and ‘1’=’2]’判断错误,提示密码错误。
05.png
我们来修改语句
Select * from [未知管理表] Wherepassword= ‘[‘ or 1=1 and password=’2]’  返回
06.png
password改成pass
Select * from [未知管理表] Wherepassword= ‘[‘ or 1=1 and pass=’2]’ 返回
07.png
直接出错了没报出具体错误,但是这样可以确定password字段是存在的。
用同样的方式确定了username也是存在的。
接下来跑密码长度,因为有两个用户,所以语句也得改改
08.png
Select * from [未知管理表] Wherepassword= ‘[‘ or 1=1 and username = ‘jsjjc’ and len(password)>’1]’
这样来跑长度,长度大于4的时候出错,说明长度是4位的。
接下来跑密码第一位
Select * from [未知管理表] Wherepassword= ‘[‘ or 1=1 and username = ‘jsjjc’ and asc(mid(password,1,1))>’1]’
把第一位转成ASC码。我们用BURIPSUTE来帮我们。
09.png
做一个数字1200的字典就差不多了,跑到正确的ASC码,返回302 ,错误的是200
10.png
第一位密码的ASC码是106,转换成字符就是小写的j
11.png
跑第二个字符的ASC码:
Select * from [未知管理表] Wherepassword= ‘[‘ or 1=1 and username = ‘jsjjc’ and asc(mid(password,2,1))>’1]’
这样依次跑下去,就把jsjjc的密码给跑出来了。
这样在ACCESS数据库不知道管理表名的情况下,巧妙的注出来了管理密码。
         通常我们遇到的登陆框,密码验证都是有MD5加密的,密码框一般不能注入,本次这种情况还是比较少见的。
         雕虫小技,老鸟飞过~
===========================================
文章基础知识较好,不过内容过于基础化,注入语句也并未发现亮点,故不予
通过。

hundan 发表于 2016-3-19 14:18:03 | 显示全部楼层

正式成员|主题 |帖子 |积分 364

看到Access就知道过不了
快速回复 返回顶部 返回列表