SSCTF2016总结writeup

crypt01

思路: 解密,python

源码:

解密步骤:

  • 根据plain = bytearray("asdfghjk123456")加密后得到out,来推测出key
  • 得到key以后,反向编写代码,通过flag得到plain

获取key,并解密,源码为:

主要问题:

  • plain为asdfghjk123456有14位,而out为24位。其实是没有补全,猜测了两位78
  • key为8位,是一一对应的加密,所以有16位,即可确定key。

misc100-pdf

思路: pdf隐写

搜索工具wbs43open,点击解密即可。有点坑。

hungry_game

思路: js代码修改调试,websocket原理。

  • 对于websocket相关问题,好方法就是下载js代码,本地调试修改

开始修改js:

  • 首先,在style中加上float:right;,将控制面板调到右边,方便看。
  • 修改登录,没必要每次输入用户名和密码。

第一关

直接修改js代码,跳关即可。

第二关

直接跳关,会被服务器kick。需要进行伐木9999次,这时需要先发砍树9999次的数据,再跳关:

第三关

这里判断了每次收集钻石的个数,不超过50,写个循环发送即可:

第三关

打BOSS: 这里猜一下,把attack对象,改成BOSS的位置即可:

打15下后,得到flag:

re1-apk

思路: android 反编译,动态调试。
先通过jeb反编译apk。然后动态调试apk和底层的so文件。这里记录下debug方法。

android debug方法:

  • 把ida目录下android_server传到android 目录中

  • adb转发调试端口:

  • 打开ddms(tools/monitor.bat),这样才能进行调试.

  • 设置ida:

  • 开始调试:

在so文件逻辑中,下断点,关键位置在最后判断处。没有对密码进行处理。直接下断点,即可得到flag。

问题:

  1. 不能使用Genymotion,只能使用自带模拟器。虽然启动慢,但大约1分钟,如果启动太慢,说明出了问题。
  2. 自带模拟器中,选择Nexus_5版本,resize一下屏幕大小。
  3. 使用arm系统镜像,才能运行androidserver。
  4. 选择API 16,才能运行androidserver。
  5. 调试之前,打开ddms,这样程序才不会闪退。
  6. 直接使用sdk中的AVD和SDK Manager即可,无需依赖其他IDE(如:eclipse,android studio)。

web02-xss

思路:AngularJS框架模板注入 ,xss

AngularJS框架具有其特殊的语法:

可以执行js脚本,绕过过滤,进而实现xss。

下载对应js,进行本地调试。网上有个payload,可以弹框:

然后,直接修改下payload,绕过过滤就行:

web04-python-SSTI

思路:flask 模板注入

  • 与xss模板注入类似,都是由特殊语法{{表达式}},{% 循环语句等 %}
  • 可以通过注入和python特性,可以执行任意代码。
  • 若使用system执行命令,无法得到回显。 python使用popen函数才会有回显。

参考文章:

payload:

获取绝对地址:

获取当前文件列表:

问题:

  • github上对名字有字数限制。 调整payload,对其进行直接处理,如上payload。
  • 环境无法执行命令,思考如何遍历文件? 使用 __file__全局变量,获取当前文件名即可。

测试payload:

  • 上述注入均可准确执行,运行ssctf_demo.py,即可测试。

测试Demo如下: