大家好,我是老杨。
关于安全这块,经常有很多小友和我吐槽,说知识点又干又难。
其实是因为网络安全里,细分的点太多了。
Web渗透、漏洞发现与利用、安全运维、追踪溯源、情报收集、安全研究、防御加固、逆向分析等等。
这些随便拎一个出来,都能单独搞个工程师岗位招聘。
想要做一个合格的网络安全工程师,上面的那些技能经验是必不可少的,你还得同时接触大量的实战案例,形成自己的工作思路。
比如说,渗透测试,你一般从哪方面下手?应急响应先抓哪一块?
今天就针对网络安全里面的热门项,漏洞挖掘,给你分享四个有意思的真实案例,学学安全大神是怎么玩技术的。
今日文章阅读福利:《 web漏洞挖掘快速入门.pdf 》
178页干货,从前期的信息搜集到后渗透测试,涵盖完整的漏洞挖掘流程,是新手入门的理想指南。
私信老杨,发送暗号“漏洞挖掘”,即可获取该份pdf资源。
01 漏洞一:存储过程sql注入首先我先介绍一下近期挖到的第一个漏洞:sql server EXEC存储过程处 sql injection。
这是我挖国外网站遇到的一个真实案例。
一个后台的某个功能点,存在存储过程sql注入,使用单引号测试,发现他报错了。
ERROR:[Microsoft][ODBC sql server Driver][SQL Server]Procedure or function 'proc_*' expects parameter '@linked', which was not supplied.
这个报错很特别,和我平时看到的sql server报错信息不一样,我第一时间去谷歌搜索了下这个报错信息,很快就找到了一篇文章。
很快我就知道这是个sql server的存储过程报错。
https://stackoverflow.com/questions/19703653/stored-procedure-or-function-expects-parameter-which-is-not-supplied
顺便推荐下stackoverflow,查看网站报错信息真的很方便,迅速帮你判断使用了哪些技术。
英语不好的小友不用担心,谷歌浏览器自带的翻译功能就够了。
话说回来,不通过谷歌搜索报错语句,通过单引号报错,其实就可能猜出来个大概。
因为报错了,所以先进行最常规的测试,我企图用最简单的方法让其报错出user/database等,尝试poc:
'and 1>user and'1'='1
'and user<0 and '1'='1
等
发现没有出user,甚至仍然报错,其实这是正常的。
后续测试发现,只要我在后面添加内容,他就会一直报错,不允许添加过多的注入payload:
我开始从报错注入,转为布尔类型注入测试:
'and iif(user like '%',1,1) and'1'='1
类似这样的payload,结局是泪目的,语句又是各种报错。
这样搞的话思路肯定不对
先从理解sql报错信息开始,理解存储过程,sql server的存储过程的语法是这样的:
exec 任意语句 / exec 'sql语句'
它本身其实不需要任何单引号的闭合,因为不是字符串类型注入,重新调整测试,测试就是学习的过程,再次上payload:
13 if(substring(db_name(),1,1)='*')waitfor delay'0:0:3'
一顿fuzz,延时3s:
一顿操作下来,说明我的这个poc没有问题的。
一开始为啥踩了一个坑?认知问题,小友们也要警惕惯性思维导致的错误。
mysql下的if:if(条件,结果1,结果2)
sql server下的if:if(条件) 结果 else (结果)
这里误以为sql server的if也是和mysql的if使用一样,其实完全不一样,sql server等同mysql if函数的是iif函数。
我们知道,sql server报错有个很爽的技巧就是基于类型错误:int varchar,尝试报错出db_name()。
报错注入poc:
13 if(1=0/db_name())waitfor delay'0:0:1'