老司机奇淫渗透测试让网站给自己发管理员账号密码

2017-04-21 17,837

本文老司机奇淫渗透测试让网站给自己发管理员账号密码armyzer0团队原创投稿安全脉搏,作者老司机,安全脉搏SecPulse.Com独家发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。

团队 一枚 老司机的奇葩司机思路,发出来让大家看看 他到底有多老司机!

che1

对他老司机这一件事,我能怎么办,我也很绝望呀!

che01

我和大家一样看文章以前 都是一枚不明真相的吃瓜土狗

che2

但是现在呢,皮皮虾我们走!

che3

 

渗透范围

系统 XXXXX网
URL http://XXXXX/login.jsp

接到公司下发的授权渗透测试项目任务,我们的老司机同事把油门加满了。

基础信息收集

服务器环境

che4

关键信息

服务器环境 Linux ,csvserver, Apache Tomcat
程序语言 Jsp
关键端口 80,8010,8087,8899

关键信息

泄露关键字 xxxxxxxxxxxxx, xxxxx

 

系统功能枚举

系统后台(http://XXXXX/login.jsp)

che5

忘记密码(http://XXXXX/XXXX/XXXX.jsp)

che6

SQL注入漏洞

http://XXXXX/XXXX/XXXXX.jsp?prename=XXXX=1' or '1'='1
参数:mobile,prename,loginName
类型:boolean

 

由于自动化工具SQLmap不能识别注入点,且由于注入语句的限制,只能获取部分信息,

编写程序获取到mysql数据库的用户:

che7

账户信息收集

Google Search

关键词: xXXXg,xxxxw

che8

验证用户

通过尝试登录系统后台验证用户存在与否。

che9

admin账户不存在,尝试使用收集到的关键字进行猜测。

che10

xXXx这个用户是存在的,所以现在拿到了系统的用户名。

尝试爆破密码

信息收集

经过对服务器其他端口的信息收集,在80端口上运行的服务和8010端口上的服务是类似的,程序有可能是同一个公司开发的(xxx科技???),再次利用XXX尝试登陆系统,发现这个用户也是存在的。

分析登陆请求

通过客户端的js代码,发现登陆采用DES加密

che11

把加密算法放在前端,厂家我就想问你

che12

厂家:

che13

 

普通的登录请求都是明文直接登录,可以利用burpsuite很方便进行爆破,但是这里采用用户名和密码都加密的方法,让爆破工作难度增大了许多,要编写程序进行爆破可能又要花费很多时间。所以需要另寻他法。

che14

该系统还有一个安全问题,系统对登录的用户名和密码进行加密发送,目的很有可能是为了防止网络窃听攻击,采用DES加密本身是相对比较安全的,但是在分析加密过程发现系统把默认的加密key放在了客户端,还有在http流中明文传输key,所以攻击者完全可以窃取key对密文进行解密,得到明文账户密码信息。

(MDZZ)

寻找新爆破点

http://xxxxx//xxxxx/XXXXX.jsp

che15

在信息收集阶段,发现系统有一个隐藏了的功能,就是修改密码,这个修改密码的过程并没有采用加密的方式,所以可以通过修改密码验证旧密码的正确来进行爆破密码。(安全脉搏https://www.secpulse.com/archives/57606.html)

这里有一点要注意的是如果我们爆破到正确的密码时,系统正好也就修改了原来的密码,所以一定要先记录下修改后的密码是什么。

此外,如果为了不让管理员知道自己的密码被更改了,可以在爆破的过程中,直接把新的密码填写为我们的爆破值。

爆破工作

对上述爆破点进行爆破,尝试了6000多个常用弱密码,但是很遗憾,并没有一个是正确的密码,所以爆破工作结束,并不能如愿以偿。。。。

 

系统逻辑分析

通过前期的信息收集工作,发现系统在前台的功能很少,都是一些静态的内容,尝试在前台挖掘可能存在的安全漏洞,几个端口运行的web服务上,的确发现存在上传文件的功能,在“XXX”的系统功能上。(安全脉搏https://www.secpulse.com/archives/57606.html)

通过测试发现上传功能对上传的文件名进行了限制,并且系统的处理逻辑使得即使绕过了文件扩展名的限制,也没办法访问到上传的文件(访问上传的文件会提示文件不存在)。

che16

渗透项目到这里,简直江郎才尽,太特么尴尬了。。。。
再次回到我们的忘记密码功能上,来看看这个地方是否存在除了SQLinject之外的其他安全问题。

che17

思考:系统对忘记密码的逻辑是怎样的?

首先我们看不到源代码,所以这里只能对处理逻辑进行猜测,想办法让猜测的结果尽可能地接近系统的源码。

首先,当我们输入用户名和手机号码的时候,程序应该是获取数据库中用户名(xxxx)的数据,并比较用户的手机号码和我们输入的是不是相同,如果找不到,就提示输入的信息有误,假设找到对应的用户了,那么程序就会把密码发送到对应的手机上。

这个处理逻辑是没有问题的。我们要知道用户XXXX的密码,那么就得知道对应的号码(号码是:1XXXXX5,别问我怎么来的),并且能够拿到手机接收到的短信。这看起来很难,当然也确实挺难的。

 

che18che19

但是如果我们能控制系统把密码发送到 我们的手机 呢?

che20

系统在验证用户名和手机后是怎么给手机发信息的,安全的做法应该是拿到数据库中对应用户的手机号码,然后发送信息。

但是系统这样做了吗????

很显然是没有的,要不然我这个逼早就装不下去了。。。。。。

(MDZZ)

既然系统没有取数据库中的手机号码,那么就是从客户端的输入获取手机号码,也就是手机号码可被控制。

但是直接输入想要收短信的手机号码,会导致用户名和手机号码的验证不通过。

那么怎么才能通过验证又能把密码发送到我们的手机上呢?

che21

 

如果结合之前的SQL注入漏洞呢?

 

che22

为什么这样就可以达到想要的结果呢?看看系统的逻辑的伪代码。

usename=get(用户名);
phone=get(手机号码);
query_str=”select * from user_table where username=’”+username+”’ and phone=’+phone+”’”;
res=mysql_query(query_str);
if(res) send_pw_to_phone(phone,…);else return error;

 

che24

成功结合SQL注入 导致直接不用校验手机号 最后把密码发送到输入处的手机号(也就是我们的手机上)

che23

 

后台GetShell

用户密码:xxxx/xxxxxx6
http://xxxxx/xxxx/xxx/xxx?txxxxx=1492570302687

文件上传

che25

POST /XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=1.jspx&fileSize=0
POST http://XXXX/XXX/XXXX?ownerId=ff8080815b8319f0015b842ff87f00d0&ownerName=visitAttach&ownerClass=VisitContent&unzipAttach=undefined&filename=1.jsp&fileSize=0

che26

系统采用黑名单限制文件扩展名,可使用jspx绕过限制,apache默认解析jspx文件。

che27

che28

SHELL

http://xxxxxxx/bed58ce10310421cbc654ee45239e2d4.jspx密码:pxxxxxxxxx

che29

 

一张图总结和警示自己

 

che33

Now Game Over !!!

 

 che30

有感觉的安全脉搏小编很强,一看就是那种专业打码30的!

但是老司机说这不算,阅片无数 心中自然

che31

 

 本文老司机奇淫渗透测试让网站给自己发管理员账号密码armyzer0团队原创投稿安全脉搏,作者老司机,安全脉搏SecPulse.Com独家发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。

 

Tags:

评论  (8)
快来写下你的想法吧!

armyzer0

文章数:8 积分: 2

team.armyzer0.com “剑 之 所 指,心 之 所 向”

关注我们

合作伙伴