写在前面
发现学习渗透和ctf对xss,ssrf,csrf,ssti都有挺高要求的,一直没怎么系统刷过题。今天学习学习,补补之前落下的债(* ̄3 ̄)╭
web351
扫描网站发现存在flag.php文件,通过分析和测试发现需要服务器本地访问,故使用传入127.0.0.1/flag.php
web352
payload:
web353
过滤代码:
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|127\.0\.|\。/i', $url)){
payload:
- 使用127.1代替127.0.0.1
- 将127.0.0.1转成十进制
- 十六进制(记得添加0x前缀)
- 二进制(但不知到为什么没有回显flag(;´д`)ゞ)
附:
- 正则表达式分析网站:Regulex
具体使用如下:
- 进制转换网站:IP地址进制转换
具体使用如下:
web354
过滤代码:
if($x['scheme']==='http'||$x['scheme']==='https'){
if(!preg_match('/localhost|1|0|。/i', $url)){
可以看到1也被过滤了
payload:
- 将域名解析的A记录指向127.0.0.1即可,下面用的域名sudo.cc已指向127.0.0.1。有条件的朋友可以更改自己域名的A记录
- 在vps上设置302跳转(但不知道为啥不回显flag)
文件设置如下:
访问http://truthahn.top/SSRF/302.php结果:
- 用预期解替换原字符串localhost(但不知道为啥还是不回显flag)
生成预期解代码如下:
with open('Expectedsolution.txt','w') as f:
for i in range(128,65537):
tmp=chr(i)
try:
res = tmp.encode('idna').decode('utf-8')
if("-") in res:
continue
f.write("U:{} A:{} ascii:{} ".format(tmp, res, i) + '\n')
print("U:{} A:{} ascii:{} ".format(tmp, res, i))
except:
pass
f.close()
替换字符a为£Á:
即loc£Álhost
web355
要求host长度小于5,用127.1即可
payload:
web356
要求host长度小于3,补知识点咯:linux里0解析为127.0.0.1,而windows里解析为0.0.0.0
payload:
web357
代码:
if($x['scheme']==='http'||$x['scheme']==='https'){
$ip = gethostbyname($x['host']);
echo '</br>'.$ip.'</br>';
if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
die('ip!');
}
echo file_get_contents($_POST['url']);
}
else{
die('scheme');
}
payload:
- 使用web354中的302重定向
- 羽神提供了一种方法:使用dns重绑定
食用 方法如下:
在网站http://ceye.io/注册账号,会自动分配一个域名给你:
在profile最下面的DNS Rebinding里添加127.0.0.1
然后payload为:url=http://r.你的域名/flag.php
注意要多试几次才会回显flag
web358
过滤代码:
if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){
echo file_get_contents($url);
}
正则逻辑如下:
考察的是parse_url地址解析问题,具体解释可以看yq1ng师傅推荐的17年blackhat峰会PDF。
自己测试了几下,觉得挺好玩的:
具体原理以后找点时间多研究研究。
payload:
web359
打开靶机显示一个登陆界面,随便输入用户名和密码,跳转到check.php。
发现post了两个参数:returl和u。参考了下大佬博客,原来注入点不是username,而是使用gopher工具在returl上做文章。
本题需要使用的工具:Gopherus
下载完code,在对应目录下输入sudo ./install.sh进行安装。安装完毕后:
根据题目提示选择 mysql,输入数据库用户名root,并输入要执行的传马sql语句。之后会returl对应的payload。注意,在3306/_后面的一串字符串需要再进行一次url编码才可以使用。
最终payload如下:
这样名称为truthahn.php的🐎就上传成功了。使用蚁剑连接,在根目录找到flag:
web360
题目提示为redis
和web359思路相似,exploit后面为redis:
将生成的 payload url编码一下,再用url作为参数post(不知道咋回事post完后显示404容器未生成,不过不影响shell.php的访问)。
默认生成的🐎名称为shell.php,浏览器访问shell.php并使用cmd作为参数执行命令即可。
吐槽: 感觉最近ctfshow的靶机生成速度越来越慢了,不知道是不是因为被DDos了(ToT)/~~~