作者:Ha1Lan
0x01 相关概念
SQL注入:将用户输入的数据未经过滤或过滤不严当做代码执行。
0x02 漏洞发现过程
测试范围:

打开主站随便找找点点就发现了某链接存在报错

且在页面上用弱口令 test 123456登录进应用程序
发现某请求包存在SQL注入(sqlmap能直接跑出来)


但是本篇文章的重点不在这里
因为测试范围声明可以接收子域
所以,直接用谷歌语法 site:xxx.com (简单点、直接点)
假装有图

选择下方不同的子域,点击进去进行测试(以百度为例)

直到发现了某个子域,右上角有个登录的按钮

0x03 重头戏来了
登录口长这样

随手输入 admin 123456
提示我用户名或密码无效

那么 admin' 123456
admin'' 123456呢


凭着以往的经验,已经可以确认这里有注入了 (这里建议在burp里面进行注入测试,因为有些系统对于注入测试的回显在页面上的区别不大) 是时候切换到burp了 这里建议在整个测试过程中,将所有http/s 请求都代理到burp,方便查看历史包记录 有蛮多请求包是我们在页面上看不到的,而往往这些请求包存在问题的可能性很大 (忽略我的老年人字号)(因为这样子就不用我去打码了)

And 'a'='a
And 'a'='b
发现页面无区别

这是为什么呢?(卖个关子)

(条件成立时返回:未知错误;条件不成立返回:用户名或密码无效)
好,基本的轮子有了,现在开始构造我们的poc
首先判断用户名有多少位
'or+length(user())='23


然后,爆破用户名(前9位)
poc:admin'or+substr(user(),1,1)='T
得到用户名
TESTADMIN………..
注入参数:UserName

按照SRC漏洞收取规则,SQL注入到这一步就可以提交漏洞了。
同时,在忘记密码处也存在SQL注入,注入参数一样都为UserName。(同一个参数)
0x04 总结
1.对于跟数据库有交互的地方,都可以测试一下是否有SQL注入
2.手工注入的时候,前期可以从先构造基础的poc,如and 1=1,然后该poc有作用的话,就开始变形,and length(user())=x and substr(user(),1,1)=x等。假如and 1=1等基础poc 不起作用的话,就得考虑是不是被过滤了相关关键字(and)或符号(=),当然也有可能是本文中这种情况(and关键字不行,而or关键字却可以,具体原因这里不做解释,实在想不通的可以去百度搜索and or 的区别),最后根据你测试的结果,去绕过(如果and被过滤了,我该怎么用其他的东西来替代它)。
文章评论