RSS

oracle top N

22 Comments | This entry was posted on May 24 2010

文章来源:http://huibin.javaeye.com/blog/419780

1.在ORACLE中实现SELECT TOP N
由于ORACLE不支持SELECT TOP语句,所以在ORACLE中经常是用ORDER BY跟ROWNUM的组合来实现SELECT TOP N的查询。

简单地说,实现方法如下所示:

SELECT 列名1...列名n FROM

(SELECT 列名1...列名n FROM 表名 ORDER BY 列名1...列名n)

WHERE ROWNUM < = N(抽出记录数)

ORDER BY ROWNUM ASC

下面举个例子简单说明一下。

顾客表customer(id,name)有如下数据:

ID NAME

01 first

02 Second

03 third

04 forth

05 fifth

06 sixth

07 seventh

08 eighth

09 ninth

10 tenth

11 last

则按NAME的字母顺抽出前三个顾客的SQL语句如下所示:

SELECT * FROM

(SELECT * FROM CUSTOMER ORDER BY NAME)

WHERE ROWNUM <= 3

ORDER BY ROWNUM ASC

输出结果为:

ID NAME

08 eighth

05 fifth

01 first
Read more »

IIS源码泄露及文件类型解析错误

85 Comments | This entry was posted on May 21 2010

文章来源:http://www.80sec.com/iis-cgifastcgi-security-hol.html

漏洞介绍:IIS是微软推出的一款webserver,使用较为广泛,在支持asp/asp.net的同时还可以较好的支持PHP等其他语言的运行。但是80sec发现在IIS的较高版本中存在一个比较严重的安全问题,在按照网络上提供的默认配置情况下可能导致服务器泄露服务器端脚本源码,也可能错误的将任何类型的文件以PHP的方式进行解析,使得恶意的攻击者可能攻陷支持PHP的IIS服务器,特别是虚拟主机用户可能受的影响较大。

漏洞分析:
IIS支持以CGI的方式运行PHP,但是此种模式下,IIS处理请求的时候可能导致一些同80sec提到的nginx安全漏洞一样的问题,任何用户可以远程将任何类型的文件以PHP的方式去解析,你可以通过查看Phpinfo中对php的支持方式,其中如果为CGI/FAST-CGI就可能存在这个问题。

黑盒访问

http://www.80sec.com/robots.txt/1.php

查看文件是否存在和返回的HTTP头就可以知道是否存在此漏洞。

同时,如果服务器支持了PHP,但应用中使用的是asp就可以通过如下方式来直接查看服务端asp源码

http://www.80sec.com/some.asp/1.php

漏洞厂商:http://www.microsoft.com

解决方案:

我们已经尝试联系官方,但是此前你可以通过以下的方式来减少损失

关闭cgi.fix_pathinfo为0

nginx文件类型错误解析漏洞

76 Comments | This entry was posted on May 21 2010

文章来源:http://www.80sec.com/nginx-securit.html

漏洞介绍:nginx是一款高性能的web服务器,使用非常广泛,其不仅经常被用作反向代理,也可以非常好的支持PHP的运行。80sec发现其中存在一个较为严重的安全问题,默认情况下可能导致服务器错误的将任何类型的文件以PHP的方式进行解析,这将导致严重的安全问题,使得恶意的攻击者可能攻陷支持php的nginx服务器。

漏洞分析:nginx默认以cgi的方式支持php的运行,譬如在配置文件当中可以以

1
2
3
4
5
6
7
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

的方式支持对php的解析,location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量 SCRIPT_FILENAME由nginx生成的$fastcgi_script_name决定,而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。而为了较好的支持PATH_INFO的提取,在PHP 的配置选项里存在cgi.fix_pathinfo选项,其目的是为了从SCRIPT_FILENAME里取出真正的脚本名。
那么假设存在一个http://www.80sec.com/80sec.jpg,我们以如下的方式去访问

http://www.80sec.com/80sec.jpg/80sec.php

