标题 | 简介 | 类型 | 公开时间 | ||||||||||
|
|||||||||||||
|
|||||||||||||
详情 | |||||||||||||
[SAFE-ID: JIWO-2024-2463] 作者: 凉笙 发表于: [2019-09-02] [2019-09-02]被用户:凉笙 修改过
本文共 [417] 位读者顶过
前言 web安全渗透测试和CTF等其他安全开发,安全研究,安全测试等等,代码能力是必备的。因此这里推荐大家在学习课程之余,可以去w3shool或者慕课网学习PHP和Python。 [出自:jiwo.org] 至于那些实在无力学习编程的同学来说!问题也不是那么大,也是能够胜任企业基本的渗透测试项目的。 接下来分享代码审计中SQL注入审计技巧以及以DVWA来给介绍几种不同的注入类型。 DVWA中low等级的SQL注入 由于会涉及到代码,因此这里就不会太过于侧重于代码方面,而是指出最直接导致SQL的地方!如下面的php代码所示。第一个红框使用的是$_REQUEST的传输参数。$_REQUEST — HTTP Request 变量默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组。也就是说,再不关心是get过来的还是post,总之要取得某一个键的值,就用$_REQUEST就可以了。
主要的问题就是出现在第二个红色框,$query = "SELECT first_name, last_name FROM users WHERE user_id = ‘$id’;"; 这里的$id变量直接由$id = $_REQUEST[ ‘id’ ];得到,没有进行任何过滤。因此就可以通过输入恶意的字符串来进行sql注入,接下来再来看看另一段代码。
这段代码采用的是$_GET传输的方式,直接将参数$name拼接到了数据库查询语句中了,没有做任何处理。由此根据代码也可以断定,这将可能导致一个字符型的SQL注入,也就是GET类型的注入。 搜索型的注入 首先看下列代码,这里采用的还是$_GET传输的方式,而且在$query="select username,id,email from member where username like '%$name%'";中,$name使用了%%进行了变量的模糊匹配,在代码中也没有出现其他过滤敏感参数的字符,因此只需要考虑如何闭合%$name%这个变量即可,然后植入恶意代码即可。
DVWA中sql注入的high等级的源代码 下面的代码跟之前看到的其实差不多。最主要的是在红色框内,传输的id值使用了$_SESSION,对变量id进行了会话变量检查登录。而且使用PHP应用session时,将session中的数据存储在服务器上,然后通过客户端传来的sessionID识别客户端的信息,并提取信息。因此也在一定程度上减少了SQL注入的风险。
数据库语句中添加了LIMIT1,以此来控制只输出一个结果,但是可以通过#将其注释掉,注释完之后接下来的步骤就跟平常的手工注入一样啦! 特别说明:利用sqlmap在跑high等级的dvwa的时候,可能会跑不出来或者是跑出来是会出错的!所以建议手工玩一下就行啦! 审计源码时需要注意的点 在审计SQL注入的时候,需要多关注几个点 第一点:搭建源码,了解哪些功能与数据库有互动 先把整套源码搭建起来,然后点击网站的各个功能,了解哪些功能需要与数据库进行互动。比如说:登录页面和登录之后的页面、注册页面、后台的增删改查功能等等。这些功能点经常会出现SQL注入的地方。 第二点:源码功能分析&查看数据库语句的封装方式 在第一点的基础上,已经熟悉了整个网站的架构以及功能之后,就要根据源码来对其功能进行分析啦!看看进行传输的哪个变量值是通过什么类型的传输方式,比如说:REQUST,GET,POST等等。 看完传输的方式之后呢?接下来就要看看数据库语句的封装方式啦!看看查询这个id值的时候,是否过滤了什么,是否添加了什么函数进行加密传输等等。然后根据其封装的方式、过滤的方式等等,再进行相关的闭合、注释,然后尝试添加数据库攻击代码! 第三点:结合代码和已经搭建好的网站,不断地调试。 如果存在报错情况,就根据网站返回的情况进行修改。如果没有报错,尝试了所有的测试语句之后都不动如山的话,那百分之70以上说明,抱歉,可能真的没有存在注入的情况,放弃吧! 刷洞技巧分享 首先在语法中随机找一些语法,放到7kb工具中,设置一下采集页数为100,1000也行。然后选择搜索引擎,就开始点击收集
收集完成之后,记得要边收集边把链接保存下来。然后收集完成之后直接导出来,然后直接把收集的这些链接导入到超级SQL注入工具中;
接下来就可以开始点击扫描注入啦,工具就会自动地去测试之前收集的链接。记住,收集越多,存在注入就越多,存在注入的链接会放在这个红色框内;
然后用sqlmap去验证一下即可了,千万别跑到表之后的数据去,只需要跑到能够看到系统和数据库版本即可!这样是没有任何危险的;
验证成功之后呢?当然就是开始输出报告,提交到cnvd,补天,和漏洞盒子这三个平台上就可以啦。虽然不能赚大钱,但是这样能够赚更多的经验,而且面试的时候也会给自己加分。 最后,注意!!! 工具跑出来之后,用sqlmap只需要验证到能够看到系统版本和数据库版本即可,切勿再跑表之后的内容了! |