seccon2016 web300 writeup

この記事は、↓の11日目の記事です。

www.adventar.org

前の記事は

https://wiki.mma.club.uec.ac.jp/mizunashi_mana/TIL/advent-calendar/2016/mma-techtalk

です。

MMA所属とかじゃないんですけど、@hyr3kに知り合い多いし心はMMAと言われて書くことになりました。 ネタがないのでseccon2016のwriteupを記事にしようと思います。 (@h-otterも書いてって言ってたしちょうどいいかな)

seccon2016予選、vulsで出ようと思ってたのですが、お仕事で残念ながらオンサイト行けなかったので今日早朝からweb問だけ見てみようと思い一人で孤独に100年ぶりくらいにCTFやりました。

1ついい感じの問題解いたのでwriteup書こうかなとおもったのですが、本当は書く予定なかったのでburpの消してなかった画面の情報と記憶だけを頼りに書いてます。なのでコードとかは残ってないし雑に書いてますごめんなさい。

web 300 writeup

問題のサイトを開くと、実行ファイルをアップロードすると実行結果が返ってくるサイトが表示される。

127.0.0.1:81/authedにアクセスしろって書いてあるため、とりあえず curl -v http://127.0.0.1:81/

そうすると select.cgi があるらしく、そっちへcurlする。

サイトを見てみると、 curl -v http://127.0.0.1:81/select.cgi?txt=a って感じでaってファイルが読めたけどなんだこいつとなる。

ここで、curl -v file:///etc/httpd/conf/httpd.conf が見れたためしばらく眺めてサーバーの全容を把握。

追記:なんかメモにファイルの中身があったので貼り付け。

curl: (7) couldn't connect to host

ServerTokens ProductOnly


ServerRoot "/etc/httpd"


PidFile run/httpd.pid

Timeout 60


KeepAlive Off


MaxKeepAliveRequests 100


KeepAliveTimeout 15

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

<IfModule worker.c>
StartServers         4
MaxClients         300
MinSpareThreads     25
MaxSpareThreads     75 
ThreadsPerChild     25
MaxRequestsPerChild  0
</IfModule>

Listen 127.0.0.1:81
#Listen 81
Listen 80


LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so


Include conf.d/*.conf


User apache
Group apache


ServerAdmin root@localhost

UseCanonicalName Off

DocumentRoot "/var/www/html"

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>


<Directory "/var/www/html">

    AllowOverride All

    Order allow,deny
    Allow from all

</Directory>


<IfModule mod_userdir.c>

    UserDir disabled
</IfModule>


DirectoryIndex index.html index.html.var index.cgi

AccessFileName .htaccess


<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>


TypesConfig /etc/mime.types

DefaultType text/plain

<IfModule mod_mime_magic.c>
    MIMEMagicFile conf/magic
</IfModule>
HostnameLookups Off

ErrorLog logs/error_log
LogLevel warn

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog logs/access_log combined


ServerSignature On


Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
    #Options Indexes MultiViews FollowSymLinks
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<IfModule mod_dav_fs.c>
    DAVLockDB /var/lib/dav/lockdb
</IfModule>
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>


IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif /core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif
ReadmeName README.html
HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

ForceLanguagePriority Prefer Fallback

AddDefaultCharset UTF-8

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz


AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

AddHandler cgi-script .cgi

AddHandler type-map var

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml


Alias /error/ "/var/www/error/"

<IfModule mod_negotiation.c>
<IfModule mod_include.c>
    <Directory "/var/www/error">
        AllowOverride None
        Options IncludesNoExec
        AddOutputFilter Includes html
        AddHandler type-map var
        Order allow,deny
        Allow from all
        LanguagePriority en es de fr
        ForceLanguagePriority Prefer Fallback
    </Directory>

</IfModule>
</IfModule>


BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully


#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
#
# NOTE: NameVirtualHost cannot be used without a port specifier 
# (e.g. :80) if mod_ssl is being used, due to the nature of the
# SSL protocol.
#


<VirtualHost *:80>
    DocumentRoot /var/www/html-outer
    ServerName outer
    CustomLog logs/outer-access_log combined
</VirtualHost>
<Directory "/var/www/html-outer">
    AllowOverride AuthConfig
    Options Indexes ExecCGI
    Order allow,deny
    Allow from all
    Deny from 127.0.0.1
#    Order deny,allow
#    Deny from all
#    Allow from 210.225.95.129
</Directory>

<VirtualHost 127.0.0.1:81>
#<VirtualHost *:81>
    DocumentRoot /var/www/html-inner
    ServerName inner
    CustomLog logs/inner-access_log combined
</VirtualHost> 
<Directory "/var/www/html-inner">
    AllowOverride AuthConfig
    Options Indexes ExecCGI
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

.htaccess見れば終わりだという気持ちになり、 curl -v http://127.0.0.1:81/select.cgi?txt=.htaccess%00みたいな感じで気合いで探す。(catやcurlで探してもpermissionがアレで見れなかった)

↑ここまでの作業が全体を通して一番時間かかった。

(たしか) ../.htaccess くらいにファイルがあって、それを開くと /var/www/html-inner/authed/.htpasswd があるので見るとログイン情報が keigo:test とかで入れたはず。

basic認証すると、

b.txt
c.txt
sqlinj/

みたいな感じで情報があったので、sqlinj/以下を見る

CGIファイルがあって、getするとナンバー情報みたいなのが返ってくるので [1-100]?no=4822267938 みたいな感じでgetできて、そこでいろいろ(めっちゃ時間とかした)やってたらsqliできて、スペースが弾かれてた?気がしてコメントかなんかで代用してsqliteのテーブルに flags っていう超怪しいものを見つける。 そこを見ると、フラグが書いてあった。やったね。

感想

フラグでて提出しようとしたらvulsのオンサイトで集まってる方が僕より先に解いてたらしく、終わりでーすという気持ちになりました。 久しぶりにCTFの問題解けてよかったです。次はオンサイトで集まりたい。