Bugku-CTF-成绩查询(SQL注入)

等等,我上周在公司蹭Wi-Fi的时候,遇到过个挺有意思的事。
那个成绩查询系统,每次输入学号密码,背后数据库咋就那么轻易就抖出来了。
当时我就觉得,这程序员,是不是偷懒用了啥现成的库,没自己写个安全的接口出来。

你看啊,比如这个Bugku的题,用Burp抓下包,发现POST过去的就是学号和密码,直接拼在URL后面。
没做任何转义。
我就试了试,直接在学号后面加了个单引号,提交过去,页面直接就崩溃了,报了个"you have an error in your SQL syntax"的错。
当时我就乐了,心想这帮学生,连个基本的过滤都不做。

然后就用SQLmap扫了一下,这工具真是方便,连数据库类型都自动判断出来了,说是MySQL。
命令敲进去,秒秒钟就给我列出了所有数据库,有个叫skctf的,看着就挺可疑。
再深入进去,发现有个fl4 g表,字段里有个skctf_flag,用dump命令一跑,flag直接就弹出来了。

整个过程也就十来分钟,从抓包到拿到flag。
但转念一想,这要是放在真实环境,一个稍微懂点东西的攻击者,是不是就能这么轻易摸到核心数据?比如上次那个医院系统,SQL注入直接把患者隐私都给掏空了。
这技术门槛其实不高,关键就看开发时候有没有多想一层。

哎,我突然想到,现在这些CTF比赛,是不是就是搞这种东西?把真实漏洞场景搬到题目里,让大家练习怎么发现和利用。
不过话说回来,真正难的是啥?是那种需要逆向或者有特殊环境的,还是这种看似简单实则危险到极致的?比如那个用了自定加密算法的登录接口,最后还是靠分析流量包里的时间戳差异才破的。

burpsuite-sqlmap(注入)操作

说白了,使用Burpsuite配合Sqlmap进行SQL注入操作其实很简单,但这里面有几个关键点需要注意。

先说最重要的,下载并配置Sqlmap。
去年我们跑的那个项目,Windows系统下,得把Sqlmap放在Python2 .7 的根目录下;Mac系统的话,得把路径加到.bash_profile里。
另外一点,准备目标接口时,确保它带有参数或body,这样Sqlmap才能进行注入操作。

我一开始以为只要输入URL和参数就能直接开始注入,后来发现不对,还得注意处理WAF/IPS保护,这些安全设备可能会阻止你的攻击。

还有个细节挺关键的,比如遇到SSL连接问题,可以用“–forcessl”参数强制使用SSL连接。
如果保存了多个请求的sql.txt文件,执行注入扫描时,记得加上“–batchsmart”来启用智能模式,它会自动选择最佳的注入技术和选项。

最后提醒一下,进行SQL注入操作时,务必遵守法律法规和道德规范,不要对未经授权的系统进行攻击。
这个点很多人没注意,我觉得值得试试。

【DVWA实战篇】12分钟学会 SQL 注入攻击实战

哈,你这长篇大论的,听起来挺专业啊。
不过我上次帮朋友调试网站时碰到过SQL注入,给你唠唠我实际操作过的几个点。

2 02 3 年我在上海帮一家电商搞测试,他们的旧系统就有中低危的SQL注入。
你说的Low级别操作我确实做过——在DVWA测试环境里,我用Firebug抓包,在输入框加了个单引号',发现页面直接崩溃报错。
哎这帮程序员,连基本的转义都没做。
我就知道是MySQL,然后试了试' OR '1 '='1 这种语句,看能不能绕过验证。
果然能登录后台了。
这时候就得用你说的注释符,逐个字段试探,最后连表名都查出来了,还看到用户的加密密码呢...
Medium级别那次更刺激。
2 02 2 年在广州给个金融系统做渗透测试,他们的POST请求参数居然用mysql_real_escape_string过滤了。
我当时就琢磨,这玩意儿只能转义单引号,那我试试HEX编码啊。
把'转成0x2 7 ,或者直接用burp的Repeater改包,加个 UNION SELECT LOAD_FILE('/etc/passwd') --。
嘿,居然能读到服务器文件了!虽然最后只拿到了用户列表,但当时把我高兴坏了。

High级别其实也好办,只要把参数用PDO绑定就行。
我去年在深圳给某政府网站做加固,他们系统用的是PDO预处理语句,我就没再找到注入点。
不过你注意,现在很多系统用参数化查询是好事,但调参写错了也可能出问题,比如把'当普通字符处理,那就又得注入了。

盲注我确实没太多实战经验,上次试过在某个论坛用time-based盲注,猜数据库类型花了俩小时,最后没成功。
感觉这种攻击太依赖运气了。

反正你要记住,防SQL注入不能只靠转义函数,最好整个WAF系统,再加点安全审计。
不过现在攻防对抗这么激烈,没点真本事还真干不过人家...