view_source
题目
X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。
解决方案
F12获取源代码,找到flag。
使右键禁用的原因:
document.oncontextmenu=new Function("return false") //禁止右键
document.onselectstart=new Function("return false") //禁止选中网页内容
robots
题目
X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。
解决方案
Robots协议: 网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。 告诉在服务器上什么文件是可以被查看的。
在网址后添加robots.txt:
访问文件f1ag_1s_h3re.php,获得flag。
backup
题目
X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!
解决方案
备份文件后缀.bak,在网址后添加index.php.bak即可得到文件,打开获得flag。
Cookie
题目
X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?
解决方案
Network→Doc→Headers→Cookies,找到 look-here = cookie.php。
访问php文件,在Headers找到flag。
disabled_button
题目
X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?
解决方案
删掉disabled获得flag(做过类似的题目)。
weak_auth
参考wp进行复现:
题目
小宁写了一个登陆验证页面,随手就设了一个密码。
解决方案
尝试登录,获得“please login as admin”的提示。
这里要用到弱密码字典爆破,第一次尝试这个东西……
首先输入admin进行发包,然后传入Intruder。
取消掉cookies.php和admin的关键字,只留下password关键字(第一次就尝试到修改cookies.php上面,一直没有爆破成功)。
然后在payload导入本地字典进行start attack,发现123456的长度与其他密码长度不同,尝试123456,获得flag。
simple_php
题目
小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。
解决方案
复制下题目。
<?php
show_source(__FILE__);
include("config.php");
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){
echo $flag1;
}
if(is_numeric($b)){
exit();
}
if($b>1234){
echo $flag2;
}
?>
https://www.php.net/manual/zh/language.operators.comparison.php
大概是涉及到了php语言比较运算符的特性,字符串与数字比较会将字符转化为0。随便将&a设置为一个字符,即可满足 $a==0 and $a
b的条件是b不是数字且大于12345,可以设置一串数字后加上字符,得到flag.
get_post
题目
X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
解决方案
通过GET提交变量:在网页后加?&a=1即可。
通过POST提交变量:通过搜索知道了Firefox插件Max Hackbar,下载后提交,获得flag。
xff_referer
题目
X老师告诉小宁其实xff和referer是可以伪造的。
解决方案
比较简单,通过burp抓包修改X-forwarded变量即可。
接着提示:
伪造referer即可获得flag。
webshell
题目
小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。
解决方案
参考官方wp进行复现。
一句话木马解读:php的代码要写在<?php ?>里面,服务器才能认出来这是php代码,然后才去解析;@符号的意思是不报错;eval()把字符串作为PHP代码执行。连起来意思是用post方法接收变量shell,把变量shell里面的字符串当做php代码来执行。
得到密码是shell,用post提交数据。
使用蚁剑链接:
获得flag。
command_execution
题目
小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
解决方案
参考官方wp进行复现(万恶的命令我歇菜了)。
有关命令执行的知识 :
command1 && command2 先执行 command1,如果为真,再执行command2
command1 | command2 只执行 command2
command1 & command2 先执行 command2 后执行 command1
command1 || command2 先执行 command1,如果为假,再执行 command2
命令执行漏洞(| || & && 称为 管道符)
ping本地(127.0.0.1)。
尝试用127.0.0.1带其他命令执行,例如查找文件flag.txt。
127.0.0.1 | find / -name "flag.txt"
找到flag文件后cat获取文件。
127.0.0.1 && cat /home/flag.txt
找到flag。
simple_js
题目
小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )
解决方案
原来题目就已经提示了没有正确密码了……太绕了。
先将原界面的JS代码copy一份下来。
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));
首先删掉一些没用的变量以及初始化。m没有用到,n = 0赋值返回undefind等,修正过后得到
function dechiffre() {
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
var tab2 = pass.split(',');
var i, n, p = "";
n = tab2.length;
for (i = 0; i < n; i++) {
p += String.fromCharCode(tab2[i]);
if (i == 5) break;
}
for (i = 0; i < n; i++) {
if (i > 5 && i < n - 1) p += String.fromCharCode(tab2[i]);
}
p += String.fromCharCode(tab2[17]);
return p;
}
发现传入的值实际上是用不到的,无论输入什么样的密码都会报错。该段代码实质为输出报错信息。
删除这段函数后,真正的密码在fromCharCode中,截取下来转译为数字,在通过Ascii码得到flag。
array = [55, 56, 54, 79, 115, 69, 114, 116, 107, 49, 50]
string = ""
for i in array:
char = chr(i)
string += char
print(string)