当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
SQL 注入靶场练习【实例3】
0x01 前言
0x02 操作演示
补充知识点
针对上述为什么端口为空能成功绕过
0x03 分析抓包过程
【实例3】靶场传送门:http://117.167.136.245:10181
实例3使用到了抓包和CSRF伪造的知识点
实例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)上去后……尤里竟然发现这个管理系统能识别登录者的身份……
1. 尝试着在请求这个sysadmin_view.asp资源的时候改变ip地址,以达到内网访问的效果。那么怎么样实现内网访问最简单呢?当然是本地访问,只需要将host和referer的ip改成一致,使用工具BurpSuite
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一致才行
3. 在修改IP的时候,其实直接去掉host和referer的端口号,也是可以成功的,因为两者端口号为空但ip一致,在程序中是没有逻辑问题的。
清空浏览器缓存,重新再来一次
4. 通过Burp 抓包将Host和Referer的端口号去掉
5. 我们已知程序中只判断了host的ip、port和referer的ip、port是否一致,那么是不是任意ip和port只要两者保持一致就可以成功绕过?我们通过实践操作来证明
1)Host和Referer的IP一样,但端口都为空,能成功绕过
2)Host和Referer的IP一样,但HOST端口是随意取的,只要Referer端口为空,一样能成功绕过
3)Referer和Host 的IP一样但端口不一样,绕不过去。
发起一个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 的端口
登录界面,点击登录
POST/HTTP/1.1并没有向浏览器请求具体的资源,这一行的作用只是和服务端进行确认,当前通信协议的版本为http1.1。这是一个POST请求包,一般都出现在表单提交,再看后面的资源名字,应该就是在向服务端提交填写的表单进行验证。没有必要对它进行修改,于是我直接点击了发送Forward,如下图。
以get方式去请求default.asp的资源,那么此时表单应该已经验证通过了,default顾名思义就是一个默认需要的资源。
继续点击Forward 放过包
页面发生了变化--title变成了企业网站管理系统,而页面中也出现了一些元素和样式,但是仍然没有看到主体。
继续点击Forward 放过包
此时的请求包里请求的是LeftTree.asp。联想到之前的出错页面,应该就是在请求左边的那一列东西后就开始报错,这样的话,当时报错的地方也不是左边
继续点击Forward 放过包
左侧出现了导航栏区域。此时的请求包又请求了,下一个资源--sysadmin_view,我猜测很有可能和刚才的错误有关
好的,成功报错!这就意味着刚才我放行的那个sysadmin_view.asp非常重要了。
但是浏览器又在请求下一个包了,有参数是menu=top。再看看第一次出错时候的页面,是不是发现现在少了点东西,没错,少了那个大大的标题。
于是我继续放行,注意我截图的时候已经不是第一次做题了,每次最好先清理浏览器缓存,并且每次请求的文件顺序可能会不一样,如下图。
果然返回了完整的页面,并且浏览器不再请求资源,如下图。
参考链接:
https://www.zkaq.org/t/1049.html
我不需要自由,只想背着她的梦
一步步向前走,她给的永远不重