WEB主机--SQL注入毛病使用
ASPCMS是公开源代码的CMS,可以在网上下载其源代码。前面确定了版本在2.2.4—2.2.9之间,可以根据百度的版本信息和刚才搜集到的毛病信息进一步验证,缩小版本范围。也可以将这个区间的版本都下载下来,联合源代码举行分析。在现实的安全测试中,这个验证的过程比力漫长,这里我们跳过了一些无效的验证步调。
此处选择使用ASPCMS v2.2.9版本,通过代码审计,并联合互联网上已有的毛病信息,举行安全测试。
构造SQL注入语句
根据搜刮到的毛病信息,CommentList.asp步伐文件中存在SQL注入毛病,访问此URL,发现是一个表现品评的页面。固然有了现成的使用代码,但我们须要进一步明确其可以大概实现的缘故起因。
打开Plug/Comment/CommentList.asp文件,看到原查询语句为:
此中SwitchCommentsStatus是指品评稽核开关,为1的时间代表打开品评稽核。{prefix}是表的前缀。
下面,我们在access数据库里,在原有SQL语句的根本上,使用团结查询,构造出能同时查询出管理员暗码的SQL语句。
ASPCMS使用的是Access数据库,Access是由微软发布的,包罗在专业版和更高版本的Office套件中。Access 的定位是桌面数据库,由于它只能在一台盘算机上运行,不像SQL Server、MySQL等网络版数据库,可以有多个客户端通过网络同时访问实行。
将ASPCMS步伐源代码data目次下的#data.asp改为#data.mdb,使用Access软件打开,根据文件名推测admin_user表里大概存放用户名和暗码,打开查察确实云云。于是在Access里“创建”—“查询操持”,出现“表现表”界面后,不添加表,直接关闭。然后在“查询”界面的标题栏上右键选择“SQL视图”,然后就可以直接输入SQL语句了。
接下来构造SQL注入语句。在commentList.asp文件原有查询品评的SQL语句背面,加上SQL团结查询语句,从admin_user表里查出用户名和暗码,代码如下:- select * from aspcms_comments where ContentID=0 union select loginname, password,3,4,5,6,7 from aspcms_user
复制代码 运行SQL语句,即可获取到admin_user表的用户名和暗码。可见,毛病使用代码本质上就是使用了SQL注入毛病,将团结查询语句通过id参数注入到了原始的SQL语句当中,从而查询出了管理员暗码。
接下来须要将刚才构造好的SQL代码,拼接到URL中去实行。由于在commentlist.asp步伐文件中已经写好了前半部门语句,因此在URL使用时只须要拼接上后半部门步伐里没有的代码即可,在步伐中的使用代码如下:- http://192.168.10.130/plug/comment/commentlist.asp?id=0 union select top 1 userid,groupid,loginname,password,now(),null,1 from aspcms_user
复制代码 然后使用此URL访问网站时,却得到了如下的报错信息,测试失败。
绕过ASPCMS的SQL注入防御规则
此时一边参考网上的毛病信息,一边举行代码审计,将这两种方式联合起来,来分析测试失败的缘故起因。根据上面得到的毛病信息,再次打开Plug/Comment/Commentlist.Asp文件,在10-11行可以看到Aspcms对客户端提交的数据使用Filterpara函数举行过滤,难怪刚才的SQL注入代码会失败。
下面须要查找Filterpara函数的详细代码,ASP步伐使用Function界说函数。使用具备文件内容搜刮功能的软件,一样平常的加强型记事本、或开辟软件都具有在指定目次下搜刮笔墨的功能。以Notepad3为例,点击菜单“查找—在文件中查找”,搜刮字符“Function filterPara”,根据效果,找到界说此函数的文件是Inc/Aspcms_Commonfun.Asp。
打开aspcms_commonfun.asp文件,使用“查找”功能,在aspcms_commonfun.asp文件的901-904行,找到filterpara函数。- Function Filterpara(Byval Para)
复制代码- Filterpara=Preventsqlin(Checkxss(Para))
复制代码 可以看到这个函数接着调用了Preventsqlin和Checkxss两个函数举行字符过滤,从函数名称可以推测出Preventsqlin用来过滤SQL注入语句,Checkxss是用来过滤XSS的。
接下来使用“查找”功能,在906-924行找到Preventsqlin函数。
在908行,界说了一些在SQL注入中使用的字符(符号“|”是为了便于分割),对这些字符举行过滤。
第910行,将界说的SQL过滤字符,使用符号“|”分割后,赋值给了一个数组sqlArray。
第913-919行,对一些特殊字符,举行了HTML转义更换。
第920行,对内容举行字符更换,将内容中包罗的SQL注入字符更换为空。如许初看起来好像是安全的,但过细分析一下,假如用户将SQL注入字符拆分开,中央插入一个别的被过滤的字符,被更换后就可以实现绕过。以select为例,用户将select拆分成两部门,中央插入另一个被过滤的关键字set,形成字符串“selsetect”,根据以上规则,selandect里的set会被更换成空,更换后恰好就剩下了select,就实现了绕过。
正常情况下的使用代码:- /commentlist.asp?id=0 union select top 1 userid,groupid,loginname,password,now(),null,1 from aspcms_user
复制代码 网上流传的一种绕过更换规则的使用代码:- commentList.asp?id=0%20unmasterion%20semasterlect%20top%201%20UserID,GroupID,LoginName,Password,now%28%29,null,1%20%20frmasterom%20{prefix}user"
复制代码 可以看到,网上的使用代码是将3个SQL关键词都加入了“master”,做了绕过处置惩罚,然而我们过细查察源代码里的过滤字符,会发现关键词select会被更换,而union和from关键词并没有在更换列表里,因此可以只对select做防过滤处置惩罚,加入一个短的关键词“set”,使用代码可简化如下:- http://192.168.10.130/plug/comment/commentlist.asp?id=0 union selsetect top 1 userid,groupid,loginname,password,now(),null,1 from aspcms_user
复制代码 观察网上毛病使用资料里的SQL注入使用代码,表名使用的是{prefix}user,而非aspcms_user。ASPCMS默认的表前缀是Aspcms,但假如管理员改了,那么用默认的前缀aspcms_user就访问不到了。对于{prefix}user,ASPCMS在步伐代码里会把{prefix}分析为相应的前缀,如许纵然管理员改了默认的表前缀,使用{prefix}user也可以大概访问到。
在欣赏器里访问以上URL,这次乐成的获取到了管理员用户的暗码(加密后)。
查到的管理员暗码是MD5加密的,通过暗码在线查询,得到明文暗码,即可登录背景。
免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金. |