发新话题
打印

[讨论]动网后台登陆的设想

[讨论]动网后台登陆的设想

议题提交:nowthk
信息来源:邪恶八进制信息安全团队

环境测试:Windows 2000 Pro,Dvbbs7.0 sp2
在玩了那么多动网论坛时,最郁闷的是取得了管理员后台的帐号和密码,因没有前台密码,而望而却步...如你申请一个普通的帐号,而且并有了后台的管理帐号,那么登陆后台时,我们最常看见,最熟悉不过的一句为:“您输入的用户名和密码不正确或者您不是系统管理员,请重新输入您的密码”,显然用户名和密码是正确的,登陆不上因为我们不是管理员。可他是怎么设定的呢?能不能突破呢?

先做个实验,2个帐号,管理员为admin密码admin888,普通用户为caicai密码123456。后台帐号admin密码admin888。

admin正常登陆前台,在进入后台admin_index.asp的登陆口提交时抓包,截获的部分cookies和代码为:
Cache-Control: no-cache
Cookie: 127.0.0.1/bbs/=username=admin&password=fVIz4l887ZvD956c&userclass=管理员&userid=1&userhidden=2&usercookies=0; GBWGWBQKEBFGOBDQSJWI=IIMUAFMUVTDYHWDCLDVSHCVNWVNCNHRICANHMFEZ; upNum=0
username=admin&password=admin888&verifycode=6402&submit=%B5%C7+%C2%BC

显然可以登陆到后台,下面我用普通用户caicai登陆(当然后台为管理员用户),后台截获的部分cookies和代码为:
Cache-Control: no-cache
Cookie: 127.0.0.1/bbs/=username=caicai&password=O263V7Hhc324ixcK&userclass=新手上路&userid=3&userhidden=&usercookies=0; GBWGWBQKEBFGOBDQSJWI=WRHBSMDGFMQZCFRMCSMRFRZQJSQNOPVOMYIPXQUF; upNum=0
username=admin&password=admin888&verifycode=7760&submit=%B5%C7+%C2%BC

应该提示"不是系统管理员",那他倒底是不是用cookies来验证是否管理员呢?如果你想说用cookies欺骗,这篇文章已经没有任何讨论效果。请继续往下看。

