SQL注入篇:SQL 注入靶场练习【实例3】


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

SQL 注入靶场练习【实例3】

0x01 前言

0x02 操作演示

补充知识点

针对上述为什么端口为空能成功绕过

0x03 分析抓包过程


            

              【实例3】靶场传送门:http://117.167.136.245:10181

                实例3使用到了抓包和CSRF伪造的知识点

SQL 注入靶场练习【实例3】

0x01 前言

      实例2中,我们拿到密码后,虽然在admin路径中成功登录后台,但那竟然是一个假后台!
      不过没关系,CE拿【御剑后台扫描工具】扫描到了多个疑似后台的地址的路径,扫描出来的目录如下:

      http://117.167.136.245:10181/admin123/login.asp

      http://117.167.136.245:10181/admin123/admin.asp

      http://117.167.136.245:10181/admin/Login.asp

      http://117.167.136.245:10181/admin/admin.asp

      http://117.167.136.245:10181/admin/conn.asp

      一个个尝试,发现另一个后台登陆地址( admin123 ),然而登陆(输入之前破解的账号和密码,账号admin/welcome)上去后……尤里竟然发现这个管理系统能识别登录者的身份……

SQL注入篇:SQL 注入靶场练习【实例3】_第1张图片

 

0x02 操作演示

1. 尝试着在请求这个sysadmin_view.asp资源的时候改变ip地址,以达到内网访问的效果。那么怎么样实现内网访问最简单呢?当然是本地访问,只需要将host和referer的ip改成一致,使用工具BurpSuite

SQL注入篇:SQL 注入靶场练习【实例3】_第2张图片

2. 使用Burp 抓包该报绕过

注:前面的源代码主要思路:

1. 首先读取referer,如果为空则表示是从地址栏直接输入的地址,而不是正常请求得到的,那么报错;

2. 如果有值,接着读取host并且在前面拼接上http://,

3. 然后如果referer有冒号则意味着有端口号,那么读取端口号拼接在curl,然后再拼接上当前文件名)的倒数第六行的if语句,首先InstrRev这个函数是从字符串的右边开始找到首次出现“/”的位置,并返回从左便开始数的这个位置的索引值;

4. 而left函数是返回该字符串从左开始到这个索引值的字串;最后的lcase函数则是将大写转化为小写字母。

      所以这行代码的功能其实是比较curl--http://127.0.0.1:81/admin123和comeurl--http://127.0.0.1:8001/admin123是否一致,所以其实就是必须host的ip、port和referer的ip、port一致才行

SQL注入篇:SQL 注入靶场练习【实例3】_第3张图片

3. 在修改IP的时候,其实直接去掉host和referer的端口号,也是可以成功的,因为两者端口号为空但ip一致,在程序中是没有逻辑问题的。

清空浏览器缓存,重新再来一次

SQL注入篇:SQL 注入靶场练习【实例3】_第4张图片

4. 通过Burp 抓包将Host和Referer的端口号去掉

SQL注入篇:SQL 注入靶场练习【实例3】_第5张图片

5. 我们已知程序中只判断了host的ip、port和referer的ip、port是否一致,那么是不是任意ip和port只要两者保持一致就可以成功绕过?我们通过实践操作来证明

1)Host和Referer的IP一样,但端口都为空,能成功绕过

SQL注入篇:SQL 注入靶场练习【实例3】_第6张图片

2)Host和Referer的IP一样,但HOST端口是随意取的,只要Referer端口为空,一样能成功绕过

SQL注入篇:SQL 注入靶场练习【实例3】_第7张图片

3)Referer和Host 的IP一样但端口不一样,绕不过去。

SQL注入篇:SQL 注入靶场练习【实例3】_第8张图片

补充知识点

发起一个ajax请求时,request header里面有三个属性会涉及请求源信息。

场景可能有:

  • 处理跨域请求时,必须判断来源请求方是否合法;
  • 后台做重定向时,需要原地址信息;

