5up3rh3i'blog[提供有偿web代码安全审计服务]
百度空间 | 百度首页 
 
置顶
 
 
     
 
文章列表
 
2009-11-16 21:27
大家都在谈方向,其实就2字:

委琐(猥琐)
 
2009-11-04 22:37
web安全漏洞(bug)的利用

最近大牛们都在讨论类似的问题,基本围绕一个问题,漏洞(或bug)的利用要看具体的场景.主要分2个情况:

1.漏洞(或bug)在某些场景可以利用,在某些场景不可以利用
2.漏洞(或bug)在某些场景可以利用的价值更大

这里我也举几个例子说明这个问题

0x01 xss vs httponly

在pstzine0x01里在<利用httponly提升应用程序安全性>一文里介绍了httponly代码的安全效果,这个其实就和ms在windows系统上采取的那些措施一样,只是提高了利用的门槛.但是对于会一点点js编程的朋友来说,httponly根本没有太大的作用.

今天还有个朋友问我dom xss和其他的xss利用有什么不同,我的回答是"xss的本质是就是可以执行js/html,你的js/html水平有多牛,那么你的xss利用就有多牛" 抓做这个本质,你就可以写出你自己需要功能的playload.比如利用xmlhttp去执行http请求,得到返回数据,那么你根本就不需要另外得到cookie再通过第3方程序通过这个cookie取数据了...

现在在很多mailxss(如hotmail)的利用程序里有应用

0x02 xss vs cookie-domain

xss和cookie是分不开的,而大多的网站对具体的应用不同,cookie的domin也不样,比如google里的:mail与wwww域.但近来一些"黑客实用主义者"过分的强调了这个关系.很多人认为在www下的普通xss因为不可以跨到mail而认为它没什么太大作用,只可以alert()弹弹筐YY/SY一下,但是在某些场景里有着特殊而且重要的利用.还是那句话'取决于你的js/html等的水平'...

0x03 sql-injection vs password-hash

这里我们不谈论具体数据库权限和操作系统之间的一些利用.只谈论大多数情况下的select的注射.目前世面上的大多应用程序注射的exp基本都是得到用户名和密码hash,这个hash很多都是用的md5,虽然在目前在那些大型数据库保存md5hash里很容易查询出明文,也是看到这个原因,很多应用程序不再采用纯粹的md5的方式...所以根本很难破解或者查询...但是对于具体的应用程序的场景了,很多情况下是可以得到更大的利用的. 首先你要知道select的注射的本质是可以查询你当前权限下的所有数据.你理解了这个,对于很多具体的应用程序,都是可以直接执行代码的....

0x04 其他一些具体的场景下的应用

记得flyhat牛发现的dedecms的一个漏洞<DedeCMSV53任意变量覆盖漏洞>,当时这个漏洞要具体利用其他是比较麻烦的,我在看代码的时候发现dedecms的有个功能存在着潜在的问题:它默认把mysql出错的信息保存在
mysql_error_trace.php文件里

DedecmsV53-GBK-Final\upload\include\dedesql.class.php

function DisplayError($msg)
{
$errorTrackFile = dirname(__FILE__).'/../data/mysql_error_trace.php';
$emsg = '';
$emsg .= "<div><h3>DedeCMS Error Warning!</h3>\r\n";
$emsg .= "<div><a href='http://bbs.dedecms.com' target='_blank' style='color:red'>Technical Support: http://bbs.dedecms.com</a></div>";
$emsg .= "<div style='line-helght:160%;font-size:14px;color:green'>\r\n";
$emsg .= "<div style='color:blue'><br />Error page: <font color='red'>".$this->GetCurUrl()."</font></div>\r\n";
$emsg .= "<div>Error infos: {$msg}</div>\r\n";
$emsg .= "<br /></div></div>\r\n";

echo $emsg;

$savemsg = 'Page: '.$this->GetCurUrl()."\r\nError: ".$msg;
//保存MySql错误日志
$fp = @fopen($errorTrackFile, 'a');
@fwrite($fp, '<'.'?php'."\r\n/*\r\n{$savemsg}\r\n*/\r\n?".">\r\n");
@fclose($fp);
}

那么只要让mysql出错就可以得到shell了,利用flyhat发现的那个很容易让mysql出错.... [ps:利用数据库出错得到shell的这个漏洞,已经有人发现并且公布了]

