欢迎大家一起来Hacking水友攻防实验室学习,渗透测试,代码审计,免杀逆向,实战分享,靶场靶机,求关注
目录
007ics-06
008warmup
warmup第一种解法
warmup第二种解法
009NewsCenter
010NaNNaNNaNNaN-Batman
011web2
012PHP2
007ics-06
题目描述:云平台报表中心收集了设备管理基础服务的数据,但是数据被删除了,只有一处留下了入侵者的痕迹。
只有一处可以点击那就是“报表中心",发现id是注入点,用BP爆破之,发现最可能是id=2333,得到flag:cyberpeace{3521d1fba8ef203195b0dd118e5eac25}
008warmup
点进去发现这个表情!66666!
查看页面源码发现有一个source.php文件:
进入后发现代码如下:
<?php
highlight_file(__FILE__);//强调文件体,没什么用
class emmm
{
public static function checkFile(&$page)//定义一个检查文件的函数
{//定义一个白名单数组
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {//如果输入的变量page为空或者不是字符
echo "you can't see it"; //返回“你不能看到!”
return false;
}
if (in_array($page, $whitelist)) {
return true; //如果输入的page变量在白名单里面,返回真
}
$_page = mb_substr(//截取开头到第一个?的位置之间的字符,如果第三个参数为NULL就从开头截取到尾
$page,
0,
mb_strpos($page . '?', '?')//返回我们输入的page中问号所在的位置,如果没?就返回NULL
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])//如果file有值且为字符串
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];//包含这个file文件
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
发现包含四个if语句:
- 第一个 if 语句对变量进行检验,要求
$page
为字符串,否则返回 false - 第二个 if 语句判断
$page
是否存在于$whitelist
数组中,存在则返回 true - 第三个 if 语句,截取传进参数中首次出现
?
之前的部分,判断该部分是否存在于$whitelist
数组中,,存在则返回 true - 第四个 if 语句,先对构造的 payload 进行 url 解码,再截取传进参数中首次出现
?
之前的部分,并判断该部分是否存在于$whitelist
中,存在则返回 true
第一个条件必须满足,2.3.4满足一个即可返回 true,若均未满足,则返回 false
这个ffffllllaaaagggg暗示flag藏在4层目录里面,这一点我是真的想不到。。其中第二个条件无法满足,因为不输入?的话,会把整个file之后的语句视为page,更加满足白名单,所以能满足的只有3,4.先说说满足3怎么做
warmup第一种解法
warmup第二种解法
009NewsCenter
如题目环境报错,稍等片刻刷新即可……………………………………这题直接SQL注入……由于大家思路几乎完全一致可以推荐参考大佬博客:攻防世界 WEB NewsCenter - An_Emotional_Killer - 博客园
010NaNNaNNaNNaN-Batman
下载文件打开之后发现这是一个HTML乱码,处理乱码的思路——改后缀,改内容。是一个输入框,看来我们要先弄清楚这个文件的代码才行,审计代码可以看到最开始的下划线“_”是一个变量,其内容是一个函数的代码,而最后又是一个eval(_),也就是执行这个函数了,我们把eval改为alert,让程序弹框,得到了源码的非乱码形式:
不用根据这些个变量和document.write去算flag,拿到flag有两种方法:
1)满足正则,,,满足length==16,正则的话^为开始符号,$为结尾符号,拼接一下:be0f233ac7be98aa,输入就拿到flag了。
2)将下面这段拿到控制台执行一下即可:
var t=["fl","s_a","i","e}"];
var n=["a","_h0l","n"];
var r=["g{","e","_0"];
var i=["it'","_","n"];
var s=[t,n,r,i];
for(var o=0;o<13;++o){
document.write(s[o%4][0]);s[o%4].splice(0,1)
}
}
flag{it's_a_h0le_in_0ne}
011web2
题目描述只有“解密”2字。打开网页,从没见过这么直接的提示,我惊呆了:
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function encode($str){
$_o=strrev($str);//从题目我们不难看出,我们输入flag,然后把反转之后的flag赋值给$_o
// echo $_o;
for($_0=0;$_0<strlen($_o);$_0++){//然后开始加密,对flag每一个字符加密(逐字符加密)
$_c=substr($_o,$_0,1);//截取反转后的flag中的字符
$__=ord($_c)+1;//返回首个字符的ascii值
$_c=chr($__);//转化为字符
$_=$_.$_c; //不断加新字符到旧字符后
}
return str_rot13(strrev(base64_encode($_)));
}
highlight_file(__FILE__);
/*
逆向加密算法,解密$miwen就是flag
*/
?>
这就是一个普通的加密解密题目,但是第一次接触的我花了很长的时间……
一步一步来,先把密文rot13解码,密文ROT13解密之后的结果:n1myotdfprfrvdeyjhdnlzjyld2y5ijokdtn3ednlhzm0gzziftz2mjo4gjf ;
然后 反转:fjg4ojm2ztfizzg0mzhlnde3ntdkoji5y2dlyjzlndhjyedvrfrpfdtoym1n
然后base64解码得到:$last ="~88:36e1bg8438e41757d:29cgeb6e48c`GUDTO|;hbmg";然后用上我写的decode:
for($i=0;$i<strlen($last);$i++)
{
$_c=substr($last,$i,1);
echo $_c."<br>";
$_b = ord($_c)-1;
$_b = chr($_b);
echo $_b."<br>";
$xuu =$xuu.$_b;
}
echo $xuu;
返回}77925d0af7327d30646c918bfda5d37b_FTCSN{:galf 我们再次把这个字符串反转得到:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}
012PHP2
用御剑扫描发现后台有两个文件,一个是index.php,另一个是index.phps(小知识:phps后缀是专门提供开发者看的一个后缀名,学到了,赶紧加到自己的御剑字典里面,打开php.txt加入一行),,
逐个打开查看,发现只有index.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?
然后对admin2次url编码就可以:(也可以只对第一个字符a 进行2次url编码)
?id=%2561%2564%256d%2569%256e