淘宝刷网站建设,网页游戏前十名就选新壹玩,wordpress换成中文,海外精品网站建设1.在下使用火狐访问sqlilabs靶场并使用burpsuite代理火狐。左为sqlilabs第一关#xff0c;右为burpsuite。
2.输入?id1 and 11 与?id1 and 12试试 可以看出没有变化哈#xff0c;明显我们输入的语句被过滤了。在?id1后面尝试各种字符#xff0c;发现单引号 包…1.在下使用火狐访问sqlilabs靶场并使用burpsuite代理火狐。左为sqlilabs第一关右为burpsuite。
2.输入?id1 and 11 与?id1 and 12试试 可以看出没有变化哈明显我们输入的语句被过滤了。在?id1后面尝试各种字符发现单引号 包裹后可以绕过。 虽然注入成功了但是这两种结果还是一样的说明语句没有被执行并且这是字符型注入。报错提示我们说SQL语法错误哦原来是后端代码在注入点后还有个LIMIT 0,1意思就是从你表中的第0个数据开始只读取一个此处可以使用--或者%23来注释掉后面的LIMIT 0,1
--起着注释的作用将后面的语句注释掉 则代表空格 为什么要加一个而不是单纯的空格呢因为使用-- 后接一个单纯的空格在传输过程中空格会被忽略会导致无法注释所以在get请求传参注入时才会使用--的方式来闭合因为在SQL语句中会被解释成空格。空格的urlencode编码格式是%20所以使用--%20也不会报错。 同理#的urlencode编码格式是%23那为什么不能直接用#而必须要使用urlencode编码格式呢这个问题问的好在url解释执行的时候url中#号是用来指导浏览器动作的对服务器端无用所以我们要将#写成%23来完成注入。那为什么有些注入使用了#呢这个问题问的也很好说明小伙子你做事细心根骨清奇。在get请求时是不可以直接使用#的如果是post请求则可以直接使用#来进行闭合。常见的就是表单注入如我们在后台登录框中进行注入。为什么--后面必须要有空格而#后面就不需要哈哈哈哈这个问题问的有点刁钻果然阁下是人中龙凤马中赤兔不鸣则已一鸣惊人。且容在下细细道来。在使用--注释时后面有空格才能形成有效的SQL语句而#后面有没有空格是不做要求的简单来说就是#后面有没有无所谓。 成功注释了LIMIT 0,1之后阁下就可以大展身手了。接下来我们使用union联合注入。在注入前我们还需要使用order by来确定表中的列数为什么我们要确定表中字段的列数呢这就不得不说联合查询特点
1、要求多条查询语句的查询列数是一致的 2、要求多条查询语句的查询的每一列的类型和顺序最好一致 3、union关键字默认去重如果使用union all 可以包含重复项
?id1 order by 1-- 好那我们开始构造语句如上。
一直往1后面的数字尝试终于在4的时候发现了错误 回显说这是一个未知的列于是我们确定了字段数为3. 从这里我们使用burpsuite来注入因为后面的语句太长了而且也不习惯用浏览器的插件不过使用burpsuite注入跟url直接注入是并没有太大区别的。 抓取请求后右键发送到Repeater模块更容易操作。 注意看红框框的地方哈后面的图就不标啦单击放大查看图片单击图片外区域退出不用谢 骗你的那种确实比较费眼睛在下心疼giegie这种样式怎么样。 虽然图片有点失真不过您就知足吧。
?id1 union select 1,2,3-- 如上接下来使用联合查询看看有没有回显位。 咦发生甚么事了怎么没有动静。定睛一看原来是后端代码没有执行我们的语句有什么办法让它不执行前面的id1转来执行后面我们想要它执行的union select 1,2,3呢好办让id一个不存在的值就OK啦。一般都是使用负数或者较大的数这里0也可以但我们就按照习惯使用-1好了。 这个2和3是个是什么意思呢这是两个回显位啦。喂能不能讲清楚点好小子敢于挑战权威我欣赏你。返回的结果为2和3意味着我们可以在2和3的位置输入SQL语句。比如我们试一试查看当前数据库名以及数据库的版本名。
?id-1 union select 1,database(),version()-- 好我们知道了当前数据库名为security数据库的版本为5.5.24。知道了数据库名接下来我们尝试获取表名只是知道了当前数据库名怎么构造语句来获取表名呢嘿嘿小伙子你不用担心这个在MySQL中除了自己新建的几个数据库之外还有自带的四个数据库名字分别是
information_schema数据库
保存了MySQl服务所有数据库的信息。具体MySQL服务有多少个数据库各个数据库有哪些表各个表中的字段是什么数据类型各个表中有哪些索引各个数据库要什么权限才能访问。
mysql数据库
这个是mysql的核心数据库类似于sql server中的master表主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。
performance_schema数据库
主要用于收集数据库服务器性能参数提供进程等待的详细信息包括锁、互斥变量、文件信息保存历史的事件汇总信息为提供MySQL服务器性能做出详细的判断对于新增和删除监控事件点都非常容易并可以随意改变mysql服务器的监控周期
test数据库空的这里面啥都没有。另外我们还需要知道这些知识information_schema.tables:包含了数据库里所有的表table_schema:数据库名table_name:表名column_name:字段名好的了解了这些之后我们来试一试构造语句获取表名。
?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemasecurity-- 看到这里你是不是又要问了group_concat()是干嘛的老夫我早就准备好了group_concat()是MySQL中的一个函数。它将group by产生的同一个分组中的值连接起来返回一个字符串结果并且默认使用逗号分隔。可是group by又是个啥额一看你就没学过MySQL小伙子我这就帮不了你啦在工作或者学习中总有很多东西是我们不了解甚至闻所未闻的这很正常。没有人生而知之但是你既然遇到了你就得面对它。记住这样用就行了还是去了解甚至抽空学习它都取决于你自己非学无以广才非志无以成学。学到的知识都是有用的它总会在潜移默化中改变你。加油鲜衣怒马少年时不负韶华行且知。 成功啦它返回了四个表名这里我们只使用了2这个回显位。毫无疑问users表中的内容是我们需要的接下来我们尝试获取字段名。
?id-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_nameusers-- 从两段如此相似的代码中我们可以看出MySQL查询语句大体是相似的只需要改变其中的表名列名以及属性值。 OK从返回的结果来看我们获得了三个字段名分别是id,username以及password。有一点数据库基础的小伙子都知道id字段名下的字段一般都是普通的id对我们并没有实质的意义。而另外两个字段名username和password就不一样对我们这些练习注入的人来讲获取这两个字段中的数据无疑就是拿到了钥匙。闲话少说我们继续构造语句来获取其中的数据。
?id-1 union select 1,group_concat(username,password),3 from users-- 这一句语句是不是简单多啦偷着乐吧你。 诶看到这里你是不是感觉非常奇怪但是又说不上来。没错两个字段中的数据连接起来了group_conccat()函数只是用逗号将每一列分隔开了。这该如何是好呢不用担心函数是死的人是活的嘛。在字段名之间再加上某个字符的十六进制不就可以通过它将同一列的用户名和密码分隔开了嘛.
?id-1 union select 1,group_concat(username,0x2a,password),3 from users-- 到此就结束啦