合天实验室第四周(check your source code)

链接:http://www.hetianlab.com/expc.do?ce=da6240f9-e4bd-4020-94d8-55ee7afc988c

因为是web类型的题目,所以我们先在浏览器中打开这个链接。

 打开后,发现这是一个后台登陆界面。由于提示是检查源码,所以直接查看登陆界面的源代码。

 代码注释这里发现了一个叫做source.txt的文件。我们打开这个文件看看。

 1 <?php
 2 $flag = "XXXXXXXXXXXX";
 3 $secret = "xx";
 4 
 5 if(!isset($_ POST["username"]) || !isset($_ POST[" password"]){
 6 exit();
 7 }
 8 $username = $_ POST["username"];
 9 $password = $_ POST["password"]; 
10 if (!empty($_ COOKIE["check"])) {
11     if (urldecode($username) === "admin" && urldecode($password) != "admin") { 
12         if ($_ COOKIE["check"] === base64_ encode($secret) . urldecode($username . $password))){
13             echo "Login successful.
" ;
14             die ("The flag is ". $flag); .
15         else {
16             die ( "重新检查下你的cookie吧!");
17         }
18     else {
19         die ("你是不是管理员心里没点数吗?");
20     }
21 }
22 setcookie("ahash", base64_ encode($secret . urldecode(" admin" . " admin")), time() + (60 * 60 * 24 * 7));
23 ?>

解读一下这个代码(百度上面代码中出现的php函数,去理解这个代码意思)。

从上面代码中,我们知道,想要得到flag。必须满足3个条件。

  1. check这个cookie的值不能为空。
  2. username解码后的值必须是admin,并且password解码后的值不能为admin。
  3. check这个cookie的值必须等于secret经过base64编码后,拼接字符串adminadmin解码的值。

这个时候,我们打开bp,抓包。(账号尽量输入admin,密码输入admin以外的字符串就行,后期改包快)

从抓包的结果中,我们可以看见发送的cookie ahash的值为0DhhZG1pbmFkbWlu

并且没有cookie check的值。因此我们还需要去修改数据包。并且从源码中,我们知道admin和1经过url编码后的值就是username和password的值。

使用bp自带的解码功能后。我们知道,secret的值为88(在终端下,运行ehco 0DhhZG1pbmFkbWlu | base64 -d  也可解码)。

将admin进行url编码。

补充:url编码的格式是16进制,十六进制格式用于在浏览器和插件中显示非标准的字母和字符。

所以admin要用hex编码,用url直接编码,可能会没有结果。

编码结果是%61%64%6d%69%6e

1经过编码后

 编码结果是%31

 再将88经base64编码

 

 然后我们开始构造check,username,password。然后go

终于拿到flag。url编码和hex编码那里的,我卡住了,最后看了大佬解答,以及百度百科对url编码的解释,才走到了flag这一步。

上课的时候摸鱼,做题的时候,一脸懵逼。

网安小菜鸡
原文地址:https://www.cnblogs.com/jdr-gbl/p/12840802.html