攻防世界

前言

由于要准备校赛这周就没有刷sqli靶场了,这篇文章主要写攻防世界中web的部分新手题和进阶题,等校赛环境开了就把校赛的wp写了,下周继续刷靶场。

command_execution

这题难度不是很高,但在web新手题里应该算是最难的了,这题要求我们运用到linux常用指令。不过在这之前,先简单说下提示中的waf,waf为web提供保护,可以有效防护sql注入等等手段,可以和防火墙结合起来一起理解。

接着我们再介绍linux的命令执行中的“&”和“|”的作用:

1
2
3
4
c1 && c2 先执行c1再执行c2
c1 & c2 先执行c2后执行c1
c1 || c2 c1执行失败后执行c2,反之不执行c2
c1 | c2 只执行c2

除了这些,我们还得了解linux基本指令。这题我们使用了ls指令和cat指令:

1
2
ls 查看目录文件
cat 读取文件

了解了这些,我们就可以解题了。我们直接查找当前目录下的文件:

就像这样,我们一级一级往上查找,找到根目录后进入home中,我们就可以发现flag就躺在里面,用cat指令打开查看就好了。


simple_js

按照道理来说,见面就要输密码的题,一般不太可能字典爆破的出来,再结合题目指向了js,那么我们就去查看网页的js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<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>

我们发现了一串/x……代码,这串代码的格式为十六进制码,我们把它转换为对应的ascii码值,得出的文本十进制再进行一次转换,得到密码为786OsErtk12,这就是flag内容。

isc-6

根据题目我们进入报表中心,发现了熟悉的get点,这里下意识先进行sql注入,但发现全部尝试都失败了,果断排除sql注入。再经历了御剑,抓包的洗礼也没发现有问题,审计源码也没有问题,种种可能性都被排除,那么我们只能把目光锁定在id值上了。

写一个最简单的脚本:

1
2
for m in range(10001):
print(m)

输出的数据放入burp suite中进行字典爆破,发现当id值为2333时,返回的长度不同,那么我们把2333get上去,flag就显示出来了。

总结

因为这周没做靶场,就拿这周练习的题目写了点wp,实际上做的题不止这些,不过有些因为过于简单,有些因为比较复杂,就都没有写出来,等实验室的比赛平台开了就去写比赛的wp。