[攻防世界]Web题目记录

前言

已经做了不少,但是估计都忘得差不多了,重新做一遍,用博客记录一下。

新手区

view_source

直接F12。

get_post

get一个a=1,post一个b=2。

robots

访问robots.txt文件,发现一个f1ag_1s_h3re.php,访问即可。

backup

备份文件叫index.php.bak

cookie

查看cookie,提示我们访问cookie.php,访问之后在响应头找到flag。

disabled_button

前端把按钮的disable属性去掉就可以按了。

weak auth

弱口令,admin+123456即可。

simple_php

php的弱类型比较,要求a和0弱比较相等且布尔值为真,传入一个0开头的字符串即可;要求b不是数还要大于1234,传一个开头大于1234的字符串即可,比如1235a。

xff_referer

xff伪造ip,referer伪造重定向原网站,改请求头即可。

webshell

最简单的webshell,先ls看目录,再cat读flag。

command_execution

命令拼接,管道符(|),前面命令的标准输出,后面命令标准输入。输入127.0.0.1|find / -name 'flag*',在所有目录中找匹配flag的文件,感觉第一个就是,cat这个文件即可。

simple_js

查看js源码,发现有一个十六进制字符串,解码之后得到一些数字,猜测是ascii吗,转成字符即可。

高手区

baby_web

提示我们去初始界面,也就是index.php,访问发现立刻重定向,burp抓包就好了。

ics-06

只有报表中心可以点,进来之后选时间也没什么用,url后面get一个id,爆破id,爆破到2333出现flag。(这个太难想了)

Training-WWW-robots

提示访问robots.txt,发现flag藏身处,访问即可。(这也叫高手区的题?)

PHP2

什么都没有,信息搜集访问index.phps发现源码:

然而这还没完,F12发现注释里还有一段:

看到页面源码里有urldecode函数,简单说明一下浏览器解码:浏览器在接收到url之后会先进行一次url解码,所以我们需要二次url编码来绕过。构造url:

http://111.200.241.244:57876/index.php?id=%2561%2564%256d%2569%256e

其中id后面的是admin五个字母进行二次url编码的结果(url编码是hex编码前面加个%),传入这个id之后,浏览器首先进行一次解码,得到id=%61%64%6d%69%6e,进行第一次比较,不相同,通过。之后进行第二次解码,得到id=admin,相同,通过,得到flag。

unserialize3

最简单的反序列化,序列化之后将个数1改成2绕过wakeup即可。

Web_php_unserialize

三件事:第一要绕过wakeup,第二要绕过正则匹配,第三要base64加密,都是相当经典的操作。绕过wakeup只需要把对象个数调大,这个正则是过滤O:4的,改成O:+4即可绕过,最后再base64加密,传参即可。(反序列化传参慎用Hackbar)

php rce

ThinkPHP V5.x的RCE漏洞,本题中复现了控制名未过滤导致的RCE漏洞。POC如下:

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami(此处接入命令)

whoami改成ls即可看目录,也可find和cat。

没有人可以把所有的漏洞都记下来,渗透不就是一个探索漏洞并寻找答案的过程嘛,要善于利用搜索引擎寻找poc和exp。

Web_php_include

一个文件包含,那个hello没什么用,主要是page变量,后台会不断扫描传入的值,去掉所有的php://,那我们就用data伪协议来传参,构造payload:

?page=data://text/plain,<?php eval(system("ls"));?>(?>可以不写)

成功回显,再同样方法读文件即可。

supersqli

BUU上也有这个题,随便注提示我们可能会有堆叠注入,因为可以随便注。

首先输入1',发现报语法错误,判断是单引号型注入点。

然后尝试输入1、2、3,发现输入3无回显,判断有两个字段。

查询所有数据库:

-1';show databases;#

看一看都有什么表,猜测本题数据库应该是supersqli:

-1';show tables from supersqli;#

或者直接查询当前数据库下所有表:

-1';show tables;#

这么臭的表不能要了(bushi),接下来看看表里的列:

-1';show columns from `1919810931114514`;#

巧了,有个列叫flag。再看看words表:

两列,id和data,根据我们常规查询的回显,可以确定默认查询的表是words,这里我们把表名改一下,把words换个名,把1919810931114514改成words,把flag改成id,这样不就ok了吗。构造语句:

1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`;alter table `words` change `flag` `id` varchar(100);#

改完名之后直接输入1' or 1=1#即可。

warmup

BUU上有同款题,位置挺靠前的。F12提示我们有source.php,访问后发现如下代码:

还有个hint.php,告诉我们flag在ffffllllaaaagggg目录,暂且留着,审一下代码。

我们的最终目的是要成功实现对ffffllllaaaagggg的包含,即想办法把ffffllllaaaagggg塞进file的值里,还要返回true。

我们不希望被读取的是source.php而是ffffllllaaaagggg,这里需要用到"/"符号,如果我们include "source.php/flag",这时source.php不会被成功读取,会读取flag文件。

其实利用这个,我们可以直接在第一次截取后返回true,不必去管后面的URL解码之类的。

传入payload:

?file=source.php?/ffffllllaaaagggg

即可实现不包含source.php而是ffffllllaaaagggg,但我们不知道这个文件在哪一层目录下,因此不断回退,最终:

?file=source.php%253f../../../../../ffffllllaaaagggg

成功读取flag。

NewsCenter

时间盲注,直接sqlmap即可。

NaNNaNNaNNaN-Batman

给了个文件,打开之后发现似乎是js文件,改html试试,出来是一个输入框,输什么都没反应。主要是这个代码一堆乱码,从网上得到教学,把最后的eval改成alert弹窗就能避免乱码,试一下果然,得到如下代码(借用dalao的图,源地址在图片右下角):

其实都不用输入了,直接把那堆字母拼一拼就出来了,如果要输入的话,这个正则也非常简单,直接拼凑就可以了。此题难点和重点就是改eval为alert解决乱码问题。

upload1

想上传php文件,告诉我们必须上传图片,但是这里的禁止上传全是前端操作,直接改代码都绕过去了,之后就一句话连蚁剑即可,没什么技术含量。

Web_python_template_injection

基础Flask模板注入。以下是各步骤payload:

判断是否存在注入点:

{{1+1}}

列出当前目录下文件:

''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir(".")

读取含flag文件:

''.__class__.__mro__[2].__subclasses__()[40]('fl4g').read()

成功读取flag。

posted @ 2022-04-28 17:13  Cr4zysong11  阅读(91)  评论(0)    收藏  举报