为了证明是否是cookis验证,我把后台提交的包都用admin提交后台抓的包,用caicai登陆,进入后台取得验证码然后修改verifycode值,用nc提交看看有什么反应,结果提示:
Location: showerr.asp?action=OtherErr&ErrCodes=
  • 请不要重复提交,如需重新登录
    请返回登录页面。返回后请刷新登录页面后重新输入正确的信息。

    好像有点不对..应该提示你不是管理员才对怎么可能有这种提示呢....再进行一次测试,我这次用admin登陆前台,包不变,到后台取得验证码再修改提交,晕,也出现了如上提示..

    先看看验证文件
    后台提交地址为:admin_index.asp?action=admin_login&reaction=chklogin,OK,打开admin_index.asp文件,
    if not dvbbs.master or session("flag")="" then
    call admin_login()
    此句管理session为空跳到 admin_login()

    sub admin_login()
    dvbbs.head()
    dvbbs.stats="论坛管理登录"
    if dvbbs.userid=0 then
    Response.Redirect "showerr.asp?action=OtherErr&ErrCodes=
  • 您不是系统管理员!"
    end if
    If request("reaction")="chklogin" then
    Call chklogin()
    Else
    Call admin_login_main()

    注:其中dvbbs.userid=0 是dv_users表中的UserIsAva,普通用户为0,管理员为空值,继续往下看chklogin()

    ub chklogin()
    username=trim(replace(request("username"),"'",""))
    password=md5(trim(replace(request("password"),"'","")),16)
    'Response.Write session("getcode")
    'Response.Write "
    "
    'Response.Write request("verifycode")
    'response.end
    if request("verifycode")="" then
    Response.Redirect "showerr.asp?action=OtherErr&ErrCodes=
  • 请返回输入确认码。返回后请刷新登录页面后重新输入正确的信息。"
    Exit Sub



    Exit Sub
    elseif session("getcode")="9999" then
    session("getcode")=""
    elseif session("getcode")="" then
    Response.Redirect "showerr.asp?action=OtherErr&ErrCodes=
  • 请不要重复提交,如需重新登录请返回登录页面。返回后请刷新登录页面后重新输入正确的信息。" (下面的代码不用看了)

    这里,提示的是验证码的session判断,如上测试,我都用的是一个admin后台包,也就说,包里保存了先前验证的session,怪不得说我总是提交重复........

    也就说,后台验证与cookies无关,只与验证码的session有关,如上面的
    GBWGWBQKEBFGOBDQSJWI=IIMUAFMUVTDYHWDCLDVSHCVNWVNCNHRICANHMFEZ;
    不过想想,如果此验证码可以欺骗的话....那只要有后台用户和密码,随便申请一个号,就可以欺骗了,session欺骗好像是传说不可能的事,不过这里的验证码session与我们所说的浏览器的session不知一样不一样,小弟不才,还请各位大哥指点,最好有方法破解,呵呵:)
  • \';update heart set love=\'nothing
    \' where name=yaner;--

    TOP

    楼上的方法是形不通的,动网后台的验证方式是前台验证+后台的双验证方式,还有就是要说的就是你对seesion的了解不够,验证码并不是seesion,你可以进看一下动网的代码,得到一个后台seesion的条件有三个,账号,密码,还有验证码,只有这三个同时满足的话,那么才会得到一个seesion,而且seesion是保存在服务端的,保存的默认时间是20分钟。
    此ID为马甲.多人使用.

    TOP

    to 楼上

    首先我没说验证码就是session,在代码中有一句session("getcode"),我怀疑此与session有关
    而且楼上说动网后台的验证方式是前台验证+后台的双验证方式的。我们先做个实验,我在本机上测试,但所有的测试都是在不关闭浏览器的前提下做的.
    dvbbs有2个管理员,一个是admin有所有管理权限,另一个管理员为test只能管理“用户管理”。其中admin密码admin888,test密码为123456,后台前台同一帐号密码一样,后台管理登陆ID不能互相使用.

    我先用admin登陆前台,再进后台,不关闭浏览器直接登陆到论坛根目录下面,点“重登陆”(在后台没有点退出,是为了保存admin的session)。这时退出后,用test登陆前台,直接点“管理”进入admin_index.asp,这时并没有让我输入密码,直接进了后台了,查看权限,可以对后台进行管理,不是说test用户只有“用户管理”吗?怎么这里对所有后台权限可有,可以确定我现在用的是admin的session,但用户是test...这似乎说明了后台验证并非是前台+后台...

    不过,这好像还不能证明什么。如果admin是一个session,test是一个session的话,不是说session默认保存是20分钟吗?那好,这次我先用admin登陆,截获此管理员admin的session:BODZOHQDMCZCPYYMHSHU=NXFSRHLEUAAPBKGPYXPOLEJPNQOJFNDWWBKXWMRN,进入后台,我点退出,然后退到前台再点退出,不关闭浏览器。然后再用test用户登陆抓包,查看session,晕还为BODZOHQDMCZCPYYMHSHU=NXFSRHLEUAAPBKGPYXPOLEJPNQOJFNDWWBKXWMRN,一模一样,最后总结,只要是在同一个浏览器中,打开同一域名如www.test.com,如果登陆什么用户,只要session保存在有效时间内,那用户的session都一样.但打开test.com,虽然访问的是一个页面,但session变了.

    上面测试可以说好像与用户中的session关系不大,但第一个测试中我用test直接进了后台,那原来我用浏览器退出来的时候,保存了session是错误的,但到底是保存了什么呢?所以我怀疑到了session("getcode"),难道与他有关吗?
    admin_logout.asp的代码为
    <%
        session("flag")=""
        response.redirect("index.asp")
    %>
    这样就退了后台管理,其中session("flag")是关键因素了.
    admin_index.asp中有一句
    if not dvbbs.master or session("flag")="" then
        call admin_login()
    可以得知验证的关键为是否为管理员还有session("flag"), 这样的话,管理员我们可以欺骗,反正他又没说要密码,那session("flag")呢。。。
    思路还有很多错误,请大家指证:)
    \';update heart set love=\'nothing
    \' where name=yaner;--

    TOP

    to 楼上的
    思路确实还有很多错误

    linzi说的对,他上次那个另类的旁注犯的错误和你这个很像。
    为什么实验环境要在没关闭浏览器的情况下?
    最简单的解释,只要浏览器没关闭,时间没超过session失效时间,那么,后台session就会保留。session就不会消失,前台是cookie(虽然与session相关)。你点重登陆,只不过是定向到了login.asp,进行检测用户名后,改变的不过是cookie里的东西。session没有改变(后台没有退出,所以flag值一类的依旧在,依旧有后台session)

    说了这么多,自己都糊涂了,说白了就几句话:
    1,验证码不好破解,虽然黑防有个家伙说验证码验证了谁,至少俺是搞不定。
    2,后台是session认证,要突破这点基本上不现实,虽然你有后台密码,可是,进入admin_index.asp的前提是
    if not dvbbs.master or session("flag")="" then
    session里的flag就不用想了,没登陆过后台是不会有这个值的.
    dvbbs.master 的来历暂时没有查,不过猜的没错的话,应该是要前台管理员登陆才可以有这个值
    要欺骗就得从这里下手,当然,每次抓包提交的时候可以自己修改cookie里验证码为当前数值.这个你可以手工刷新admin-index.asp看看上面的数字.编程实现就不方便了~
    个人论坛: http://www.xdxf.net

    TOP

    发新话题