文档介绍:该【Web安全漏洞及代码审计(第2版):靶机SQL注入漏洞与审计PPT教学课件 】是由【熊大妈妈】上传分享,文档一共【21】页,该文档可以免费在线阅读,需要了解更多关于【Web安全漏洞及代码审计(第2版):靶机SQL注入漏洞与审计PPT教学课件 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。项目4
靶机SQL 注入
漏洞与审计
Web 安全漏洞及代码审计(第2版)(微课版)
01 项目知识准备
漏洞介绍
SQL注入漏洞是最常见的
也是被利用最多的漏洞,长期位于OWASP TOP 10中的第一位。无论是采用何种编程语言的Web 应用框架, 都具有交互性,并且大多是由数据库驱动的,而在PHP的Web 应用框架中,大部分都是结合MySQL数据库来 保存相关数据的。
SQL 注入就是在程序开发过程中
程序开发人员未对用户输入的内容进行任何过滤或者过滤不严格,而直接将其拼接到SQL语句中,使数 据库误认为用户输入的内容是正确的SQL语句并将其放入数据库引擎中执行。
漏洞危害
因为利用SQL注入漏洞可以直接对数据库进行操作,所以它的危害不言而喻。攻击者可以通过SQL注入来获 取数据库中存放的机密、敏感数据,篡改管理员账户、密码,修改数据库中部分字段的值,嵌入木马链接, 进行挂马攻击等,在权限较大的情况下,还可以通过SQL注入写入Webshell 或者执行系统命令等。
目前,使用较多的SQL 注入工具就是sqlmap。 它是一款开源的跨平台SQL 注入工具,可以针对不同类型的数 据库进行SQL注入。它支持5种注入方法:基于布尔的盲注、基于时间的盲注、基于错误信息的注入、联合查 询注入、堆查询注入。
审计思路
SQL注入一般出现在与数据库交互的地方
如查询页面、用户登录页面、订单处理页面等,还可能存在于HTTP 数据包头部的X-Forwarded-For ( 简 称 XFF) 和Client-IP 中,而且通常一些网站的防注入功能会记录请求端的真实IP 地址并写入数据库,所以在审 计过程中可以着重关注这几个点。
01 项目知识准备
任务1 SQL注入漏洞分析
任务目标
能够进行SQL注入漏洞的分析
了解台(CNVD) 的原创漏洞证书,激发对漏洞挖掘专业的兴趣和创新精神。
任务实施
这里的普通注入指的是最容易被利用的漏洞。可以通过联合查询的方式查询数据库, 而产生注入的原因包括:编写的代码在处理程序和数据库交互的过程中,使用字符 拼接的方法构造SQL语句;对用户输入的可控参数没有进行校验过滤或者过滤不严 格,就将其直接拼接到SQL语句中。 sqltest数据库中的user表信息如图4-1所示。
user ***@sqltest localhost)-表
文件 编辑 查看 窗口 帮助
□导入向导 导出向导 筛选向导 田网格查看 表单
id au e word ***@
3 username pa5sword ******@
admi
emai
admi
pas
dmin
sernam
2 guest guest ******@
02
通过分析上述测试代码可以发现,$id接收$_GET['id']的值,并
且未进行任何校验就将其代入数据库,如果构造其他语句并执行, 就可以对其进行注入。
执行SQL语句“/?id=-1 UNION SELECT
1,database(),user(),4--+”, 结果如图可以看到原SQL语句的 结果已经被更改并执行。原本的SQL 语句已经被注入更改,同时, 从上面的测试代码中可以看到一些数据库操作的关键字,如
mysql_connect 、mysql_query 、mysql_fetch_array等。在进 行代码审计时,要多注意这些关键字。
02 任务1 SQL注入漏洞分析
//
Sid=S_GET[id];
Sconnection=mysql_connect("localhost","root","root");
mysql_select_db(admin,Sconnection);
Ssq1="SELECT*FROMuser WHERE id-Sid";
Sresult=mysql_query(sql)or die("执 行MySQL 语 句 失 败 " .mysql_error();e
while(Srow=mysql_fetch_array(Sresult){
echo"ID:".Srow[id]."<br>";
echo” 用户名:" .Srow[usermame]."<br?";
echo" 密码:" .Srow[password]."<br>";
echo" 邮 箱 : "Srow[password]."<br";
mysql_close(Sconnection);↵
echo "SQL语句:"Ssql;
任务实施
SQL语句:SELECT'FROM user WHERE id=-2 UNION SELECT 1,database(),user(),4--
用户名:sqtest
02 任务1 SQL注入漏洞分析
在一般情况下,程序在注入时会经过一些代码层的防御而无法触发SQL注入漏洞,例如,在经过addslashes()、 mysql_escape_string()等函数过滤后,单引号等特殊字符会被转义,即在特殊字符前加上反斜线(\),如图 4-3所示。如果想要绕过转义,就需要先处理转义的字符,这里就会涉及宽字节注入。
← → C 食
①?id=1
ID:1
用户名:admin
密码:admin
邮箱:admin
SQL语句:SELECT'FROM user WHERE id=1"
//
Sid=addslashes(S_GET[id):
Sconnection=mysqL_cormnect("locahost"."root","root")↵
mysql_select dbCsqtest,Scnnection);
mysql_query("SET NAMES GBK'")
Ssql="SELECT*FROMuser WHEREid-Sid"
Sresult=mysql_query(Ssql)or die("执行MySQL 语句失败" mysql_eror)↵
while(Srow=mysql_fetch_array(Sresult)
任务实施
echo:Sronfpeswody””;
→echo "邮箱:"Srow[passwordj]."do>";
"<h"
…
→
echo
任务1 SQL注入漏洞分析
任务实施
此时指定GBK编码格式,并提交“/?id=1%df'UNION SELECT 1,database(),user(),4%20--+”, 这样参数id在传递到代码层时就会在单引号前加上反斜线进行转义。由于浏览器采用的是URL 编码格式,因此 传递的参数是%df%5c%27。 当输入“%df%27” 时,先使其经过单引号的转义变成%df%5c%27, 然后使用 数据库查询语句进行GBK 多字节编码(即一个中文占用2字节, 一个英文同样占用2字节且在汉字编码范围内两 个编码为一个汉字)。最后, MySQL 服务器会对查询语句进行GBK 编码,即将%df%5c 转换成汉字“運”,使 单引号逃逸出来,从而绕过转义造成注入漏洞,发挥作用,结果如图4-4所示。转换过程如下。用户输入内容 “%df%27”→ 经过过滤函数处理(反斜线转义) →%df%5c%27→ 设 置GBK 编码格式→吃掉转义符,形成新 的字节“運”→绕过转义符,闭合单引号。
用户名: admin
密码: admin
邮箱: admin
ID:1
用户名: sqltest
密码: ******@localhost
邮箱: ******@localhost
SQL 语句: SELECT'FROM user WHERE id=16V UNION SELECT 1,database(,user().4-'
02
一阶注入很容易被WAF、安全策略等检测到,所以虽然一阶注入可利用 的工具比较普遍,构造语句也非常多,但是大多数一阶注入会被过滤或 拦截。相对于一阶注入来说,二次注入可以在一定程度上绕过一些限制, 避免单引号、双引号和反斜线等的转义对构造语句的影响。
二次注入可以被理解为结合两个注入点来实现SQL 注入的一种方式。第 一个注入点会经过过滤或转义处理,如addslashes()函数会将参数中的 单引号等特殊字符转义。但是在将数据存储到数据库中时,攻击者写入 的数据会被还原,即反斜线转义符会被去掉,此时攻击者存储的数据就 会被认为是可信的。而且,在攻击者发现一个新的注入点并需要在数据 库中查询数据时,程序会直接从数据库中取出攻击者插入的恶意数据, 并未再次进行校验,这样就会造成SQL语句的二次注入。
02 任务1 SQL注入漏洞分析
header("Content- htm,;charset-utf-8")↵
if(lempty(SPOST[sutmirD{
Suemame-adslashesS POSTTusemameD.
Spassword=addslashes(SPOST[passwordD;
Semail-adslasbes(S POSTTemai).
Sconm=mysql_connect(localhost,root,troor)or die("执行MySQL 语句失败" mysql_errorO) mysql_select_db(sqltesr,Scon).
sremu-my4Lgey(Ss4g0o dic“执行MSQL 语句失败”myqLemaro)“
if(Sresult)
echo “注册失败”;
echo "NOT POST"
qi-"sELECT FROMuier WHEREid-sir"
任务实施
在注册页面中可以看到,在提交表单时,执行的SQL 语句中的单引号会被转义,如图4-5所示,但是对于实际 存储到数据库中的结果,反斜线转义符并不会被插入到数据库中,如图4-6所示。
当在查询页面查询数据时,程序会从数据库中取出插入的恶意数据,这样就会执行插入的恶意SQL 语句,造成 二次注入,结果如图4-7所示。图4-7
二次注入的整个流程为:将用户输入的内容(1')插入到数据库中→参数经过转义函数转义为1\'→输入的参数 在被写入数据库时被还原成1′→在其他位置查询数据库,取出数据(1')→取出的数据未经过校验就被直接引 用→造成二次注入。
02 任务1 SQL注入漏洞分析
SQL语句:INSERTINTO user(id,username,password,email)VALUES(6;Vunion select 1,user(),3,4F,23333,******@);注册成功
USERNAME:
PASSWORD:
点击提交□
id username
password
emil
admin
admin
******@
2 guest
guest
******@163com
3 username
pasword
******@
6'union select 1,user0,3,4#
23333 ******@
任务实施
saL:SELECT'FROM user WHERE usermame="union select 1,user0,3,4A1D:1
用户名:******@localhost
邮箱:3
search ID:
任务目标
能够进行SQL注入漏洞的代码审计
熟悉我国的网络安全等级保护制度。
任务实施
03 任务2 SQL注入漏洞代码审计
*站
YX CMS安装向导
#*R*
r
可 n E 器 海 o
m6及以
mni3xu
z
一an
1 . 四 s * * * 0 米
2 . auer SPA . WE nOm相大印共 - 个6妈84, PumA5K
加 一anoEP幼阳,ta wosPA的以,
4 . v o n s n s a n m ° , 用 出 个 A R , 新 1 5 1 、 南 地 2 习 n a , 均
m 6 , 0 s , t 四 a 的 a E , 为 r a m t
二 G
1 . 3 B 生 % m L 上 尊 干 m 8 来 , 位 实 片 鞋 开 国 相 版 R ,
2 . 家 可 t e n p e 件 的 .
3 、 该 用 e s , t a 5 0 T n 有 6 , m 工 保 的 * n a n 来 z 案 。
Ma ana8 saienanasaruKeu ns
Es*HEnnn *%r
3ME九D854, B58 - R5M场
四 上 入 T -
本任务使用YXCMS ,在下载源代码后,将压缩包解压缩到根目录中,访 问localhost,进 入“YXCMS 安装向导”的“协议”界面,如图4-8所示。