网站首页 > 开源技术 正文
0x01 前言
非常感谢白帽子HackBraid同学一直坚持分享。:)接下来的时间交给HackBraid。
接白帽子分享之代码的艺术系列-第二篇,这里讲一些函数的错误使用会引发SQL注入的场景以及二次注入漏洞产生的原因。如果没看之前的内容,建议先看看前两篇。:)
0x02 准备
知识储备:php基础、MySql入门
工具:notepad++
服务器环境:wamp
测试代码和sql:
http://pan.baidu.com/s/1i54Oq25密码: bmu2
0x03 全局防护Bypass中篇的脑图
0x04 一些函数的错误使用导致SQL注入
一些常用函数像str_replace、stripslashes的错误使用会导致绕过addslashes函数的全局防护,首先来看str_replace函数,有时写程序会使用str_replace函数将参数中的单引号、括号等字符替换为空,使用不当就会引发注入问题。缺陷代码如下:
<?php
require_once('common.php');
$conn = mysql_connect('localhost', 'root', 'braid') ordie('bad!');
mysql_query("SETNAMES binary'");
mysql_select_db('test', $conn) OR emMsg("数据库连接失败");
$tmp_id = isset($_GET['id']) ? $_GET['id'] : 1;
$title = isset($_GET['title']) ? $_GET['title'] : 'news title';
//程序编写时直接用str_replace去掉id里的单引号
$id = str_replace("'",'',$tmp_id);
//sql查询语句通过id和titile两个条件进行查询
$sql = "SELECT * FROM newsWHERE id='{$id}' and title='{$title}'";
echo$sql;
$result = mysql_query($sql, $conn) ordie(mysql_error);
?>
浏览器输入
”
http://localhost/sqltest/streplace.php?id=1'&title=newstitle”,发现报错了,我们直接打印出执行的sql语句如下图:
发现参数id右边的单引号被反斜杠转义成字符了,说明又可以注入了。
简单分析下上面id参数的执行过程,-1’经过addslashes函数转义后变成了-1\’,然后再经过str_replace函数干掉了单引号变成了-1\,最后带入查询的语句才是下面这样:
SELECT*
FROMnews
WHEREid=
'1\'andtitle=
'news title'
反斜杠转义了sql查询语句里id后面那个单引号,导致title参数可以构造sql注入语句了,我们直接构造获取管理员账户密码的语句”
http://localhost/sqltest/streplace.php?id=-1'&title=unionselect1,2,concat(name,0x23,pass) from admin%23”
接下来我们再看下stripslashes函数,这个函数的定义是删除由addslashes 函数添加的反斜杠,所以很明显使用不当的话就会引发SQL注入。缺陷代码如下:
<?php
require_once('common.php');
$conn = mysql_connect('localhost', 'root', 'braid') ordie('bad!');
mysql_query("SET NAMES binary'");
mysql_select_db('test', $conn) OR emMsg("数据库连接失败");
$tmp_id = isset($_GET['id']) ? $_GET['id'] : 1;
$id = stripslashes($tmp_id);
$sql = "SELECT * FROM news WHERE id='{$id}'";
echo$sql.'<br />';
$result = mysql_query($sql, $conn) ordie(mysql_error);
?>
分析下参数id的执行过程,-1’经过addslashes函数转义后变成了-1\’,然后再经过stripslashes函数干掉了反斜杠变成了-1’,所以又可以愉快的注入了。
获取管理员账户密码的语句”
http://localhost/sqltest/stripslashes.php?id=-1‘union select 1,2,concat(name,0x23,pass) from admin%23”
0x05 二次注入产生的原因
二次注入也是一种很常见的sql注入,它涉及到入库和出库。假如我们注册了一个网站,填写个人资料后保存时数据库里执行类似”insert into test values(1,’braid’,’18’,’run’)”这种sql语句,代表我向数据库表test里插入昵称为braid,年龄18岁,爱好是run的一个操作。接下来看下单引号在这条语句执行过程和mysql中的变化:
假如昵称引入一个单引号为braid’,那么经过转义后入库的语句为”insert into test values(1,’braid\’’,’18’,’run’)”,然后我们看下mysql执行这条语句后数据库里内容变化:
我们执行一条查询语句后发现braid\’入库后变成了braid’,转义字符消失,所以在一些页面输出昵称的地方又可以构造注入语句获取管理员账户密码了~
今天的内容就这里啦,下一篇,我们继续。感谢你的转发和阅读。:)
301强烈推荐内容,想必您会喜欢:
长按二维码,关注301在路上。
微信:2036234
- 上一篇: 超级简单的搭建LAMP_lamp搭建服务器教程
- 下一篇: 自学网络安全多且杂,小白不知道从哪下手?
猜你喜欢
- 2025-10-02 屠龙之技 --sql注入 不值得浪费超过十天 实战中sqlmap--lv 3通杀全国
- 2025-10-02 dart系列之:实时通讯,在浏览器中使用WebSockets
- 2025-10-02 自学网络安全多且杂,小白不知道从哪下手?
- 2025-10-02 超级简单的搭建LAMP_lamp搭建服务器教程
- 2025-10-02 代码审计的艺术系列—第一篇_什么是代码审查
- 2025-10-02 白帽子分享之代码的艺术系列—第二篇
- 2025-10-02 新闻发布系统(源代码)_新闻发布系统功能模块图
- 2025-10-02 网络协议之:WebSocket的消息格式_websocket发送消息
- 2025-10-02 花生壳内网穿透+Windows系统,如何搭建网站?
- 2025-10-02 十八.XSS跨站脚本攻击原理及代码攻防演示(一)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)