>+ URL编码与SQL注射

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
说到url编码,你或许会想起N年前的url编码漏洞。可惜我是“生不逢时”啊,我接触网络时,那个漏洞早就绝迹咯。

言归正传,URL 编码是什么东东呢?看看我从网上抄的定义:

引用: url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符, 将数据排行等等)作为URL的一部分或者分离地发给服务器。不管哪种情况, 在服务器端的表单输入格式样子象这样:

theName=Ichabod+Crane&gender=male&status=missing&headless=yes

URL编码遵循下列规则: 每对name/value由&符分开;每对来自表单的name/value由=符分开。如果用户没有输入值给这个name,那么这个name还是出现,只是无值。任何特殊的字符(就是那些不是简单的七位ASCII,如汉字)将以百分符%用十六进制编码,当然也包括象 =, &, 和 % 这些特殊的字符。


呵呵,明白了吧,其实url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“/”,它的ascii码是92,92的十六进制是5c,所以“/”的url编码就是%5c。那么汉字的url编码呢?很简单,看例子:“胡”的ascii码是-17670,十六进制是BAFA,url编码是“%BA%FA”。呵呵,知道怎么转换的了吧。

URL编码平时我们是用不到的,因为IE会自动将你输入到地址栏的非数字字母转换为url编码。所以对于浏览器来说http://blog.csdn.net/l%61ke2与http://blog.csdn.net/lake2是等效的(注意,第一个url我用%61替换了a)。呵呵,或许你已经想起了,有人提出数据库名字里带上“#”以防止被下载,因为IE遇到#就会忽略后面的字母。破解方法很简单——用url编码%23替换掉#。我本来企图利用url编码来躲过注射检查的,不过失败了,因为服务器端会将url编码转换成字符的。

等等,好像跑题了啊,呵呵,不好意思:)

现在SQL注射非常流行,所以就有人写了一些防注射的脚本。当然啦,思路不一样,效果大不同。各位看官请看下面的××SQL通用防注入asp版部分代码。

Fy_Url=Request.ServerVariables("QUERY_STRING")
Fy_a=split(Fy_Url,"&")
redim Fy_Cs(ubound(Fy_a))
On Error Resume Next
for Fy_x=0 to ubound(Fy_a)
Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),"=")-1)
Next
For Fy_x=0 to ubound(Fy_Cs)
If Fy_Cs(Fy_x)<>"" Then
If Instr(LCase(Request(Fy_Cs(Fy_x))),"and")<>0 then
Response.Write "出现错误!"
Response.End
End If
End If
Next


它的思路就是先获得提交的数据,以“&”为分界获得并处理name/value组,然后判断value里是否含有定义的关键字(这里为求简便,我只留下了“and”),有之,则为注射。

乍一看去,value被检查了,似乎没有问题。呵呵,是的,value不会有问题,可是,name呢?

它的name/value组值来自于Request.ServerVariables("QUERY_STRING"),呵呵,不好意思,这里出问题了。Request.ServerVariables("QUERY_STRING")是得到客户端提交的字符串,这里并不会自动转换url编码,哈哈,如果我们把name进行url编码再提交的话,呵呵,那就可以绕过检查了。比如参数是ph4nt0m=lake2 and lis0,此时程序能够检测到;如果提交%50h4nt0m=lake2 and lis0(对p进行url编码),程序就会去判断%50h4nt0m的值,而%50h4nt0m会被转换为ph4nt0m,所以%50h4nt0m值为空,于是就绕过了检测。

等等,为什么既然name不解码可以绕过检查而value就不能绕过呢?因为value的值取自Request(Fy_Cs(Fy_x)),这个服务器就会解码的。

程序怎么改进呢?只要能够得到客户端提交的数据是解码后的就可以了,把得到name的语句改为For Each SubmitName In Request.QueryString就可以了。
B站小迪安全笔记第十八天-SQL注入堆叠及waf绕过注入 B站小迪安全笔记 阅读详情

相关推荐

DVWA靶场SQL注入实战:从原理到手动注入防御