这里只所以引用这个漏洞,只是觉得和大牛谈论那个进程崩溃于特定场景的利用有'异曲同工'的效果?

另外还有一个具体的列子:<关于最近ipb那2个注射漏洞>


小结:

1. 漏洞(bug)的利用离不开具体场景
2. 哪些场景让漏洞(bug)发挥最大的威力(具体场景具体分析)
3. 不管是系统还是应用,很多的道理其实都是一样的
 
2009-10-23 11:44
PCH这个项目一直都是围绕pstzine_0x03上那篇<高级PHP应用程序漏洞审核技术>文章展开的.PCH-007又是ryat给我们带来的一个新的'字典':spl_autoload()

从这个函数的功能我们可以看到php语言的强大,在这个函数出现之前都是应用程序自己实现的__autoload方法.php看到了这个应用的广泛,然后直接在php本身实现了这个函数,这个也是php许多功能函数诞生的过程....

另外从我多年来blog或者写文章的经验来看,看官多半只是看看文章本身就完了,很少去思考或者实践的....
其实这个文章给我们一个启示:还有没有其他的类似的函数呢? 这个也是pch项目本身的一个意义所在,通过php本身代码的分析,理解本质的问题,从而指导发现更加多的'字典'.... 如果你加入其中,或许你会发现更多 :)
 
2009-09-28 11:52
近来看<The.Web.Application.Hackers.Handbook>的中文版,然后里面所写的对于很多人来说,没什么新的
技术可以学习.但是里面有些细节理念还是很值得学习的,如P265里的提到的一个"错误观点":

[------引用开始------]
"我们不必担心低风险的xss漏洞;用户只能利用它攻击他们自己." 如上所述,在适当的情况下,即使是明显
低风险的漏洞,也会为更具破坏性的攻击打下基础,实施深层安全防御必须删除每一个已知的漏洞,无论它多
么无关紧要.在想出办法利用细微漏洞方面,渗透测试员应该始终假定攻击者比自己更富有想象力.
[------引用结束------]

"渗透测试员应该始终假定攻击者比自己更富有想象力",这个很经典,很多人都不太理解这个.........

且不说完全不懂安全的程序员或者管理者,就连那些职业的安全专家们也不理解.如近年来出现一个词语:
"黑客实用主义者" 他们bs那些'低风险'的漏洞或者攻击方式,认为那些都只是YY...

其实我想说他们认为的"实用"都是站在今天的位置或者说技术知识水平上的.中国有句老话:天外有天,人
外有人. 黑客外面有黑客...

[以上提到的请不要随便对号入坐,只是个人一点点观点]

update: http://bbs.pediy.com/showthread.php?t=98421 还是看雪的气氛比较好 呵呵.
 
2009-09-17 12:03
从上次的那次高潮后,oohay一直处于不应期状态,都差不多20天了....

在这段时间里,80vul成功换了主机....

 
2009-09-09 12:58


顺便来个公告:80vul最近换主机ing 所以访问不到 ......
 
2009-08-31 22:00

先看图:

记得以前我在blog上8挂过一回,看上面的图 '很黄很裸-体' 现在我们看看人家暴的方式很多啊....

有上baidu问吧,有在blog上的,有在pst的maillist上的,有直接偷偷给yahoo工作人员的,还有楼上到老外bbs上暴的......

改漏洞29号凌晨............

[哪个有新的,哪个就是嫌疑人,客官你是吗????]

 
2009-08-26 10:14
http://www.defcon.org/html/links/dc-archives/dc-17-archive.html
 
2009-08-25 19:22
漏洞公告详见:http://www.pcsec.org/archives/Invision-Power-Board-Blind-SQL-Injection-Vulnerability.html 很明显又是urldecode()导致的2次编码的问题.我怀疑发现者是直接grep urldecode来找到的...

比较奇怪的是,这次杂没见老外给出exp呢?另外一直都很热心的...于是有朋友让我exp一下,然后我又找别人...经过几天"你推我,我推他"的过程...终于又flyhat牛百忙之中,丢我一个'exp',然后我一跑,跑不出来.后来一问,才晓得flyhat牛忙完他的工作就到了凌晨1-2点了.于是写了基本筐架还没测试就丢我.只好自己看看修改一下了...

