csaw2018也注册了个账号玩玩,但是到了当天晚上才记起来/(ㄒoㄒ)/~~。现在把几道web复现一下。

Ldap

原题链接:http://web.chal.csaw.io:8080/

刚进来就是一个搜索框。

一开始猜是sql注入,Fuzz过后发现"\"反斜杠和左右括号"(",")"都会导致搜索错误。

如上图,反斜杠是敏感输入可以理解,为什么左右括号会这样?看到这郁闷了很久。网上查了Ldap才知道,原来是Ldap注入。

Ldap注入

这里有一个很形象的比喻介绍了LDAP是什么 https://www.jianshu.com/p/7e4d99f6baaf 这里概括了一下LDAP注入 https://www.cnblogs.com/bendawang/p/5156562.html

从上面的资料我们可以看到,括号是Ldap的敏感输入,所以才会造成错误。

注入的话,肯定是将所有的信息提出来就可以看到flag了,一般LDAP查询的格式都为(&(parameter1=value1)(parameter2=value2)),前面一个&代表后面两个参数都得满足。

同样还可以再复杂一点(|((&(parameter1=value1)(parameter2=value2))(parameter3=value3))。

*是通配符,可以匹配所有。

所以多试几次括号的闭合,最后能得出

`*)(uid=*))(|(cn=*`

可以在最下面发现flag

SSO

题目引子
Don't you love undocumented APIs
Be the admin you were always meant to be
http://web.chal.csaw.io:9000
Update chal description at: 4:38 to include solve details
Aesthetic update for chal at Sun 7:25 AM

进入题目查看源代码。

我们可以看到是一个标准的oauth2认证。从源代码可以看到有一个/protected 页面,访问后显示 Missing header: Authorization 我们应该可以确认这的确是oauth2认证。不熟悉oauth2的可以去阮一峰Oauth2看看

走一遍oauth2认证流程

首先获取认证url

获取token

我们可以发现token的形式都为JWT(Json Web Token)(不了解的可以去查一下)那么把它在官网解析一下(https://jwt.io)

JWT格式为Header、PAYLOAD、VERIFY SIGNATURE。第一个Header 包含加密方式(alg)和类型(typ),第二个PAYLOAD包括用户信息和过期时间。第三个 VERIFY SIGNATURE 是前面两个以某种方式加密过的,服务器解密后能判断这个token是否被修改。

但是这道题很人性化,在PAYLOAD里已经给出了解密密钥,所以我们可以直接利用官网的这个工具改包。将user改为admin然后发包。

拿改好的token访问/protected页面就会返回flag了

未完待续。。。。