将会得到一个URI

/80sec.jpg/80sec.php

经过location指令,该请求将会交给后端的fastcgi处理,nginx为其设置环境变量SCRIPT_FILENAME,内容为

/scripts/80sec.jpg/80sec.php

而在其他的webserver如lighttpd当中,我们发现其中的SCRIPT_FILENAME被正确的设置为

/scripts/80sec.jpg

所以不存在此问题。
后端的fastcgi在接受到该选项时,会根据fix_pathinfo配置决定是否对SCRIPT_FILENAME进行额外的处理,一般情况下如果不对fix_pathinfo进行设置将影响使用PATH_INFO进行路由选择的应用,所以该选项一般配置开启。Php通过该选项之后将查找其中真正的脚本文件名字,查找的方式也是查看文件是否存在,这个时候将分离出SCRIPT_FILENAME和PATH_INFO分别为

/scripts/80sec.jpg和80sec.php

最后,以/scripts/80sec.jpg作为此次请求需要执行的脚本,攻击者就可以实现让nginx以php来解析任何类型的文件了。

POC: 访问一个nginx来支持php的站点,在一个任何资源的文件如robots.txt后面加上/80sec.php,这个时候你可以看到如下的区别:

访问http://www.80sec.com/robots.txt

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:05:30 GMT
Content-Type: text/plain
Content-Length: 18
Last-Modified: Thu, 20 May 2010 06:26:34 GMT
Connection: keep-alive
Keep-Alive: timeout=20
Accept-Ranges: bytes

访问访问http://www.80sec.com/robots.txt/80sec.php

HTTP/1.1 200 OK
Server: nginx/0.6.32
Date: Thu, 20 May 2010 10:06:49 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=20
X-Powered-By: PHP/5.2.6

其中的Content-Type的变化说明了后端负责解析的变化,该站点就可能存在漏洞。

漏洞厂商:http://www.nginx.org

解决方案:

我们已经尝试联系官方,但是此前你可以通过以下的方式来减少损失

关闭cgi.fix_pathinfo为0

或者

1
2
3
if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}

mssql批量替换整个数据库

65 Comments | This entry was posted on May 16 2010
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
DECLARE @Str1 VARCHAR(8000)
SET @Str1='参数1'
DECLARE @Str2 VARCHAR(8000)
SET @Str2='参数2'
 
 
SET nocount ON
 
 
DECLARE @tableName nvarchar(100),@columnName nvarchar(100),@tbID INT,@iRow INT,@iResult INT
DECLARE @SQL nvarchar(500)
 
 
SET @iResult=0
DECLARE cur cursor FOR
SELECT name,id FROM sysobjects WHERE xtype='U'
 
 
OPEN cur
fetch NEXT FROM cur INTO @tableName,@tbID
 
 
while @@fetch_status=0
BEGIN
DECLARE cur1 cursor FOR
        --xtype in (231,167,239,175,99) 为char,varchar,nchar,nvarchar,ntext类型
        SELECT name FROM syscolumns WHERE xtype IN (231,167,239,175,99) AND id=@tbID
OPEN cur1
fetch NEXT FROM cur1 INTO @columnName
while @@fetch_status=0
BEGIN
      SET @SQL='update [' + @tableName + '] set ['+ @columnName +']= replace(cast(['+@columnName+'] as varchar(8000)),'''+@Str1+''','''+@Str2+''') where ['+@columnName+'] like ''%'+@Str1+'%''' 
      --update tablename set fieldA=replace(cast(fieldA as varchar(8000)) ,'aa','bb')这样的语句。
      EXEC sp_executesql @SQL     
      SET @iRow=@@rowcount
      SET @iResult=@iResult+@iRow
      IF @iRow>0
      BEGIN
print '表:'+@tableName+',列:'+@columnName+'被更新'+CONVERT(VARCHAR(10),@iRow)+'条记录;'
      END     
      fetch NEXT FROM cur1 INTO @columnName
 
 
 
