通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 攻防教程 >> 文章正文
我是如何黑掉PacketStorm论坛的
责任编辑:酷酷の鱼   更新日期:2007-11-19
 

内容目录: 


-1.问题的范围
-2.SQL攻击的详细解释
-3.解决办法
-4.结论
-5.本文涉及的perl程序


------------------------------------------------------------------------


----[ 1. 问题的范围


    许多应用程序都可以通过SQL来进行攻击。现在许多程序知道了避免使用strcpy(),
并且不把用户数据传递给system()调用,但是很多程序还不知道SQL查询可以被黑客
篡改来达到攻击的目的。


    写一篇技术文章要比写个安全建议麻烦得多,但是技术文章能够全面地解释我是
如何利用wwwthreads程序的漏洞得到PacketStorm论坛管理员权限和将近800个用户密
码的。


----[ 2. SQL攻击的详细解释


    某日,我正在PacketStorm的论坛上浏览,发现这个论坛使用的是wwwthreads。
我突然注意到了URL的参数(URL中’?’后面的部分)。作为一个web安全爱好者,我
对它感到极为好奇。使用试验的攻击方法,我把showpost.pl程序中的’Board=general’
参数改为了’Board=rfp’。提交并发现传回来以下错误信息:


We cannot complete your request. The reason reported was:
Can’t execute query: 
SELECT B_Main,B_Last_Post
FROM rfp
WHERE B_Number=1
. Reason: Table ’WWWThreads.rfp’ doesn’t exist


    可以发现这儿还有一个参数’Number=1’,我们可以推断出查询请求是这样构造的:


SELECT B_Main,B_Last_Post FROM $Board WHERE B_Number=$Number


    如果你读过我在phrack 54上发表过的文章的话(可以到
http://www.wiretrip.net/rfp/p/doc.asp?id=7&iface=2阅读),你就应该明白我要
做什么了。我们不仅可以修改$Board和$Number参数,而且还可以提交额外的SQL命令。
试想一下,如果我们提交的$Board参数是下面的样子:


’general; DROP TABLE general; SELECT * FROM general ’


    那么在服务器端就会转化成:


SELECT B_Main,B_Last_Post FROM general; DROP TABLE general; 
                SELECT * FROM general WHERE B_Number=$Number


    ’;’符号是SQL命令的结束符。通常我们可以使用’#’来使MySQL忽略此行上的其它
内容。但是,’FROM’和’WHERE’是在一个分开的行上,所以MySQL不会忽略它。考虑到
错误的SQL语句会使MySQL忽略运行后面的语句,所以我们至少要提交一个有效的命令。
在本例中,我们提交一个和原始命令相似的generic select命令,理论上的结果应该
是删除general论坛所在的表。


    但是在实际上并没有成功,并不是因为理论是错误的,而是因为我们使用的数据
库用户没有DROP权限。并且根据wwwthreads编写的方法,它不完全允许你这么做。但
是一切并没有白费,我们可以修改其它的参数,看看哪里会出问题...而且我们可以到
www.wwwthreads.com去下载wwwthreads的源代码(免费版)。


    可以发现,免费版和正式版(PacketStorm上运行的是正式版)的代码稍微有些不
同,包括它们的SELECT声明。所以我们得有点创造性。我们先找到和前面有关的SELECT
声明。


    我喜欢使用less命令,所以我就’less showpost.pl’,并且寻找(用’/’)’SELECT’
字符串。发现了:


# Grab the main post number for this thread
$query = qq!
SELECT Main,Last_Post
FROM $Board
WHERE Number=$Number
!;


    Wow,就是它!除了几个参数的名字(Main,Last_Post,Number)和前面的(B_Main,
B_Last_Post,B_Number)不同。如果我们看看它的上面,我们会发现:


# Once and a while it people try to just put a number into the url,
if (!$Number) {
w3t::not_right("There was a problem looking up the Post...


    这就是对$Number参数的限制。


    基于这一点让我们来看看“为什么”我们要研究它。很显然我们有可能达到DROP表
这种DOS攻击,你还有可能修改其它人的发言,但那仍然不是我们要的。我们没准能建立
我们自己的论坛?所有的信息都储存在数据库里。但是有许多记录要去更新。成为一个
数据库操作员怎么样?或者更进一步,成为管理员怎么样?管理员可以增添、删除、修
改论坛、用户等。这是值得一试的,虽然你仍然将会被限制在论坛的领域里,那是一个
小的可怜的领域。


    但是,这仍然有一件事情值得为它一试。如果你注册为一个用户,你会发现你必须要
输入一个密码。Hmmm...这个密码储存在某个地方,好象是数据库里。考虑到许多人的密
码用在很多地方,而且wwwthreads(在某些配置上的错误?)把发言者的IP地址发到论坛
上。如果我们能得到某个人的密码,就可能去攻破他的主机。


    所以,让我们来看看密码是怎么存储的。进入到论坛的“编辑属性”页,有一个密码
域,通过HTML源码看,像是有一个可怕的加密密匙。妈的,这些密码是加密过的。这意味
着你需要一个密码破解软件和大量的时间去对密码进行解密。当然,这是假定你*能够*得
到密码...


    首先我们要去获得论坛管理员权限。adduser.pl程序是我们开始的好地方,因为它可
以让我们看到一个用户的全部参数。看看下面的代码:


# --------------------------------------
# Check to see if this is the first user
$query = qq!
SELECT Username
FROM Users
!;


$sth = $dbh -> prepare ($query) or die "Query syntax error: $DBI::errstr. 
        Query: $query";
$sth -> execute() or die "Can’t execute query: $query. Reason:
        $DBI::errstr";
my $Status = "";
my $Security = $config{’user_security’};
my $rows = $sth -> rows;
$sth -> finish;


# -------------------------------------------------------
# If this is the first user, then status is Administrator
# otherwise they are just get normal user status.
if (!$rows){
$Status = "Administrator";
$Security = 100;
} else {
$Status = "User";
}

 

[1] [2] [3] [4] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章提醒:“求职信”病毒1月6日发作
    普通文章两条“蠕虫”蠢蠢欲动
    普通文章5“网银大盗”狂盗储户14万 武汉男子被判10年
    普通文章“木马事件”终告结束 英语学习网重获新生
    普通文章搜索引擎不再喜欢新米,并非只是CN米
    普通文章蠕虫"威金"新变种 "小熊猫"屠宰多个计算机系统
    普通文章元旦上网谨防“Real蛀虫” 通过视频文件传播
    普通文章入侵工具Knark的分析及防范
    普通文章认清本质 计算机病毒防治常遇问题
    普通文章饶过现代Anti-Rookit工具的内核模块扫描(ZT)
    精彩专题