首页 > 安全 > 网站安全 >

搜索型注入原理详细解析

2011-06-08

作者:菲&王兴东  本文已发表在黑客x档案 转载注明作者 以前自己刚接触注入的时候看教程上那些大牛在注入点输入 union selec ,user(), 就能爆出初需要的信息,感觉很牛X那时候自己是个超级菜菜后来经过自己研究,终于弄明白

作者:菲&王兴东


本文已发表在黑客x档案 转载注明作者

以前自己刚接触注入的时候看教程上那些大牛在注入点输入 union selec ,user(), 就能爆出初需要的信息,感觉很牛X那时候自己是个超级菜菜后来经过自己研究,终于弄明白了原理,把我的理解写出来和当是像我一样菜的菜鸟共享少走点弯路。

SQL注入原理

关于注入的形成由于程序员在编写代码的时候对获取的值过滤不严,直接带入数据库查询而产生的。这样我门就可以精心构造sql语句达到攻击的目的就形成了注入,我用自己写的一个带搜索型注入的ASP.NET脚本帮大家理解。



测试环境: ASP.NET+ SQL server2005



____ASP.NET代码:

protected void Button1_Click(object sender, EventArgs e) { string connuser= @"Data Source=PC-200908050033SQLEXPRESS;InitialCatalog=hacker;Integrated Security=True"; string sql=string.Format("SELECT * from sqltest where names like%{0}%",TextBox1.Text);//注入形成的主要原因,TextBox1.Text没有经过任何处理就带入到了Sql语句 SqlConnectionconn = new SqlConnection(connuser); conn.Open(); SqlCommand comm= new SqlCommand(sql, conn); SqlDataReaderreder =comm.ExecuteReader(); while(reder.Read()) { Label2.Text +=reder[0].ToString() + " " +reder[1].ToString() + " " +reder[2].ToString() + " " + reder[3].ToString() + "<br>"; } conn.Close(); }


______数据库:

数据库建库建表代码我就不贴出来了,数据库我会打包跟大家就不贴代码了为黑X节省点版面 ,关于数据库的结构如图1

Admin表保存管理员账户密码信息,sqltest 保存用户信息



No1…..漏洞形成分析

漏洞形成

string sql=string.Format("SELECT * from sqltest where names like %{0}%",TextBox1.Text)

SqlConnection conn= new SqlConnection(connuser);

conn.Open();

SqlCommand comm = newSqlCommand(sql, conn);

TextBox1.Text 的值是用户输入要查询的关键字,然后带到Sql语句里执行,TextBox1.Text的值没有经过任何处理就带到了数据库查询,注入漏洞也就产生了,



No2….脚本中用到的搜索sql语句分析

语句如下

SELECT * from sqltest where names like%要查询的关键字%

解释下:“%”匹配任何字符, “like” 的意思就是像

比如我们在搜索框输入关键字 “张”那么SQL语句就变成了

SELECT * from sqltest where names like%张%

这条SQL语句的意思就是,查询 names列里面的数据带有关键字“张”的。如图2

如果我们在输入关键字的时候不是输入的关键字“张”而是精心构造的SQL,并且对于输入的关键字也没有过滤注入就形成了,现在不明白注入原理的朋友应该明白了把。



No3….关于漏洞的利用测试

现在我以一个入侵者的角度来模拟一下入侵,演示怎么非用“union select”语句爆用户名密码,和在DB和SA权限下怎么获取webshell..

作为一个入侵者首先要判断是否存在注入我们在搜索框输入“张% and 1=1 and %=”查询的结果如图3

其实这个时候脚本中的查询SQL语句是这样的:

“SELECT*from sqltest where names like%张%and1=1and%=%”现在彻底明白注入的原理了吧.

然后输入“张% and 1=2 and %=”查询结果如图4

两次查询出来的结果不同确定存在注入。

接下来判断下字段长度在搜索框输入“张% and 1=1 and %=% order by 4 --”

返回正常页面如图5

输入“张% and 1=1 and %=%order by 5 --”的时候返回错误如图6



可以确定字段数为4个,到这时候入侵者会先爆破出后台密码然后后台获取Webshell

我们接着输入“张% and1=1 and %=% union select 1,2,3,4--”就返回了字段在页面相应的位置如图7

下面我们来模拟爆破管理员密码Admin表里面保存了用户名和密码, “adminPass”是密码列“adminName”用户名列 “adminId”用户ID列 , 我们是测试知道“Admin”表里这些列的名称,在实际的入侵中只能一个一个的去猜表名和列名,还有就是在用“Union select”查询的时候需要注意类型匹配比如“Admin”表中的第一列是“adminId”是 int类型而 sqltest表中的第一列“Names”列是varchar类型如果我们让他们两个去匹配就会出错,如果我们在搜索框输入:“张% and1=1 and %=% union selectadminId,adminName,adminPass,4 from admin--”

让Names 列去匹配adminid列就会出错如图8

Sqltest 表中的Age列是int类型我们把adminId列换到对应age列的位置然后输入:

“张% and1=1 and %=% union select adminPass,adminName,adminId,4from admin--”这样就不会出错了因为这两个列都是int类型就会把密码,用户名,用户ID,的值都爆出来了如图9

由于我没有写后台就不跟大家演示后台获取Webshell 了希望大家谅解。

相关文章
最新文章
热点推荐