专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »安全 » packetstorm:我是如何黑掉PacketStorm论坛的 »正文

packetstorm:我是如何黑掉PacketStorm论坛的

来源: 发布时间:星期六, 2009年9月12日 浏览:22次 评论:0
内容目录: 


-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&ace=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 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)区别如果我们看看它上面我们会发现:


# _disibledevent=>数据库里但是有许多记录要去更新成为
数据库操作员如何样?或者更进成为管理员如何样?管理员可以增添、删除、修
改论坛、用户等这是值得虽然你仍然将会被限制在论坛领域里那是
可怜领域


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


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


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


# --------------------------------------
# Check to see 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.
(!$rows){
$Status = "Administrator";
$Security = 100;
} {
$Status = "User";
}

 





  • 篇文章: 看紧你3306端口,次通过mysql检测

  • 篇文章: 建立你3389肉鸡(菜鸟篇)
  • 0

    相关文章

    读者评论

    发表评论

    • 昵称:
    • 内容: