MojoJobs 盲 SQL 注入利用脚本详解
在 Web 安全测试中,盲 SQL 注入一直是个经典且棘手的场景。如果目标应用在注入点没有直接回显错误信息,而是通过条件判断的页面差异来泄露数据,就需要依赖盲注技术来逐位提取信息。
下面这个 Perl 脚本就是一个针对 mojoJobs.cgi 的盲注利用工具。它通过构造 SUBSTRING 和 CHAR 的比较条件,逐字符抓取数据库中的管理员密码(MD5 哈希值)。
脚本核心逻辑
脚本首先解析命令行参数:host 为目标域名,-d 指定有效的 cat_a 参数值,可选 -p 设置 HTTP 袋里。之后进入一个 32 位循环(MD5 长度),对每一位依次尝试数字(0-9)和小写字母(a-z)。
关键函数 istrue2 构造如下请求:
https:///mojoJobs.cgi?mojo=1&cat_a= and (SUBSTRING((SELECT password FROM member LIMIT 0,1),,1))=CHAR()
如果页面中包含特定字符串 tourterms.pdf,则说明条件为真,当前字符匹配成功,程序输出该字符并继续下一位。如果所有尝试都失败,则认为该位不存在(通常不会发生)。
这种方式利用了页面返回结果的一致性来判断注入条件,属于经典的布尔盲注。值得注意的是,该脚本没有使用多线程或优化策略,而是逐字符顺序爆破,在真实测试中可能需要耐心等待。
使用示例
perl script.pl www.target.com / -d 10
其中 -d 10 需要根据实际页面中 cat_a 的有效值来填写。脚本运行后会在终端实时打印出 MD5 哈希的每一位,最终拼合完成。
从技术角度看,这个脚本结构清晰,适合初学者理解盲注的自动化实现。但实际渗透测试时,建议使用更成熟的工具(如 sqlmap)来提高效率并规避风险。
防护建议
对于开发者,防范此类攻击的关键在于:对所有用户输入进行严格过滤,尤其是整数型参数如 cat_a,应强制转换为数字类型。同时,避免在错误信息中泄露数据库结构,并使用参数化查询或预编译语句。
话说回来,盲注虽然慢,但一旦存在,数据泄露只是时间问题。安全无小事,从源头封堵才是正道。
