sqli-labs通关-------01lesson 单引号(get方式注入)
- 判断是否有注入点
1.1.实例遇到问题前提解决
根据页面提示尝试 http://127.0.0.1:90/sqli-labs/Less-1/?id=1 id=2 …….发现每次页面都有不同数值,姑且判断其具有注入点。毕竟这块是找了个教程跟着走的。
https://blog.****.net/qq_41420747/article/details/81836327
https://blog.****.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根据以上操作来进行爆库名
通过以下操作我们看到库名就已经出来了
下面尝试爆表名
我们通过数据库操作解释一下这句话
我们看看msyql数据库里面都有啥
Security是我们实验用的数据库
information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。
我们进information_schema里面看看
Table_name字段存储了mysql的表名table_schema存放了数据库名称
group_concat 是用来连接的,so 表名称就是这样出来的。
既然表名都盘出来了 那几继续盘它的字段名吧;
我们用教程的例子会发现一大坨字段 因为我自己的本地数据库有很多表叫user所以里面也就会有很多字段,这样无法分辨。
我们在加上一个过滤条件
也就是这句 限定他的数据库
根据教程我们爆出两个值
?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 可以看看
但是我们也得自己吃吃肉啊,
我们就可以通过limit字段进行搞挨个字段了
到此有些人可能不太懂limit ,看看下面自己去悟吧