夜间模式暗黑模式
字体
阴影
滤镜
圆角
主题色
攻防世界WEB新手练习区题解

前言

终于把新手的12题做完了(蒟蒻菜狗QAQ

涉及到的知识不算很多

  • HTML基本知识
  • PHP、JavaScript基本语法
  • 基础的HTTP协议知识
  • Burp Suite关于Proxy的使用

0x9 webshell

题目描述:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。
这句话是

webshell是注入操作系统命令。显然index.php中使用了eval()函数,我们先来看一下这个函数的介绍。

  • eval(string $code)把字符串作为PHP代码执行。
  • eval() 返回 NULL,除非在执行的代码中 return 了一个值,函数返回传递给 return 的值。
  • 代码不能包含打开/关闭 PHP tags。比如, ‘echo “Hi!”;’ 不能这样传入: ‘<?php echo “Hi!”; ?>’。但仍然可以用合适的 PHP tag 来离开、重新进入 PHP 模式。比如 ‘echo “In PHP mode!”; ?>In HTML mode!<?php echo “Back in PHP mode!”;’。
  • 除此之外,传入的必须是有效的 PHP 代码。所有的语句必须以分号结尾。比如 ‘echo “Hi!”‘ 会导致一个 parse error,而 ‘echo “Hi!”;’ 则会正常运行。
  • return 语句会立即中止当前字符串的执行。

因此我们可以向该函数中传入一个system()函数来执行shell指令。
注意到evel函数中的参数是POST中名字为shell的值,因此我们需要使用Burp Suite的代理功能改一下HTTP请求的内容,将GET改为POST并加入名为shell的参数。



得到以下结果。

除了index.php外还有flag.txt,就是我们要找的东西。这时可以选择直接用URL打开或者继续使用shell指令 cat flag.txt打开。遂得到flag~

0xa command_execution

题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
我们可以在ping地址后加;来使系统执行ping指令和其后的指令。

当前目录下并没有我们想要的flag,于是直接在整个系统中搜索flag文件

注意此时的搜索小技巧。我们发现flag.txt在/home目录下,于是使用cat命令查看,得到flag。

其他问题:
1.笔者不知道为何使用cat index.php无法查看文件内容。请dalao指点。

2.查看系统信息的方法

0xb simple_js

题目描述:小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )

这道题我必须吐槽一下!考的是js代码能力,于是出题人丧心病狂地编了一个毫无用处的函数(手动微笑脸,仔仔细细研究了半天发现该函数和输入无关(wtcl。对代码中的字符串解码直接得到flag。imagination很重要。

下面是这段JS代码



<html>
<head>
    <title>JS</title>
    <script type="text/javascript">
    function dechiffre(pass_enc){
        var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
        var tab  = pass_enc.split(',');
                var tab2 = pass.split(',');var i,j,k,l=0,m,n,o,p = "";i = 0;j = tab.length;
                        k = j + (l) + (n=0);
                        n = tab2.length;
                        for(i = (o=0); i < (k = j = n); i++ ){o = tab[i-l];p += String.fromCharCode((o = tab2[i]));
                                if(i == 5)break;}
                        for(i = (o=0); i < (k = j = n); i++ ){
                        o = tab[i-l];
                                if(i > 5 && i < k-1)
                                        p += String.fromCharCode((o = tab2[i]));
                        }
        p += String.fromCharCode(tab2[17]);
        pass = p;return pass;
    }
    String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));

    h = window.prompt('Enter password');
    alert( dechiffre(h) );

</script>
</head>

</html>

答案就是这个字符串
"\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
我:???
先将该字符串以acsii码显示,得到如下内容
Array ["55", "56", "54", "79", "115", "69", "114", "116", "107", "49", "50"]
这好像还是acsii码啊。。。。继续解码,得到
"786OsErtk12"
即为flag。

var s="\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30";
var s_array=s.split(",");
console.log(s_array);
var p="";
for(var i=0;i<s_array.length;i++){
  p+=String.fromCharCode(s_array[i]);
}
console.log(p);
暂无评论

发送评论 编辑评论


				
上一篇
下一篇