1.baby_web
试了一下 无论输入什么都会跳转到 /i.php 所以应该是redirect了
抓包
之前在做ctfhub时也有一题重定向
于是用bp再抓一下
发现flag (其实直接用浏览器抓也有 , 眼瞎没看见。。。。。。。。。。
2.Training-WWW-Robots
可以看到 题目想让我们学习一下Robots exclusion standard 那我们就学呗
但我们好像得翻墙
所以 直接解题算了
随便访问一下robot.txt (好像做过一道robots题
翻译一下
对于所有User-agent 不能访问/flog.php
对于Yandex 啥都可以访问
那么 哈哈 我们只需要将User-agent伪造一下 不就ok了
但是
emmm。。。问题出在哪里呢。。
当我百思不得其姐的时候 我复制了一下/flog.php
再看时 气的一口老血喷出来 这(**)是/fl0g.php ********
血的教训:能复制 绝不手打!!!
3.Web_php_include
上来就给了一段源码
分析一下
先看一下show_source 好像并没有什么用
再看下strstr
反正就判断"php://" 在$page中存不存在
若存在就把"php://" 换掉 然后把 $page include一下
而且我们都知道:
在 PHP 中,预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值。
很不安全
可以下手了
emmmm。。。是不是要搞个一句话木马进去呢。。。
我觉得可以
还有没有更直接的方法。。。
参考了一下:
php://input是什么?
php://input 是个可以访问请求的原始数据的只读流。当请求方式是post,并且Content-Type不等于”multipart/form-data”时,可以使用php://input来获取原始请求的数据。
但是 会过滤掉"php://" 看网上说可以通过大小写绕过
试一下
4.NaNNaNNaNNaN-Batman
可以把源代码alert一下 发现源码 扔到控制台执行就ok了
5.NewsCenter
既然是搜索 那么这题应该是考察的sql输入问题
先随便试一下 发现输入1 ’ and 1 = 2 的时候 会报500 错误
一般是 where id = $GET(“id”)
用bp扫描一下果然发现猫腻 存在sql注入
用bp自带的sql注入语句 全部用了一边 结果如下:
用#可以注释掉 ’
发现只有order by 3 时有用
当用 order by 4# 时会报500错误
接下来试一下 union select 1,2,3
发现会返回 2,3
根据书上写的。。。2:3 意思为2 和 3 的位置可以输入MySQL语句
尝试再2的位置查询当前数据库名(使用database()函数)
神奇的东西出现了
得知了数据库库名后,接下来查询表名
直接查询所有表名
-1’ union select 1,column_type,column_name from information_schema.columns where table_name = ‘secret_table’ #
6.web2
题目描述:解密 。。。。
解密,解密,解密。。。。。。。。。。。。。
尽管一窍不通 还是得硬着头皮上
PHP strrev() 函数 : 反转函数
试着反过来解密
<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
function decode($miwen){
$str= str_rot13(strrev(base64_decode($miwen)));
for($a=0;$a<strlen($str);$a++){
$c = substr($str,$a,1);
$d = ord($c) -1;
$e = chr($d);
$f = $f.$e;
}
return strrev("$f");
}
echo decode($miwen);
写完后 感觉没什么问题 结果到最后死活不对。。。
最后发现顺序搞反了。。。
应该是从里到外解密
错误!!!
$str= str_rot13(strrev(base64_decode($miwen)));
正确!!!
$str = base64_decode(strrev(str_rot13($miwen)));
还总结出了个技巧 把难懂的字符替换成易懂的字符!!!
warmup
从html找到source.php的提示
进入source.php 发现需要满足一系列要求
mb_substr():
mb_strpos():
in_array:
分析一下
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
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'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
怎么才能绕过呢?