1 | sc Create SuperCMD binPath="cmd /K start" type=own type=interact |
1 | sc Create SuperCMD binPath="cmd /K start" type=own type=interact |
SQL Server 2005 中引入的 xp_cmdshell 选项是服务器配置选项,
使系统管理员能够控制是否可以在系统上执行 xp_cmdshell 扩展存储过程。
1 | -- To allow advanced options to be changed. |
1 | SELECT * FROM sys.configurations where name='xp_cmdshell' |
查看value的值, 1 为开启, 0 为关闭
1 | select sysusers.name, sysobjects.name, sysprotects.action from sysobjects, sysusers, sysprotects |
1 | deny execute on xp_dirtree to public |
挂钩一直是Hack 编程中永恒的主题,基本高级的Rootkit 程序多多少少都会使用Hook 技术。
似乎Hook 都被讲烂了,不论是Ring3 的还是Ring0 的网上都有例子。Ring0 的毋庸置疑当然
是全局的了,这里说说ring3 的全局hook。Ring 3 有Ring 3 的优势,稳定是压倒一切的,
因此Mcafee 和其他一些商业的安全软件都还是使用了Ring3 的Hook 技术,无论如何用户是
无法接受蓝屏和死机的。
感兴趣的可以装个Rootkit unhooker 自己看看。 :)
纵观网上流行的全局Hook 程序都只用了一个Windows API, SetWindowsHookEx,此函数原型:
1 | HHOOK SetWindowsHookEx( |
1 | idhook 安装的钩子类型,如 WH_GETMESSAGE,WH_KEYBOARD 等 |
使用这个这个API 时候有问题的,只能挂接系统中的所有G U I线程,换句通俗的话说就是有界面
的程序,Windows console 类的程序就无能为力了。
还有一种通过插入注册表来实现
1 | HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs |
这种方法简单,但是还是只能挂钩GUI 程序,并且这个键值已经被广大HIPS 所关注,吃力不讨好。
以上两种效果不好,因此有人有开始另外的做法,枚举所有进程,插入和挂钩 NtCreateProcess
这是非常自然的想法,似乎也把问题解决了,但是仔细思考一下,就会发现很多问题。
a. 时机不对,在NtCreateProcess函数被调用时进程并没有真正被创建,我们无法执行HOOK操作,
而当NtCreateProcess返回时,进程又已经开始运行
b. 如果是Windows console 创建的进程,你如何去监控这个调用呢?这么说似乎比较抽象,你可
以这么理解,直接在命令行下,cmd,cmd,cmd …. 你可以监控到最后一个cmd 吗,如果只
用SetWindowsHookEx
c. 是否正好站在了华容道,是否足够底层。
似乎很费劲
关于这方面内容,可以参考毛德操老师的两篇文章
《漫谈兼容内核之十七:再谈Windows的进程创建》
《漫谈兼容内核之二十二:Windows线程的调度和运行》
下面是他的blog 链接:
http://hi.baidu.com/fatbsd/blog
CreateProcess 是 Kernel32.dll 的导出函数。
操起WinDbg,剁了一下: Windows 2003 SP2
1 | lkd> uf CreateProcessW |
大概流程如下:
1 | Kernel32!CreateProcessW |
因为进程创建后,Windows 必须为它创建一个主线程,然后等待操作系统调度它。所以调用NtResumeThread的时候,就是我们Hook的最佳时机,因为此时创建进程的主要工作已经完成,但是进程并没有调度起来,呵呵,方便干坏事啊。
基本思路已经清晰了,这里还几个问题。
a. NtResumeThread 函数并不是创建进程才调用,我们怎么区分出哪个是创建进程时
调用的NtResumeThread呢?
其实现实起来不困难,先枚举系统进程一次,将系统进程中NtResumeThread 都挂钩上。每次拦截到
NTResumeThread 是判断NtResumeThread 的头几个字节是否已经被修改,如果没有则是创建新进程的调用。
b. 用什么方法Hook , IAT、Inline? 总的架构?
这种代码写起来还是Inline Hook 来的舒服,修改函数调用头几个字节。
枚举系统所有进程是不可避免的,因此要写个loader 将我们编写的DLL 插入系统所有进程。发现有进进程
创建时,将DLL 插入新进程。
下面代码演示,Hook NtQuerySystemInformation,因为篇幅等原因只有整体框架和关键代码。
Hook 也不是不是我们这次的主要内容,感兴趣的可以参考
http://www.xfocus.net/articles/200403/681.html
c. 在多线程的环境下是否可靠?
使用关键代码段,互斥锁,效果还可以。
Loader:
1 | void inject(HANDLE hProcess){ |
Hook.dll: 关键代码
1 |
|
Microsoft MSDN,SDK & DDK
《Windows NT 2000 Native API Reference》
《Windows 核心编程》
《挂钩Windows API》
《如何在Windows NT中隐藏自己》
小技巧。但是用的人好像不多。例子: Windows 2000 下
1 | NtQuerySystemInformationNo = 0x97; |
联想 IBM THINKPAD T60装windows 2003/2008红外线设备驱动解决
Intel(R) 82801GBM (ICH7-M) LPC Interface Controller - 27B9(ACPI\IBM0071\4&61F3B4B&0)是Intel的红外线设备连接。
win2003/2008等服务器版本没有自带这个驱动。IBM T60等机器可以在主板里设置关闭INTERFACE,或者下载XP的红外线补丁(IBM Thinkpad Fast Infrared Port)就可以解决
相关链接:
http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&lndocid=MIGR-4KUR6S
http://www.versiontracker.com/dyn/moreinfo/win/36353
http://www.soft32.com/download_181790.html
http://forum.thinkpads.com/viewtopic.php?t=22787&sid=3a24f025ddb4d19d3e2d00e122c84957
具体解决办法:
第一方法:BIOS设置:
Config(设置)选项—Infrared(红外线接口)选项,设为禁用(Disable)
Config(设置)选项—Infrared Device(红外线设备)选项,设为禁用(Hidden)
第二方法:下载红外补丁后按下列方法安装:
1、解压压缩包,并执行instirda.bat,然后重新启动计算机;
2、插入USB红外线设备(笔记本自带红外的看第3步);
3、察看设备管理器,会发现网络适配器处多出一项带叹号的USB Device的项目;
4、选择此项目,更新驱动(可用WinXP下的驱动程序);
5、运行reg\Infrared,导入注册表;
6、设备管理器中找到那个设备,更新驱动——不要搜索,我要自己选择安装的驱动——IBM thinkpad fast infrared port,然后下一步;
7、提示所需文件——找到sys里面的nscirda;
8、成功。
已知问题:
1、安装过程中可能,系统提示个别文件无法找到,请手动定位到前面已解压的SYS文件夹处,确认继续。
2、使用红外设备后,提示缺文件也是要定位到SYS文件夹进行安装。
3、要是提示不能识别,可以重新更新驱动
Windows server 2003(企业版)红外通讯支持程序(Fro 2003 红外驱动) 下载地址:
http://www.irxon.com/download/ir2003.zip
http://www.divshare.com/download/4167497-cb3
说明:Windows server 2003 (企业版)是一款面向企业用户的高端服务器操作系统,为了安全起见,它没有集成支持IrDA红外通讯的协议软件,所以目前所有的IrDA红外设备都不能在这个操作系统里使用。但是我们可以利用XP系统里的IrDA红外通讯协议软件来解决这个问题,安装时使用红外适配器在XP系统里的驱动程序,缺协议软件就到这个软件包里去找,安装完成后红外适配器就可以在Windows2003里正常工作了。
PS: T60 装了2003 后一个驱动老是找不到,最后终于找到了正确答案。。:) share it
简单实现文件防删除,说简单是因为没有用很底层的技术,例如文件驱动之类。我只用最简单的方法实现了, 使用 ring3 的API hook 技术。随着技术的发展这种技术已经过不了很多的主动防御技术了。主要是思路和方法和分析过程。(高手飘过)
ring3 下挂钩 API 基本上也就是修改导入表,和Inline hook 修改前5个字节这几种方法。挂钩Native API 没有什么区别,也就是多声明几个结构和变量类型。
关于挂钩API 请参见:www.xfocus.net/articles/200403/681.html
文件删除的ring3 API 是DeleteFile, 此API 存在于kernel32.dll 中,用OD分析一下。(哪个都可以,IDA更不用说)
DeleteFileA 的反汇编代码:
1 | 7C80D2FB >/$ 8BFF mov edi, edi |
可以得到一个流程 DeleteFileA –> DeleteFileW
DeleteFileW 的反汇编代码:
1 | 7C80EA51 > $ 8BFF mov edi, edi |
得到一个流程 DeleteFileA –> DeleteFileW –> ntdll.ZwSetInformationFile,因此我们只要挂钩了ZwSetInformationFile 就可以简单实现目标了。这里写出了新的 ZwSetInformationFile 函数。
1 | typedef LONG NTSTATUS; |
这只是一个证明性代码,要实战的兄弟自己动点手吧。
关于%5c的暴库利用想已经不是什么新技术了,原因我只找到含糊的说法:的UNICODE是%5c当提交时,IIS无法正常解析,导致暴库。但我对 http://www.hoky.org 测试成功后(现在已经补上)问过hoky.pro,得知%5c与IIS的设置是有关系的。而在默认设置下是可以暴库的。还有很多人说不成功,我要说的三点:
http://www.sometips.com%5c1.asp?id=1 不成功
http://www.sometips.com/other%5c1.asp?id=1 成功
好了,上面说的大家都知道,当是废话。在暴库这么好用的东西下,如果一个网站只有一级目录的话,难道就没有办法了吗?说到重点,其实一级目录我们也同样可以成功的,我们可以通过构造一个多级目录来达到暴库的目的。
http://www.target.com/noexists/..%5clist.asp?id=1
这样大家就会有新的惊喜了,呵呵。
补救方法也很简单,在conn.asp里 加入数据库文件的位置后面加上这句:
1 | On Error Resume Next |
就可以了。
今天在黑基又看到了关于%5c暴库的文章,这招真的很管用,大概10个网站里会有一个会暴库吧。
关于这个漏洞。绿盟有相关的资料:
http://www.nsfocus.net/index.php?act=magazine&do=view&mid=952
呵呵。虽然这个我们这个漏洞呵暴库关系不是很大, 但是明眼人还是看的出相关的地方,IIS 二次解码。大家知道在 url中 \
和 /
是一样的,也就是说 http://www.example.com/abc/123.asp?id=5 和 http://www.example.com/abc\123.asp?id=5 是一样的。
而 http://www.example.com/abc%5c123.asp?id=5 经过一次解码后变成 http://www.example.com/abc\123.asp?id=5 这里是不会出错的。
而经过 IIS 二次解码后就变成 http://www.example.com/abc%5c123.asp?id=5, 如果数据库连接文件用的相对路径的话。HOO, 找不到数据库文件,当然就出错了。还很老实呢,连物理路径都出来了。大家看。
1 | Microsoft JET Database Engine 错误 '80004005' |
这个是我暴 Oblog 暴出来的,这个月的黑防大家都有看吧。(早知道我也去投稿了,我发现的比他早多了,郁闷)
很多人都在分析成功的条件,就象itbbs里的人讨论的一样。(itbbs最近我怎么上不去啊,知道告诉我)
sykkk 认为:
其实还有一个必要条件他忘了,数据库要相对路径,绝对路径是暴不出来的。还有我补充一点应该是 IIS 4.0 或者 IIS 5.0 ,IIS 6 应该是不行了。
关于二级目录,我同意sykkk的看法,有的人说一定是二级目录,呵呵,我可以告诉大家那是错误的。应该是最靠近的asp文件的那个 “/“ 改成 “%5c”, 只有有调用数据库都有可能暴库。哈哈,还有当然对方要没有屏蔽错误信息,要不然你是肯定看不到的。
总结:%5c暴库成功条件
不一定要求是二级目录。三级也是可以的(我有成功过), 二级目录有时候反倒没成功。至于还有构造二级目录,我是没成功过,嘿嘿,应该是错误的。:)
随便也告诉大家,aspx %5c 也有文章的,运用也很巧妙,想知道就 google吧。^_^
最近sql inject 可是说是红遍了整个中国,不知道多少网站在sql inject 面前轰然倒下,其实 Sql inject 在国外技术已经很成熟了,而国内则是在近一两年内慢慢走向成熟。在一个个惨痛的实例面前,脚本工作者不得不重视起来,最好的例子就是动网了。然而今天脚本是不是就很安全的呢。请看我对几个安全站点的测试结果。结果是令人吃惊的, 影子鹰, 华夏, 黑客动画吧 都存在着这个站内搜索的漏洞。
请看一段常见的站内搜索写法。
例一:
1 | <form name="form4" method="post" action="search.asp"> |
上面的这段来自影子鹰安全网, 也许看了人说没什么的啊,我也是这么写的,这和sql inject 有什么关系啊。
其实问题就出在这, 搜索类别的值是从客户端获得的,而且没有过滤。那么聪明的你是否想到了什么?
我们可以构造一个url http://www.cnhacker.cn/search.asp?s1=1
得到的结果是:
页面返回正常,得到一大堆的搜索结果。
提交 http://www.cnhacker.cn/search.asp?s1=1 and 1=1
返回正常
提交 http://www.cnhacker.cn/search.asp?s1=1 and 1=2
没有搜索到任何相关文章 ,请重新搜索
哈哈,可以注入!像这些安全站点密码一定n变态,还是用nb跑跑吧。后面也证明了我的想法是正确的密码n变态,还好没手工猜。拿到了管理员的密码,就是找不到后台郁闷。
例二:
1 | <a href='Soft_Class.asp?ClassID=11'>安全扫描</a></li><br><li><a href='Soft_Class.asp?ClassID=12'>嗅探监听</a></li><br><li><a href='Soft_Class.asp?ClassID=13'>分析检测</a></li><br><li><a href='Soft_Class.asp?ClassID=14'>字典文档</a></li><br><li><a href='Soft_Class.asp?ClassID=15'>加密破解</a></li><br><li><a href='Soft_Class.asp?ClassID=16'>木马类</a></li><br><li><a href='Soft_Class.asp?ClassID=17'>QQ类</a></li><br><li><a href='Soft_Class.asp?ClassID=18'>综合工具</a></li> |
上面代码来自黑客动画吧,令人吃惊的直接就是classID=
根本就没有过滤。分析完上面的代码,和其他的一些代码综合起来, 我们又可以构造这样的url:
http://www.hack58.com/Soft_Search.asp?Field=SoftName&ClassID=8
结果返回也是一定堆的搜索结果。。。
提交 http://www.hack58.com/Soft_Search.asp?Field=SoftName&ClassID=8 and 1=1
返回正常
提交 http://www.hack58.com/Soft_Search.asp?Field=SoftName&ClassID=8 and 1=2
产生错误的可能原因:
HOO,漏洞又出来了!
例三:
来个大家都知道的华夏黑客联盟,前段时间还被黑了一次。还是看代码吧,听说华夏用的是动力的商业版。可以华夏今天又上不去,反正原理是相同的。我把我构造好的url 给大家看
http://www.77169.org/soft1/search.asp?ss_name=winrar&sor=01
接下来要怎么发挥就看你们的了。
总结:这个漏洞应该有一定的普遍性,黑窝里安全站点都有这个问题,更别说是其他站点了。或许有些大虾早就发现了,
小弟就在这献丑一下了,第一次写文章,有所差错在所难免,欢迎和我联系。