您现在的位置是:娱乐 >>正文
sql漏洞检测
娱乐72613人已围观
简介去年帮一个做电商的朋友看服务器日志,发现有条请求长这样:/product.php?id=1%20AND%201=1。他当时还纳闷,说这页面返回的内容跟正常访问一模一样,怎么就被盯上了。问题就出在这—— ...
去年帮一个做电商的洞检朋友看服务器日志,发现有条请求长这样:/product.php?洞检id=1%20AND%201=1。他当时还纳闷,洞检说这页面返回的洞检内容跟正常访问一模一样,怎么就被盯上了。洞检问题就出在这——正常,洞检恰恰是洞检最大的不正常。
SQL注入这东西,洞检原理不复杂。洞检开发者写了一句 SELECT * FROM products WHERE id = $id,洞检本意是洞检让用户传个数字进来。但用户偏不。洞检他传 1 AND 1=1,洞检数据库照单全收,洞检把后半句当成了SQL逻辑的洞检一部分。于是条件恒真,整张表的数据都可能被拖走。更狠的是传 1; DROP TABLE products--,分号一断,后面直接删表。数据库不会分辨哪部分是“用户输入”,哪部分是“代码”,它只认语法。
手工检测:先学会用眼睛找裂缝
我习惯从URL参数入手。拿 id=1 做基准,改成 id=1',页面如果报数据库语法错误,比如 You have an error in your SQL syntax,基本就中奖了。没报错也别急着走,换成 id=1 AND 1=2,看返回内容是否跟 id=1 有差异。差异明显,说明注入点存在。这招在MySQL+PHP的老系统上命中率极高,我试过十来个站,至少三四个能测出来。
盲注更磨人。页面不报错、不回显数据,只能靠布尔条件或时间延迟猜。比如 id=1 AND SLEEP(5),如果请求卡了五秒才返回,说明SLEEP执行了。这时候就得写脚本,一个字符一个字符地跑数据库名、表名、字段名。手工做一次完整盲注,没个把小时下不来。
工具能提速,但别当拐杖
sqlmap是绕不开的。一条 sqlmap -u "http://target.com/product.php?id=1" --dbs,它自己判断注入类型、选payload、跑字典。我用它测过一个存在二次注入的CMS,手工测了半小时没进展,sqlmap跑 --level=5 --risk=3,十二分钟出了库名。但工具不是万能的。有次遇到WAF拦截,sqlmap的默认payload全被拦,换成 --tamper=space2comment 才绕过去。工具给的便利,前提是你知道它在干什么。
防御:参数化查询不是可选项
见过太多代码用字符串拼接写SQL。PHP里 $sql = "SELECT * FROM users WHERE name = '$name'",这种写法只要 $name 来自用户输入,就是敞着门。换成PDO预处理:$stmt = $pdo->prepare("SELECT * FROM users WHERE name = ?"); $stmt->execute([$name]);,参数和语句分离,注入就无从下手。Java的PreparedStatement、Python的cursor.execute带参数,逻辑一样。别信什么“我过滤了单引号”——宽字节注入、编码绕过,手段多的是。参数化查询是根治,转义和过滤只是创可贴。
还有个坑:有些老系统用ORM,但底层还是拼SQL。我见过一个项目,Hibernate的HQL里直接塞了用户输入,照样注入。ORM不是免死金牌,关键看最终生成的SQL长什么样。打开日志,把执行的语句打出来看一眼,比什么都实在。
检测SQL漏洞,本质是跟开发者的偷懒较劲。一个参数没处理好,整台数据库就悬了。手工测、工具扫、代码审,三条路都得走。别指望一个sqlmap扫完就收工,也别觉得用了预处理就万事大吉。去年那个电商朋友,后来把全部查询改成了参数化,日志里再没出现过 AND 1=1 这种请求。但我知道,只要还有人写 "WHERE id = $id",这漏洞就永远不会消失。
Tags:
上一篇:为什么男朋友喜欢看我洞洞
下一篇:怎么黑进网赌平台
相关文章
渗透端口
娱乐凌晨两点,我对着一个IP地址发呆。目标是个老旧的医疗系统,端口扫描结果像张病历单——21、22、80、443、3306,外加一个诡异的8080。前几个端口硬得跟铁板似的,SSH拒绝一切密码尝试,Web ...
【娱乐】
阅读更多漫蛙manwa网页版
娱乐```html 漫蛙manwa网页版最让人意外的地方,是它压根没打算做成一个“标准”的漫画网站。点开首页,没有轮播大图推荐,没有算法猜你喜欢,甚至连个像样的导航栏都显得朴素。但偏偏就是这种粗糙感,让很 ...
【娱乐】
阅读更多下列哪些web服务器可以作为jsp服务器
娱乐Tomcat 算一个。严格说,Tomcat 本身是 Servlet 容器,不是完整意义上的 web 服务器,但把它当 JSP 服务器用完全没问题。装好 JDK,解压 Tomcat,把写好的 .jsp ...
【娱乐】
阅读更多