网站菜单

某厂商-SQL注入

作者:Ha1Lan

0x01 相关概念

SQL注入:将用户输入的数据未经过滤或过滤不严当做代码执行。

0x02 漏洞发现过程

测试范围:
某厂商-SQL注入的照片 - 1
打开主站随便找找点点就发现了某链接存在报错
某厂商-SQL注入的照片 - 2
且在页面上用弱口令 test 123456登录进应用程序
发现某请求包存在SQL注入(sqlmap能直接跑出来)
某厂商-SQL注入的照片 - 3
某厂商-SQL注入的照片 - 4
但是本篇文章的重点不在这里
因为测试范围声明可以接收子域
所以,直接用谷歌语法 site:xxx.com (简单点、直接点)
假装有图
某厂商-SQL注入的照片 - 5
选择下方不同的子域,点击进去进行测试(以百度为例)
某厂商-SQL注入的照片 - 6
直到发现了某个子域,右上角有个登录的按钮
某厂商-SQL注入的照片 - 7

0x03 重头戏来了

登录口长这样
某厂商-SQL注入的照片 - 8
随手输入 admin 123456
提示我用户名或密码无效
某厂商-SQL注入的照片 - 9
那么 admin' 123456
admin'' 123456呢
某厂商-SQL注入的照片 - 10
某厂商-SQL注入的照片 - 11
凭着以往的经验,已经可以确认这里有注入了
(这里建议在burp里面进行注入测试,因为有些系统对于注入测试的回显在页面上的区别不大)
是时候切换到burp了
这里建议在整个测试过程中,将所有http/s 请求都代理到burp,方便查看历史包记录
有蛮多请求包是我们在页面上看不到的,而往往这些请求包存在问题的可能性很大
(忽略我的老年人字号)(因为这样子就不用我去打码了)
某厂商-SQL注入的照片 - 12
And 'a'='a
And 'a'='b
发现页面无区别
某厂商-SQL注入的照片 - 13
这是为什么呢?(卖个关子)
某厂商-SQL注入的照片 - 14
(条件成立时返回:未知错误;条件不成立返回:用户名或密码无效)
好,基本的轮子有了,现在开始构造我们的poc
首先判断用户名有多少位
'or+length(user())='23
某厂商-SQL注入的照片 - 15
某厂商-SQL注入的照片 - 16
然后,爆破用户名(前9位)
poc:admin'or+substr(user(),1,1)='T
得到用户名
TESTADMIN………..
注入参数:UserName
某厂商-SQL注入的照片 - 17
按照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被过滤了,我该怎么用其他的东西来替代它)。
显示评论 (0)

文章评论

相关推荐

Thinkphp5挖洞记录

闲来无事,盒子上申请了下项目,发现二个thinkPHP的站,版本还都挺老,记录一下反弹shell的过程 盒子项目申请一过,准时准点往前冲,发现测试范围只有一个子域名,稍微过了一下,前排明显的漏洞应该大…

记一次某SRC的漏洞挖掘

起因: 最近闲来无事,无意中发现某src搞活动双倍奖励,一下激起了我的动力,双倍奖励啊,又到了低危小王子浑水摸鱼的时候了。 过程: 话不多说,直接开干,子域名走一波。发现某域名命名很奇怪,然后titl…