sqli-labs通关-------01lesson 单引号(get方式注入)

  • 判断是否有注入点

1.1.实例遇到问题前提解决

根据页面提示尝试 http://127.0.0.1:90/sqli-labs/Less-1/?id=1 id=2 …….发现每次页面都有不同数值,姑且判断其具有注入点。毕竟这块是找了个教程跟着走的。

https://blog.csdn.net/qq_41420747/article/details/81836327

https://blog.csdn.net/qq_41420747/article/details/81773481

发现不能回显,打印出传入的sql语句发现把我的单引号转义了 导致sql语句执行错误。

所有用如下代码查看一下是不是开启了magic_quotes_gpc

//php 开起了特殊字符转义

                   if (get_magic_quotes_gpc())

                   {

                            echo '<br>magic_quotes_gpc 开启';

 

                   }else

                   {

                   echo '<br>magic_quotes_gpc 未开启';

                   }

判断开启 那就关掉好了 打开php.ini文件 变成off就行了

重启一下我们就发下终于报错了,隐隐觉得宽字节注入吃掉转义%27也可以,等到那个位置在看看

1.2.判断是否有注入点的方式:

   1.21.啥叫sql注入呢

自己去百度吧。我觉得就是程序写的不咋地,执行了用户输入的sql语句,还能以各种方式给返回报错信息,表内容等。

   ?id=1  and 1=1   一般这样页面正常出来就可以疑似有注入点 疑似啊!!!

   ?id=1 and 1=2  页面出错了

   ?后面一遍跟url的参数根据实际情况来看。

   为何上面判断注入点呢,还有很多别的方式,各自去找找吧。下面看个sql语句

   Select * from user where id = 1 and 1=1/2

  当1=1的时候语句完全正常成立 当1=2语句不成立所以页面会伴随有所变化。

  

1.3.sql隐式转换避坑

此处我觉得可以搞一波万能密码

https://www.cnblogs.com/rollenholt/p/5442825.html

https://www.jianshu.com/p/6f34e9708a80

1.4判断表中有几个字段

我们用order by 来判断

为啥要用order by?

因为order by 能够根据表中数据进行排序,有一种方式是根据字段序号(自己百度sql order by字段序号) 这样我们能猜测出表中有几个字段。

1.5 判断字段

 http://127.0.0.1:90/sqli-labs/Less-1/?id=1’ and 1=2 union select 1,2,3 --+

使用引号闭合 通过Union select 判断字段 及 爆数据库名原理

为啥要使union前面出错呢?

我觉得就是就想看到一行,要不然就把select1,2,3不一定能显出来,为啥非要用 1,2,3呢因为123好看能好好到显错位置,截图中也有database()函数;

思考一下问题:

 --+: 一开始并没有搞懂--+是啥玩意,后来实验以几下搞懂了。

     --是sql语句的注释,那+优势啥玩意 解释一下 +通过url当做参数传递的时候会变成空格所以当只用—时因为缺少一个引号闭合的问题sql语句会报错

如下:

当我们使用--+的时候语句正常仔细看网页会发现—后面有个空格而上个那个没有

如果我们想传+怎么办,凡是需要传+的地方就用%2B

 

1.6根据以上操作来进行爆库名

通过以下操作我们看到库名就已经出来了

下面尝试爆表名

http://127.0.0.1:90/sqli-labs/Less-1/?id=1' and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

我们通过数据库操作解释一下这句话

我们看看msyql数据库里面都有啥

Security是我们实验用的数据库

information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

我们进information_schema里面看看

Table_name字段存储了mysql的表名table_schema存放了数据库名称

group_concat 是用来连接的,so 表名称就是这样出来的。

既然表名都盘出来了 那几继续盘它的字段名吧;

http://127.0.0.1:90/sqli-labs/Less-1/?id=1 'and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name= 'users'--+

我们用教程的例子会发现一大坨字段 因为我自己的本地数据库有很多表叫user所以里面也就会有很多字段,这样无法分辨。

我们在加上一个过滤条件

也就是这句 限定他的数据库

http://127.0.0.1:90/sqli-labs/Less-1/?id=1 'and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name= 'users' and table_schema='security'--+

 

根据教程我们爆出两个值

?id=1' and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)))--+

Extractvalue我们解释一波:

extractvalue()和updatexml()报错注入

Update失败了

http://www.moonsec.com/post-314.html 可以看看

 

但是我们也得自己吃吃肉啊,

http://127.0.0.1:90/sqli-labs/Less-1/?id=1' and 1=2 union select 1,username,password from%20users limit 1,1--+

我们就可以通过limit字段进行搞挨个字段了

到此有些人可能不太懂limit ,看看下面自己去悟吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章