SQL注入是一种常见的Web安全漏洞,其核心原理在于应用程序未对用户输入进行充分验证和过滤,导致攻击者能够将恶意SQL代码注入到后端数据库查询中。这种漏洞的根源是混淆了代码数据的边界,使得用户输入的数据被当作SQL指令的一部分执行。从技术价值看,理解SQL注入不仅有助于发现系统薄弱环节,更是构建安全应用的基础。在应用场景上,无论是传统的LAMP架构还是现代Web应用,只要涉及数据库交互且防护不当,都可能面临此类风险。通过DVWA(Damn Vulnerable Web Application)这类**在线

congdi7904的博客 418

SQL注入新手误区

在学习渗透测试的时候,理论是一个方面,经验也很重要,有的时候,我们明明知道相关的理论,但是因为实操较少,因此不能很好的注入成功,失败的原因却往往是一些细微的小点。在这里,作为一名渗透测试的“老司机”,针对SQL注入问题,写一点自己的体会,主要是针对上述问题进行 ...

永远是少年 1009

URL编码SQL注射

说到url编码,你或许会想起N年前的url编码漏洞。可惜我是“生不逢时”啊,我接触网络时,那个漏洞早就绝迹咯。言归正传,URL 编码是什么东东呢?看看我从网上抄的定义:引用: url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符, 将数据排行等等)作为URL的一部分或者分离地发给服务

lake2的专栏 3732

关于URL上面的解码

1.一般url上面会拼接一些参数,但是为了保证这些参数不会乱码,而是用转码解码 2.写法:(转两次) 1.为什么要使用两次? encodeURIComponent(encodeURIComponent(data.productName)) decodeURIComponent(decodeURIComponent(query.productName)) 1.简单来说: Url是将中文编码成ASCII码后的URL; 2.而Url2是将ASCII码编码后的URL,由于用GBK、UTF-8、

qq_44439022的博客 589

通过url后面的参数进行sql注入

通过url后面的参数进行sql注入,也是攻击者经常使用 伎俩,主要是利用了程序员使用了root帐户连接数据库和动态拼接sql指令的弊端。 看下面的例子 如果程序使用以下的代码实现上面的功能,无疑给攻击者开放了大门。 连接数据库:conn.php <?php $mysqli = new mysqli('localhost','root','root','demo'); i...

李书明(石家庄)的专栏 9698

SQL注入--绕过技巧

参考自 基本绕过方法 大小写 双写 编码,如URLEncode编码,ASCII编码绕过 内敛注释 空格绕过 用注释替换空格 select/**/user,password/**/from /**/users; 空格url编码%20 两个空格代替一个空格 用Tab代替空格 %a0=空格 如果空格被过滤,括号没有被过滤,可以用括号绕过 select(user())from dual where(1=1)and(2=2) 引号绕过 使用十六进制 例如: select column_name fro

weixin_44940180的博客 5505

php将汉字转化为url,php汉字转url编码

js编码转换 40页 免费 URL编码函数(ASP源码) 2页 免费 将中文字转换成URL编码的... 2页 免费 php编码转换函数介绍 2页 免费 asp中有关字符编码......[原]URL 中文编码问题之小结 url 编码是一种浏览器用来打包表单输入的格式,一般常见于 浏览器地址栏目中。任何特殊的字符(就是那些不是简单的七位 ASCII,如汉字......URL编码SQL注射...

weixin_28983299的博客 792

URL编码

url编码是一种浏览器用来打包表单输入的格式。 编辑本段定义   url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符,将数据排行等等)作为URL的一部分或者分离地发给服务器。不管哪种情况,在服务器端的表单输入格式样子象这样: ...

weixin_30593443的博客 486

URL编码(传递特殊符号)

url编码是一种浏览器用来打包表单输入的格式,一般常见于浏览器地址栏目中。 目录 1定义 2编码规则 3URL编码表 4防止sql注入 5使用举例 ▪ 前言 ▪ 常见出错部分 ▪ 常见出错原因 ▪ servlet规范 1定义编辑 url编码是一种浏览器用来打包表单输入的格式。浏览器从表单...

Java让你与众不同 1405

【渗透测试】XSS编码及绕过原理