1. Host

      描述请求将被发送的目的地,包括,且仅仅包括域名和端口号
      在任何类型请求中,request都会包含此header信息。

2. Origin

      用来说明请求从哪里发起的,包括,且仅仅包括协议和域名
      这个参数一般只存在于CORS跨域请求中,可以看到response有对应的header:Access-Control-Allow-Origin

3. Referer

      告知服务器请求的原始资源的URI,其用于所有类型的请求,并且包括:协议+域名+查询参数(注意,不包含锚点信息)

      因为原始的URI中的查询参数可能包含ID或密码等敏感信息,如果写入referer,则可能导致信息泄露。

针对上述为什么端口为空能成功绕过

      • 1. 程序只判断了Rost的ip、port和Referer的ip、port是否一致,没对输入的ip和port校验是否跟系统版本一致,端口为空默认为反向代理到默认端口,所以端口为空存在绕过的可能。

      • 2. 我们请求的服务域名里的端口任意但只要相同即可绕过,我再想,这会不会像是端口转发一样的机制?正如我们一里面所说代码只校验了端口号是不是一样,但前提是服务器没有禁用所有的端口,所以我们只要Host和Referer 使用相同的端口即可绕过。我也不太清楚是不是这样的,只是个人理解,如果有人懂的话,欢迎指出,谢谢!

      • 3. 我个人尝试了一下,Host有端口,但Referer 端口为空,也存在绕过,我猜测referer 端口为空,请求的资源信息,会默认为Host 的端口

 

0x03 分析抓包过程

登录界面,点击登录

POST/HTTP/1.1并没有向浏览器请求具体的资源,这一行的作用只是和服务端进行确认,当前通信协议的版本为http1.1。这是一个POST请求包,一般都出现在表单提交,再看后面的资源名字,应该就是在向服务端提交填写的表单进行验证。没有必要对它进行修改,于是我直接点击了发送Forward,如下图。

SQL注入篇:SQL 注入靶场练习【实例3】_第9张图片

以get方式去请求default.asp的资源,那么此时表单应该已经验证通过了,default顾名思义就是一个默认需要的资源。

继续点击Forward 放过包

SQL注入篇:SQL 注入靶场练习【实例3】_第10张图片

页面发生了变化--title变成了企业网站管理系统,而页面中也出现了一些元素和样式,但是仍然没有看到主体。

继续点击Forward 放过包

SQL注入篇:SQL 注入靶场练习【实例3】_第11张图片

此时的请求包里请求的是LeftTree.asp。联想到之前的出错页面,应该就是在请求左边的那一列东西后就开始报错,这样的话,当时报错的地方也不是左边

继续点击Forward 放过包

SQL注入篇:SQL 注入靶场练习【实例3】_第12张图片

左侧出现了导航栏区域。此时的请求包又请求了,下一个资源--sysadmin_view,我猜测很有可能和刚才的错误有关

SQL注入篇:SQL 注入靶场练习【实例3】_第13张图片

好的,成功报错!这就意味着刚才我放行的那个sysadmin_view.asp非常重要了。

但是浏览器又在请求下一个包了,有参数是menu=top。再看看第一次出错时候的页面,是不是发现现在少了点东西,没错,少了那个大大的标题。

于是我继续放行,注意我截图的时候已经不是第一次做题了,每次最好先清理浏览器缓存,并且每次请求的文件顺序可能会不一样,如下图。

SQL注入篇:SQL 注入靶场练习【实例3】_第14张图片

    果然返回了完整的页面,并且浏览器不再请求资源,如下图。

SQL注入篇:SQL 注入靶场练习【实例3】_第15张图片

 

参考链接:

                https://www.zkaq.org/t/1049.html

 


我不需要自由,只想背着她的梦

一步步向前走,她给的永远不重


你可能感兴趣的:(SQL注入篇:SQL 注入靶场练习【实例3】)