大概分析了下,原来漏洞的利用还不是那么简单的,里面还有很多xx,看来老外不给exp也是有道理的:

//ips_kernel\classDbMysqliClient.php
//ips_kernel\classDbMysqlClient.php

if ( ! IPS_DB_ALLOW_SUB_SELECTS )
{
# On the spot allowance?
if ( ! $this->allow_sub_select )
{
$_tmp = strtolower( $this->_removeAllQuotes($the_query) );

if ( preg_match( "#(?:/\*|\*/)#i", $_tmp ) )
{
$this->throwFatalError( "You are not allowed to use comments in your SQL query.\nAdd \ipsRegistry::DB()->allow_sub_select=1; before any query construct to allow them" );
return false;
}

if ( preg_match( "#[^_a-zA-Z]union[^_a-zA-Z]#s", $_tmp ) )
{
$this->throwFatalError( "UNION query joins are not allowed.\nAdd \ipsRegistry::DB()->allow_sub_select=1; before any query construct to allow them" );
return false;
}
else if ( preg_match_all( "#[^_a-zA-Z](select)[^_a-zA-Z]#s", $_tmp, $matches ) )
{
if ( count( $matches ) > 1 )
{
$this->throwFatalError( "SUB SELECT query joins are not allowed.\nAdd \ipsRegistry::DB()->allow_sub_select=1; before any query construct to allow them" );
return false;
}
}
}

ipb的query()里还有个'ids',不让使用/**/ 而且还判断了union 和select 根据ipb的那些错误提示,他们的意图很明显,不让'sub select', 而默认就设置了

ips_kernel\classDb.php
00053: define( 'IPS_DB_ALLOW_SUB_SELECTS', 0 );

第一个注射漏洞的sql语句比较复杂,又不让/*注释掉,所以基本上很难exp.第二个漏洞导致sql注射的语句比较简单:

/* Get validating info.. */
$validate = $this->DB->buildAndFetch( array( 'select' => '*', 'from' => 'validating', 'where' => "member_id={$in_user_id} and vid='{$in_validate_key}' and lost_pass=1" ) );

字符型的,我们用and '1'='1就可以闭和了.这个点本身就是一个blind inj的点所以基本也不上union,现在的难点就是 preg_match_all( "#[^_a-zA-Z](select)[^_a-zA-Z]#s", $_tmp, $matches )这个了不让select出现,就没有办法子查询其他数据库的东西,这里没时间去研究有什么办法可以突破select去跨表/库查询?[如果你有什么突破的记得告诉我一声]...

还有没有其他方法去实现有用的攻击呢?方法还是有点,这个查询本身就发生在validating表里,这个表里的vid本身就是找会密码功能产生的那个'key',只要我们得到这个key,就可以去修改其他用户[包括管理员]的密码了....

原以为这样exp很完美,但是继续分析发现问题又来了.默认设置再一次挽救了ipb,ipb取回密码有2个模式,一个随机修改后发送到用户的email[这个也是默认的方式],另外一个就是用户自定义密码提交直接修改[详细代码在lostpass.php的public function lostPasswordValidate()里].如果ipb使用了第二中取回密码的方式,那么我们就可以修改别人的密码达到攻击的目的了.....

exp的关键片段:

$sql="55512c93eda811273175c3e4262dec87' or If(ASCII(SUBSTRING((vid),".$j.",1))=".$i.",1=1,1=2) and '1'='1";
$packet ="GET ".$path."index.php?app=core&module=global&section=lostpass&do=sendform&uid=1&aid=".urlencode(urlencode($sql))." HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Connection: Close\r\n\r\n";

小结:

默认安全很重要!!!!

最后感谢flyhat牛的帮忙~~
 
2009-08-16 22:43
 
     
 
 
个人档案
 
hi_heige

上次登录:
6天前
加为好友
 
   
 
最新评论
 
文章评论|照片评论


精屁!
 

此话何解?
 

猥亵
 

发骚了
 

黑锅发光了
 
     
 
好友最新文章
 
     
 
最近访客
 
 

bnzm5270

hack2b

cn0214

4lert

hello3389

Adm1nd3x

leonhack

hiphoph4ck
     
 
订阅我的空间
 
已有人次访问本空间
 
订阅RSS  什么是RSS?

您也想拥有这样的空间?请点此申请。
     


©2009 Baidu