一、URL编码 url编码:一个百分号和该字符的ASCII编码所对应的2位十六进制数字。 例如:"/"的url编码位%2F URL 防止sql注入 URL编码平时是用不到的,因为IE会自动将输入到地址栏的非数字字母转换为url编码。曾有人提出数据库名字里带上“#”以防止被下载,因为IE遇到#就会忽略后面的字母。破解方法很简单——用url编码%23替换掉#。现在SQL注射非常流行,所以就有人写了一些防注射的脚本。 URL 编码对照表 URL 编码形式表示的 ASCII 字符(十六进制格式)。 十六进制格式用于

ssrf 2万+

关于name的注射非value

转lake2说到url编码,你或许会想起N年前的url编码漏洞。可惜我是“生不逢时”啊,我接触网络时,那个漏洞早就绝迹咯。言归正传,URL 编码是什么东东呢?看看我从网上抄的定义:引用: url编码是一种浏览器用来打包表单输入的格式。浏览器从表单中获取所有的name和其中的值 ,将它们以name/value参数编码(移去那些不能传送的字符, 将数据排行等等)作为URL的一部分或

768

几种基本的编码方式

1.base64编码:dGVzdDEyMw== ; 其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符,如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性 2.unicode编码: ...

xyx107的博客 8247

确保应用安全的10件事:#2编码数据

这是OWASP Top 10 Proactive Controls系列文章的第2部分,开发人员为确保应用程序安全可以做的10件事。 在上一篇文章中 ,我解释了为什么参数化数据库查询对于保护应用程序免受SQL注入 (最常见和最危险的攻击之一)如此重要。 SQL注入只是注入攻击的一种类型。 停止SQL注入很容易。 阻止其他类型的注入攻击(例如LDAP注入 , XML注入或XPath注入 , ...

danpu0978的博客 126

c#post数据编码_确保应用安全的10件事:#2编码数据

c#post数据编码 这是OWASP Top 10 Proactive Controls系列文章的第2部分,开发人员为确保应用程序安全可以做的10件事。 在上一篇文章中 ,我解释了为什么参数化数据库查询对于保护应用程序免受SQL注入 (最常见和最危险的攻击之一)如此重要。 SQL注入只是注入攻击的一种类型。 停止SQL注入很容易。 阻止其他类型的注入攻击(例如LDAP注入 , XML注入或...

danpu0978的博客 245

SQL概述及在中的应用

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 472

一种防注入代码的绕过学习总结

摘要:1.使用URL编码我们传递的数据,比如select可以编码为selec%74(即将t转换为url编码),这样就可以实现注入了! 2.使用cookies注入。...   前些阵子讯时系统爆出了很多洞,先看他的怎么写的,下面是从他的admin_conn.asp文件中找到的。   sss=LCase(request.servervariables(”QUERY_STRING”))  if...

201

web安全-SQL注入-认识安全狗-WAF绕过常用方法以及示例

特殊符号%00,部分 waf 遇到%00 截断,只能获取到前面的参数,无法获取到后面的有害参数输 入 , 从 而 导 致 Bypass。select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin。mysql 注释符有三种:#、/*...*/、-- ... (注意--后面有一个空格)// -- --+ # /**/ + :%00 /!Hex() bin() 等价于 ascii()

ranzi. 2363

SQL注入专题

首页技术频道51CTO旗下网站地图 社区:论坛博客下载读书更多 登录注册 对搜狐、网易和TOM三大门户网站的SQL注入漏洞检测 笔者对搜狐及TOM和网易这三大门户网站作了注入攻击检测,发现同样存在明显的注入漏洞,安全性很糟糕。首先,来看看搜狐网站,搜狐网站上的动态网页大部分是采用PHP语言编写的,同样注入也很多。例如...[了...

weixin_33994429的博客 194

%69d分析绕过防注入

枫叶防注入。看代码吧: Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx Fy_Cl = 2 '处理方式:1=提示信息,2=转向页面,3=先提示再转向 Fy_Zx = "../" '出错时转向的页面 On Error Resume Next Fy_Url=Request.ServerVariables("QUERY_STRING")

桦少's blog 620
上一篇: >+ ASP开发规范
下一篇: >+ smarty 模板 
xilo
博客等级 码龄22年 2粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值