END
close cur1
deallocate cur1
 
 
fetch NEXT FROM cur INTO @tableName,@tbID
END
print '数据库共有'+CONVERT(VARCHAR(10),@iResult)+'条记录被更新!!!'
 
 
close cur
deallocate cur
SET nocount off

一个正则表达式的看法

167 Comments | This entry was posted on May 15 2010

作者:st0p
转载请注明出处:http://www.st0p.org

下午和kindle聊天的时候,他让我看一个正则,问我知不知道其中?:的作用,以偶半瓶水的正则功力,不知道杂解释给他听了,单个一个还好理解,一起就不明白了,起码我是没用过..查了下资料,说说我的看法..

原正则的出现是为了实现apache上传目录无执行权限,不过大家知道在 windows下对于文件名是不区分大小写的,但在*unx下就不同了,其中st0p.php和st0p.Php是两个不同的文件,所以此正则(?i:.php)出现

1
2
3
4
5
6
<directory "/var/www/upload">
<filesmatch "(?i:.php)">
Order Allow,Deny
Deny from all
</filesmatch>
</directory>

kindle说是参考http://perldoc.perl.org/perlre.html#Extended-Patterns的内容进行写的,具体的内容大家自己看,我们说一下关于此表达式的部分..

我们找到?:相关的部分,其用法有两种(?:pattern)和(?imsx-imsx:pattern)
我们需要用的是后者,前者的话是没法区分大小写的.而后者的用法就是(?标志修饰符:格式)
其中原文中有一句话是Any letters between ? and : act as flags modifiers as with (?imsx-imsx).
这句话就说明了imsx-imsx的作用,标志修饰符
我们看一下刚才出现的正则(?i:.php)
?的作用是在默认的贪婪模式下尽可能多的匹配所搜索的字符串,当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,例如,对于字符串 "oooo",'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'。

Read more »

FUCK腾讯 为啥这样对我

25 Comments | This entry was posted on May 13 2010

郁闷,今天才知道,我杂的了。为啥我的BLOG地址会说不安全,FUCK!

MySQLi Dumper v.3.6 PRO And KeyGen

21 Comments | This entry was posted on May 12 2010

作者:st0p
转载请注明出处 http://www.st0p.org

听朋友说好用,找到了最新的专业版来用的。唉,偶用OD一载入就直接挂掉了,半夜无聊就搞了个注册机,和程序放在一起,运行一下就能注册了。
原程序和KEYGEN都需要.NET的支持。KEYGEN需要.net 2.0以上版本

MySQLi Dumper v.3.6 PRO And KeyGen 下载

WebCruiser - Web Vulnerability Scanner Enterprise Edition V2.1.0 注册版

70 Comments | This entry was posted on May 12 2010

WebCruiser - Web Vulnerability Scanner Enterprise Edition V2.1.0注册版

下载地址:http://sec4app.com/download/WebCruiserEnt.rar

注册信息:
st0p.org
9EF6-CC8C-F068-B1D6

havij 1.09 lite

77 Comments | This entry was posted on May 12 2010

功能上多了不少,速度也不错,不过碰到一个站的用havij 1.09不行,但用havij 1.08可以,不知为何,不过速度上感觉还是havij 1.09快

下载地址:http://redmove.persiangig.com/MyPrograms/Havij%201.09%20lite.exe

QQ微博种子

174 Comments | This entry was posted on May 11 2010

http://t.qq.com/invite/677b40f03ca4fb1d213f

http://t.qq.com/invite/f4091495238538168bad

http://t.qq.com/invite/4e3d5f941559d3189bfd

http://t.qq.com/invite/6483073f2510f4f5a793

http://t.qq.com/invite/ca6dcbbe7ae90dfb009f

http://t.qq.com/invite/628706b1930fef6815cb

http://t.qq.com/invite/8e840a0a2288bc2a8e19