|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于MySQL数据库已经如此普及,对企业来说它无疑是一个更好的选择。access|server|数据|数据库
间接猎取access、SQLServer等数据库数据
Author:Mix
PST,
Ph4nt0mSecurityTeam
http://www.ph4nt0m.org
当利用SQL注进access的时分,常常会碰到暗码为中文、猜不到关头字段名如许的成绩。利用本手艺就可以够很疾速的办理如许的成绩。本手艺最低请求有两条:
1.利用access数据库的体系存在SQL注进毛病;mssql数据库也撑持这个手艺
2.必要晓得欲爆数据地点的表的表名和这个表下的一个字段名,一样平常都是id字段
利用本手艺不言而喻的上风在于:
1.能够不必要引号,过滤引号对本手艺没有影响
2.能够疾速的晓得敏感数据的内容,而不用像以往一样渐渐的猜解,中文、特别字符等等都通杀
3.在SQLServer屏障了毛病信息以后仍旧能够疾速失掉敏感数据内容
4.能够在不晓得关头(欲知数据的)字段名的情形下仍旧可以猎取到欲知数据
咋一看大概这个手艺很难,实在很复杂。一共有两个难点,一样平常的第一个难点在看到了局今后都很简单想到,可是第二个难点却切实其实有点点贫苦。
起首看一个表格,是union的语法。这也是爆出数据的次要道理。以下图所示:
当我们利用SQLInject手艺拔出union语句今后,只需两个select查询失掉的列数不异,那末整条SQL语句实行完成今后,失掉的查询了局就酿成了union前面select失掉的数据。以是就有大概将我们所必要的数据爆出来。来看一个复杂的例子:
http://www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20admin
这是一个SQLServer的服务器,封闭了毛病信息的报答,以是不克不及够依照以往的办法间接失掉敏感数据。经由过程SQLInject拔出union语句今后,能够勇敢的推测到所实行的SQL语句酿成了:
select*fromSoftwhereSoftID=3903unionselectusername,password,1,1,1fromadmin
那末在一般情形下显现Soft第1、2个字段值得中央就会显现admin的username和password字段,前面的3个1也是同理替换了。依照这个特征,我们固然也能够间接失掉Admin_UserInfo内外面的username和password字段。机关的语句以下所示:
">http://www.chinakj.com/SoftView.asp?SoftID=3903%20union%20select%20username,password,1,1,1%20from%20Admin_UserInfo%20where%20username
以上就是复杂的使用union来完成对敏感数据的猎取,而欠亨过庞大的暴力拆解。为了完成在不晓得字段名一样可以失掉个中的数据这个目标的时分,我们固然就应当想到利用*来取代字段名。如许只需*所代表的字段再加上几个1的数量和剧本中的select查询表中的字段数量不异,那末就一样能够失掉不晓得字段名的数据了。
思索到如许一种情形,有如许一条语句:selectid,hit,softname,softURLfromsoftwhereid=10。个中可以在网页中一般显现出来的字段是softname和softURL,那末我们在利用union的时分就应当调剂*地点的地位,一样平常admin表中布局为idusernamepassword,那末在注进下面这条假定的语句的时分就应当如许机关SQL语句:select1,*fromadmin。使*所取代的username和pssword字段处于softname和softURL两个字段的地位上,如许网页才干够将我们想要得username和password字段乖乖的交出来。固然这里只是最复杂的一个例子来讲明,有良多时分一个内外面大概有十几个字段,我碰到最长的是四十三个字段。那末剧本中利用select*来做查询的话,我们在机关unionselect就应当用1充数到四十三个字段。个中固然是会有一些字段不被网页显现出来,这就必要思索unionselect前面的*号地点的地位了。信任这个应当不必我多说了。
下面说的语法完整切合SQLServer。可是Access和SQLServer比拟较,真的是小巫见年夜巫了。在SQLServer内里,当我们利用select*,1,1,1fromadmin语句查询失掉的纪录汇合分离是:*111。可是在access傍边下面的这条语句查询的了局是111*,也就是说不管你将*号处于这群1两头的甚么地位上,*所代表的数据老是处于查询了局的最初面。用一个庞大点的例子作申明:
http://www.hnp2p.com/mov/view.asp?id=1916%20union%20(select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16%20from%20admin)
这个站点利用的是access数据库,能够看到可以一般显现出来的字段是2、3、7、8、10、11,尔后面的字段却不会显现出来,往失落14,15,16换上*号,页面一样显现出数字,也就是说admin中的字段数是三个,一定是idusernamepassword这类布局,可是除id字段其他的字段都不克不及够被推测着名字。依照在下面SQLServer中所利用的办法挪动*号的地位以求可以将敏感数据爆出来,在access中是不成行的。缘故原由是access一直将*好所取代的字段放在查询数据集的最初面。Access查询出来的了局永久都是:1,2,3,4,5,6,7,8,9,10,11,12,13,*这个模样。为了将*好所取代的字段暗示出来,我们必需将*所取代的字段挪动到其他地位上。先看了局:
http://www.hnp2p.com/mov/view.asp?id=1916%20union%20select%201,*%20from%20(((admin%20as%20a%20inner%20join%20admin%20as%20b%20on%20a.id=b.id)%20inner%20join%20admin%20as%20c%20on%20c.id=b.id)%20inner%20join%20admin%20as%20d%20on%20d.id=c.id)%20inner%20join%20admin%20as%20e%20on%20d.id=e.id
经由过程如许机关的语句的实行,终极查询失掉的数据情势是
12345678910111213141516
1,a.ida.namea.pwdb.idb.nameb.pwdc.idc.namec.pwdd.idd.named.pwde.ide.namee.pwd
个中第3和第7个字段恰好就是我们想要得username和password字段的值。这里我利用的是join语法,将两个表毗连(相加)起来从而机关失掉如许的一个满意我们请求的查询了局。
Join分为全体毗连、左毗连和右毗连,详细区分能够往检察SQL语法。在这里,access中我们不论选择哪种毗连体例效果都同等于全体毗连。看一个复杂的join语法
SELECT*
FROM(表1INNERJOIN表2ON表1.序号=表2.序号)
INNERJOIN表3
ON表1.序号=表3.序号
转换为实例就是:
select1,2,3,4,*
from((adminasainnerjoinadminasbona.id=b.id)
innerjoinadminasconc.id=b.id)
innerjoinadminasdond.id=c.id
依照这类格局就能够把下面的谁人url真正实行的SQL语句解出来,不过就是不休的利用join毗连数据表admin,然后经由过程1来补齐后面的字段数量。只需语句构建妥当,那末不晓得字段名的数据全体都可以在页面中显现出来。这就是这个手艺的难点地点了。
好了,全体都先容完了。假如想把这个手艺写成程序的话,也是很有大概的。只不外在语句布局机关的时分最好仍是利用人脑吧~~~呵呵
如果互联网服务提供商,支撑数据的云服务,或它们之间任一点网络被堵塞或中断,他们就会遇到与数据延迟或应用程序故障有关的问题。如果问题发生在企业内部,解决方案提供商可以排除故障找出原因。 |
|