本文最后更新于 2019年07月07日 1:23 可能会因为没有更新而失效。如已失效或需要修正,请留言!

web1

题目地址:http://39.100.83.188:8002

ISCC 2019部分writeup-ChaBug安全

ISCC 2019部分writeup-ChaBug安全

删掉cookie和code字段提示密码错误

burp爆破3位数字

ISCC 2019部分writeup-ChaBug安全

web2

题目地址: http://39.100.83.188:8001

要求满足

  1. username='w3lc0me_To_ISCC2019'

  2. 输入的vaule不在ascii码可见范围内

  3. intval($password) < 2333 && intval($password + 1) > 2333

考点在于弱类型和类型转换

查阅chr()相关函数

chr()自动mod256

那么构造我们的脚本生成payload

password就用进制绕过

2334的hex是0x91e

最后的payload

web3

http://39.100.83.188:8065/

title提示二次注入,注入点发生在注册的地方。

注册用户名为admin'#,然后修改密码,用修改后的密码登录admin账号即可拿到flag

重新写文章的用户名被注册了,我在这注册admin'#ISCC 2019部分writeup-ChaBug安全

修改密码为aISCC 2019部分writeup-ChaBug安全

登录admin用户ISCC 2019部分writeup-ChaBug安全

web4

http://39.100.83.188:8066/ 源代码

通读代码,要求

  1. 设置query

  2. action=auth

  3. $hashed_input要等于$hashed_key

发现$parsed_query = parse_str($query);存在变量覆盖

先说下parse_str为什么会产生变量覆盖,举例

如果你访问的是http://127.0.0.1/1.php?query=&a=b,那么会导致$a的值被覆盖为b,因为parse_str的作用就是解析字符串并且注册成变量,它在注册变量之前不会验证当前变量是否存在,所以会直接覆盖掉当前作用域中原有的变量。

那么再来看这道题就比较明朗,最关键的在于$hashed_input要等于$hashed_key,那么我们构造payload

hashed_key的值覆盖为字符串a加密的sha256,然后此时再传入key=a这样满足条件即输出flag{7he_rea1_f1@g_15_4ere}

web6

题目地址: http://39.100.83.188:8053/

查看源代码中出现接口,http://39.100.83.188:8053/static/js/common.js

发现一段疑似公钥加密方式的代码,先记住

提示只有admin可以看到信息,登录注册,抓包发现有header中多了

考点应该是jwt(Json Web Token攻击),加解密地址https://jwt.io

jwt解码后分为3个部分,由三个点(.)分隔

分别为:

解密下iscc19后面的那段

算法

payload

具体的攻击原理我贴一段百度的。

我们知道JWT的header部分中,有签名算法标识alg

而alg是用于签名算法的选择,最后保证用户的数据不被篡改。

但是在数据处理不正确的情况下,可能存在alg的恶意篡改

例如由于网站的不严谨,我们拿到了泄露的公钥pubkey

我们知道如果签名算法为RS256,那么会选择用私钥进行签名,用公钥进行解密验证

假设我们只拿到了公钥,且公钥模数极大,不可被分解,那么如何进行攻击呢?

没有私钥我们是几乎不可能在RS256的情况下篡改数据的,因为第三部分签名需要私钥,所以我们可以尝试将RS256改为HS256

此时即非对称密码变为对称加密

我们知道非对称密码存在公私钥问题

而对称加密只有一个key

此时如果以pubkey作为key对数据进行篡改,则会非常简单,而如果后端的验证也是根据header的alg选择算法,那么显然正中下怀。

首先我们要拿到公钥/pubkey/{md5(username+password)}也就是这个链接,对于我的用户名和密码都是chuyu,那么应该是这样的http://39.100.83.188:8053/pubkey/93a18e397fc3beb55420bf4656b18720

拿到

由于公钥有时可以被攻击者获取到,所以攻击者可以修改header中算法为HS256,然后使用RSA公钥对数据进行签名。 后端代码会使用RSA公钥+HS256算法进行签名验证。 即更改算法为HS256,此时即不存在公钥私钥问题,因为对称密码算法只有一个key 此时即我们可以任意访问的pubkey 故此我立刻写出了构造脚本

priv改为admin,输出

ps:jwt包应该这样安装pip2 install pyjwt

报错'The specified key is an asymmetric key or x509 certificate and'修改/usr/local/lib/python2.7/dist-packages/jwt/algorithms.py的151行prepare_key()为如下

然后输出eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiY2h1eXUiLCJwcml2IjoiYWRtaW4ifQ.Moa94NN1yEun6lmsEaQeaMGnUt0X_b_McQWhSSe7O_M,修改头为这个访问/list拿到admin的信息

ISCC 2019部分writeup-ChaBug安全

访问拿到flag

ISCC 2019部分writeup-ChaBug安全

隐藏的信息

8进制转十进制,然后base64解密。直接上解密脚本

V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K

解密后

Welcome

下载下来是无后缀文件,加zip后缀,解压出welcome.txt

看到这个我是一脸懵逼,经大佬提示明白为二进制 给出脚本

倒立屋

ISCC 2019部分writeup-ChaBug安全

IsCc_2019反转9102_cCsI提交

Keyes' secret

键盘密码 参考https://ctf-wiki.github.io/ctf-wiki/crypto/classical/others/#_23

解密脚本

解出来

FLAG{ISCC KEYBOARD CIPHER}

ps:我真的觉得加密好烦

Aesop's secret

给了一张gif图片 用ps打开 发现

ISCC 2019部分writeup-ChaBug安全

stegsolve file format

ISCC 2019部分writeup-ChaBug安全

aes加密 密匙是ISCC也就是图片中的

两次aes解密后flag{DugUpADiamondADeepDarkMine}

他们能在一起吗?

ISCC 2019部分writeup-ChaBug安全送分题 扫码得出base64UEFTUyU3QjBLX0lfTDBWM19ZMHUlMjElN0Q= 解密后PASS{0K_I_L0V3_Y0u!}

然后图片分离压缩包,解压密码是上面那个,解压后拿到flag

Reverse answer to everything

sha1 得到了一个神秘的二进制文件。寻找文件中的flag,解锁宇宙的秘密。 注意:将得到的flag变为ISCC{flag}形式提交。

拖到ida中,main函数f5。

ISCC 2019部分writeup-ChaBug安全

not_the_flag(v4)跟进

kdudpehsha1加密后就是flag,注意格式。

简单Python

给了个pyc文件,用uncompyle反编译下

最好使用Linux pip安装 pip install uncompyle

uncompyle6 pyc.pyc

自定义了加密方法encode

给出我的逆向解密脚本

ISCC 2019部分writeup-ChaBug安全脚本写的像屎,将就看,解密出来win和Linux的编码不一样,显示都不全,最后flag还得靠猜ISCC{simple_pyc}

Rev02

.net程序 放到dnspy中

ISCC 2019部分writeup-ChaBug安全
喜欢这篇文章的话就点一点喜欢吧!