先声明:该文系转载
声明:本文是国外一同行朋友给我的email中附带的,原作者是一个叫Dr_aMado写的.我连翻译带实践花了一个小时的时间,所以转帖请注明出处.
本教程主要介绍了如何利用javascript绕过一些简单的或者更高级一点的html表单限制及cookie/session验证.
简单的表单限制
1.绕过必填表项
你会经常碰到一些页面需要你填满所有的表项才能提交,但是我们完全可能绕过这些限制.如果你仔细看一下页面的源代码,然后找到关于表单提交的那部分代码,你会发现form标签中有一个onsubmit属性.当你看到这个属性的时候,我们就很有希望尝试一下绕过这些限制.大家都知道的,javascript可以控制页面中的所有元素,包括表单元素.因此,我们可以利用javascript修改、删除以及添加任意元素到我们浏览的每一个页面.
因此,我们就可以利用javascript清除表单中的ousubmit属性,这么我们就可以不受限制的成功提交表单了.
onsubmit 属性通常指向了一个函数,这个函数是用来检查提交form表单数据的正确格式的.(译者注:我这里以国内某免费邮箱申请页面为例):
function fCheck(){
if( !form.readed.checked )
{
alert(”您需要接受服务条款后才能注册!”);
form.readed.focus();
return false;
}
…
…
关于fcheck()函数的详细介绍不在本文的讨论范围之内,怎么编写还请大家自己去查相关资料.通过上面的代码大家可以看出来如果你有些表单项没有填写(比如一些单选了或者多选项等等)的话,表单是无法提交的.现在我们就要修改onsubmit属性,利用javascript让它直接返回true即可以采用下面两种方法:
document.forms[x].onsubmit=”return true;”;
or
document.form.onsubmit=”return true;”;
使用这两个 语句都可以使表单无限制的成功提交.但关键就在于我们如何执行上面javascript语句呢?其实我们可以直接把此语句输入到地址栏中,然后回车就可以执行了.语句如下:
javascript :document.form.onsubmit=”return true;”;
但是仅仅是上面的语句是不会成功的,因为上面语句返回的值会被直接写入到页面中,我们无法继续填写表单了.所以我们必需避免值被写入到页面中,方法就是利用alert()函数:
javascript :alert(document.form.onsubmit=”return true;”);
运行上面的语句会弹出一个对话框内容是”return true;”,而不会被写入到页面中了.现在你可以毫无限制的任意填写你的表单内容了.(译者注:以下测试是以某国内免费邮箱申请页面为例):
再没有解除限制前,如果密码你没有输入的话会弹出如下图的对话框:
500)this.width=500′>screen.width-461) window.open(’/UpLoadFiles/NewsPhoto/olsace21.gif’);” src=”http://www.77169.net/Article/UploadFiles/200501/20050128215418113.gif” onload=”function anonymous()
{
if(this.width>screen.width-460)this.width=screen.width-460
}” border=”0″ />
这个时候我们按照上述俄方法先查看其源代码,找到提交form表单的那句代码如下:
知道其name为form,下面我们在地址栏中输入如下语句:
javascript :alert(document.form.onsubmit=”return true;”);
然后回车,如下图:
500)this.width=500′>screen.width-461) window.open(’/UpLoadFiles/NewsPhoto/olsace22.gif’);” src=”http://www.77169.net/Article/UploadFiles/200501/20050128215419999.gif” width=”564″ onload=”function anonymous()
{
if(this.width>screen.width-460)this.width=screen.width-460
}” border=”0″ />
这个时候我们再重新注册以下,密码栏依然不输入,然后提交表单结果如下图:
500)this.width=500′>screen.width-461) window.open(’/UpLoadFiles/NewsPhoto/olsace23.gif’);” src=”http://www.77169.net/Article/UploadFiles/200501/20050128215420157.gif” width=”564″ onload=”function anonymous()
{
if(this.width>screen.width-460)this.width=screen.width-460
}” border=”0″ />
呵呵..是不是绕过去了…继续发挥看大家伙自己的了.
2. 更改表项内容
当你成功尝试更改了表单的onsubmit属性可以做你想做的什么事情后,我们可以想想我们到底受到了什么限制?当然,你现在可以修改表单的onsubmit属性了,那么同样的,我们可以利用此方法修改页面中的任意对象.就像下面这样:
javascript :alert(document.spamform.fieldname.value=”Dr_aMado was here!”);
or
javascript :alert(document.forms[x].fieldname.value=”Dr_aMado was here!”);
呵呵,很简单的三?你可以修改你认为可以修改的任何东西了..just do it!
SQL注入
1.利用表单优势
SQL注入大家都很熟悉了,我这次主要跟大家解释一下漏洞表单是否会被正确的处理.
取得数据库信息
一个经常用的取得系统信息的方法是通过故意在sql查询中引发错误从而从网站数据库中取得特定的信息(译者注:就是我们俗称的”爆”什么社么)引发错误的方式可以通过搜索表单,动态链接以及session cookies.大多数介绍sql注入的文章都是介绍如何利用动态链接和text boxes执行sql查询语句的.但是我认为,这些漏洞在其它类型中更常见(select boxes, hidden fields, checkboxes and radio buttons, and cookies!).
混和数据类型如果没有很好的编码很容易造成一个页面的崩溃.比如对”memberinfo.php?o_id=1″这样的链接,在其后添加一个双引号或者单引号,幸运的化你会得到一个包含部分sql查询语句的调试信息.当你得到了你需要的信息,你可以确定出下一步该如何去做.
更改表项的值
第一个应该考虑的表单就是用户资料页面.大多数用户资料页面都没有很好的过滤,比如select boxes表单项.一中利用此漏洞的方法就是在这个表单项的值域中插入一个sql查询语句.在IE的地址栏中如下输入:
javascript :alert(document.profileform.user_sex.value=”gay\’,user_pasword=\’HACKED\’ WHERE user_id=1#”);
我们假设服务端的查询语句像下面这样:
“UPDATE user_data SET user_password=’$user_password’,user_email=’$user_email’,user_sex=’$user_sex’ WHERE user_id=$user_id”;
那么插入我们的sql语句后的查询语句就如下所示:
“UPDATE user_data SET user_password=’mypassword’,user_email=’myemail’,user_sex=’gay’,user_password=’HACKED’ WHERE
user_id=1 #’ WHERE user_id=7382″;
“#”这个是sql的注释符.
2.绕过session cookies
绕过基本的session cookie验证
很多情况下会话处理都是采用的cookie.如果页面没有正确处理session cookie,一个攻击者可以利用此缺陷更改自己的用户身份为其它用户.
cookies保存在”window.documents.cookie”.使用javascript我们可以擦除,编辑,创建任意站点的cookies.这个要比一般的攻击方式复杂得多.这里我只简单的介绍一下”
查看cookies:
javascript :alert(unescape(documents.cookie));
修改cookies数据:
javascript :alert(window.c=functiona(n,v,nv){c=documents.cookie;c=c.substring(c.indexOf(n)+n.length,c.length);c=c.substring(1,(
(c.indexOf(”;”)>-1) ? c.indexOf(”;”) : c.length));nc=unescape(c).replace(v,nv);documents.cookie=n+”=”+escape(nc);return
unescape(documents.cookie);});alert(c(prompt(”cookie name:”,”"),prompt(”replace this value:”,”"),prompt(”with::”,”")));
假设你在_blank>www.ima13370h4×0r.net以”John Doe”身份登录,你获得的cookie如下:
SessionData=a:3:{s:11:”SessionUser”;s:5:”75959″;s:9:”SessionID”;i:70202768;s:9:”LastVisit”;i:1078367189;}
我们只关心”75959″这个值,因为它是user_id的值.很多时候,你会发现有的站点把一些关键数据(比如user_id)保存在cookie中,这是个很严重的漏洞,因为任何用户都可以修改他们的user_id值为其它用户比如管理员用户的user_id值.
.
一旦你声明了window.c函数后,修改cookie的值就变得容易得多.首先把s:5:”75959″修改为s:x:”ADMINID”,其中x是新值的长度.比如,你想把75959改为1,那么你必需把s:5:”75959″改成s:1:”1″.有的时候一些站点会使用带WHERE子句的sql查询语句保持用户登录状态这个时候你需要把75959该为类似”13 or 1=1″这样的值.
注意:
嵌入的javascript声明可以加到你的浏览器的收藏里,这样可以轻轻一点即可.声明你自己的函数用下面的形式:
“alert(window.newfunction = function (){…})”
]]>
分享到:
相关推荐
我们将探讨React如何通过组件化的方式简化用户界面的构建过程,并展示React与传统JavaScript编程的区别。 #### Webpack与React的重要性 Webpack是一个流行的模块打包器,对于React项目来说尤其重要。它可以帮助...
"Having Fun with XML Hacking"这个主题可能会探讨如何利用XML的特性和潜在漏洞来进行创新和非传统操作,同时也可能涉及安全方面的内容。 XML的基本结构包括元素、属性、文本内容、注释、处理指令等。元素是XML文档...
攀登JavaScript的高峰 欢迎贡献叉车和拉车要求 :winking_face_with_tongue: :books:多读书 完成度:100% 一点一滴: 翻译的文章 你肯定不会系列 系列教程 工具集合 读书记录
Custom coding examples use VBA, Windows Scripting Host, C, Java, JavaScript, Flash, and more, with coverage of standard library applications and the use of scanning tools to bypass common defensive ...
NOTE: version 3 of this library introduces breaking changes that are incompatible with previous versions. The notable change is that when reading memory, writing memory and pattern scanning you are ...
#### 三、LISP是黑客精神(LISP IS HACKING) **10. 使用loop命令进行循环(Looping with the loop Command)** - **介绍**:介绍如何使用Lisp提供的`loop`命令来实现循环逻辑。 - **核心知识点**: - `loop`命令...
Building Research Tools With Google For Dummies 2005.pdf Building Web Sites AIO Desk Reference For Dummies Jan 2007.pdf Building Your Business With Google For Dummies.pdf Building Self Confidence For ...
* Links in JavaScript, VisualBasicScript, etc... are not parsed at the moment and will be ignored. * Currently, the program only "reads" links in these most popular tags : - <BODY ... ...
# respond to DNS queries for this domain with 34.192.228.43 the first time# it is requested and then 192.168.1.1 every time after thatA.34.192.228.43.1time.192.168.1.1.forever.rebind.network# respond...
9.5.4 Optimizing CSS and JavaScript ...................................................362 9.5.5 Reducing the Number of HTTP Requests .......................................363 9.5.6 Plugin ...
:page_with_curl: manifesto.yaml 如果您想为清单做出贡献,请编辑manifesto.yaml并提出您的拉取请求。 需要记住的一些注意事项: 打字错误,英语更正-非常欢迎 补充项目符号-将需要更深入的审查。 我们想让它...