找到
33
篇与
xiaoeyv
相关的结果
- 第 4 页
-
Dijkstra C++模板 邻接矩阵(无向图)模板 Dijkstra-邻接矩阵-堆优化.cpp // // Created by xiaoeyv on 2025/6/22. // #define maxn 2510 #define INF 0x3f3f3f3f #include <bits/stdc++.h> using namespace std; int n, m; int dis[maxn], vis[maxn]; int g[maxn][maxn]; int s; int main() { cin >> n >> m; memset(g, 0x3f, sizeof(g)); for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; // 无向图 g[u][v] = g[v][u] = min(g[u][v], w); } // cin >> s; s = 1; memset(dis, 0x3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); dis[s] = 0; for (int i = 1; i <= n; i++) { int minn = INF, minp = -1; for (int j = 1; j <= n; j++) { if (!vis[j] && dis[j] < minn) { minn = dis[j]; minp = j; } } if (minp == -1) break; vis[minp] = 1; for (int j = 1; j <= n; j++) { if (g[minp][j] != INF) { dis[j] = min(dis[j], dis[minp] + g[minp][j]); } } } if (dis[n] == INF) cout << "INF"; else cout << dis[n]; }Dijkstra-邻接表-堆优化 // // Created by xiaoeyv on 2025/6/22. // #define maxn 2510 #define maxm 200010 #include<bits/stdc++.h> using namespace std; int n,m; int dis[maxn], vis[maxn]; vector<pair<int, int>> g[maxn]; int s; int main() { memset(dis, 0x3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); cin>>n>>m; for(int i=0;i<m;i++) { int u,v,w; cin>>u>>v>>w; g[u].emplace_back(v,w); g[v].emplace_back(u,w); } priority_queue<pair<int, int>, vector<pair<int, int>>, greater<> > pq; s = 1; dis[s] = 0; pq.emplace(0,s); while(!pq.empty()) { int u = pq.top().second; pq.pop(); if (vis[u]) continue; vis[u] = 1; for (auto [v, w] : g[u]) { if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; pq.emplace(dis[v], v); } } } if (dis[n] == 0x3f3f3f3f) cout << "INF" << endl; else cout << dis[n] << endl; }Dijkstra-结构体-堆优化 // // Created by xiaoeyv on 2025/6/22. // #define maxn 2510 #define maxm 200010 #define INF 0x3f3f3f3f #include<bits/stdc++.h> using namespace std; int n, m; int dis[maxn], vis[maxn]; struct Edge { int to, w; }; vector<Edge> g[maxm]; int s; int main() { cin >> n >> m; for (int i = 1; i <= m; i++) { int u, v, w; cin >> u >> v >> w; // 无向图 g[u].push_back({v, w}); g[v].push_back({u, w}); } // cin >> s; s = 1; memset(dis, 0x3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); dis[s] = 0; priority_queue<pair<int, int>, vector<pair<int, int> >, greater<> > q; q.emplace(0, s); while (!q.empty()) { int u = q.top().second; q.pop(); if (vis[u]) continue; vis[u] = 1; for (auto &e: g[u]) { int v = e.to, w = e.w; if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; q.emplace(dis[v], v); } } } if (dis[n] == INF) cout << "INF"; else cout << dis[n]; } -
【CTF】Day 1 重操旧业! [极客大挑战 2019]EasySQL 题目截图图片 进入后发现是账号登录的界面,尝试一些特殊字符串,如单引号,发现报错: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'admin'' at line 1 这说明存在注入点,我们输入账号为以下值,密码随意输入后,即可拿到 flag。 Payload test' or 1;# [极客大挑战 2019]Havefun 进去后是一只猫,点击后没什么反应,只能先审计源代码。在根目录发现如下代码: <!-- $cat=$_GET['cat']; echo $cat; if($cat=='dog'){ echo 'Syc{cat_cat_cat_cat}'; } -->Havefun截图图片 直接在 URL 内带参,即可得到 flag。 Payload /?cat=dog[HCTF 2018]WarmUp 进去后是个滑稽,老样子先审计代码,发现 HTML 注释内带着一个文件名:source.php,访问后发现输出代码: 源码截图图片 <?php highlight_file(__FILE__); class emmm { public static function checkFile(&$page) { $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; if (! isset($page) || !is_string($page)) { echo "you can't see it"; return false; } if (in_array($page, $whitelist)) { return true; } $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); if (in_array($_page, $whitelist)) { return true; } echo "you can't see it"; return false; } } if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file']) ) { include $_REQUEST['file']; exit; } else { echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />"; } ?>代码审计 checkFile 函数 判断 page,如果为空或不为字符串,则返回 false。 检测 page 是否在白名单列表内,如果在,则返回 true。 新建 _page 变量,拼接 page 和问号,然后截取问号前的内容,再次判断是否在白名单。还会进行一次 urldecode 提高兼容性。 在白名单列表里还有 hint.php,访问后提示:flag not here, and flag in ffffllllaaaagggg,说明 flag 在一个名为 ffffllllaaaagggg 的文件内。 根据逻辑,可以传入白名单文件名并在后面加问号,这样 checkFile 通过校验,而后面的 include 则能拼接访问到真正的 flag。 Payload /?file=source.php?../../../../../ffffllllaaaagggg[ACTF2020 新生赛]Include 进入后只有个超链接 tips,点击后访问 ?file=flag.php,输出 Can you find out the flag?。 题目提示了是 include,于是尝试 index.php,发现输出重复,说明重复调用,需要加密输出。 尝试 php://input 被拦截,提示 hacker。于是使用 php://filter: ?file=php://filter/read=convert.base64-encode/resource=index.php解码后代码如下: <meta charset="utf8"> <?php error_reporting(0); $file = $_GET["file"]; if(stristr($file,"php://input") || stristr($file,"zip://") || stristr($file,"phar://") || stristr($file,"data:")){ exit('hacker!'); } if($file){ include($file); }else{ echo '<a href="?file=flag.php">tips</a>'; } ?>同理,读取 flag.php 即可获取 flag。 Payload /?file=php://filter/read=convert.base64-encode/resource=flag.php[ACTF2020 新生赛]Exec 进去后有一个输入框,可以进行 ping IP 操作,下面有回显。 exec截图1图片 题目提示 exec,推断是 ping IP,于是构造命令: exec截图2图片 127.0.0.1&&cd /&&ls看到回显中有 flag,直接查看: Payload 127.0.0.1&&cat /flag[GXYCTF2019]Ping Ping Ping 进入后提示 /?ip=,输入 ?ip=127.0.0.1,输出了 ping 结果。 在 IP 后加入 ls 成功执行,发现有 index.php 和 flag.php。 尝试 cat flag.php 提示不能有空格,于是用 $IFS 代替,结果发现不能使用 flag 关键字。于是想到用 base64 执行: ?ip=;a=Y2F0IGZsYWcucGhw;echo$IFS$a|base64$IFS-d|bash提示 bash 不能用,尝试了花括号、小括号、星号都不行,最后用反引号成功。 Payload /?ip=;a=Y2F0IGZsYWcucGhw;echo$IFS$a|base64$IFS-d[SUCTF 2019]EasySQL 进入后是一段话:Give me your flag, I will tell you if the flag is right. 下方有个输入框。 输入 flag 后提示 NONONO;输入双引号也提示 NONONO,推断有屏蔽词,比如 and、or、from。 输入数字时返回 Array ( [0] => 1 ),说明可以查表,但语句中不能出现屏蔽词。 查阅 WP,有两种方法: 利用 SQL 查询逻辑 数字输入有回显,字符串无回显,说明存在 OR 逻辑。SQL 语句大概是: select cmd || flag from flag当 cmd=*,1 时: select *,1 || flag from flag这样 1 短路第一个 flag,成功查询出 flag。 利用 sql\_mode sql_mode 控制 SQL 语法,PIPES_AS_CONCAT 会将 || 当作字符串连接符,而不是逻辑或。 Payload *,11;set sql_mode=PIPES_AS_CONCAT;select 1今天学到很多,睡觉睡觉。 -
记一次路由器和DNS互相DDoS 今天笔者用了家人的笔记本,由于访问学术网站困难,想把电脑的 DNS 改成家里内网自建的,但是担心家人带出去后使用无法上网,于是笔者就到路由器的后台,将路由器的上游 DNS 改成了自建。 过了一会儿,笔者发现笔记本上网变慢了,本来以为是偶发性情况,结果后面越来越慢,甚至上不了网,但是访问 IP 秒开,于是笔者怀疑是 DNS 出了问题,开始着手诊断,如图: DNS 查询超时图片 好家伙,基本所有的 DNS 查询都超时了。之后,笔者尝试内网、城域网、腾讯云 DNS,都与上图一致。 刚开始笔者以为是电脑的网卡不行了,可是后来一想,貌似是改完路由器上游 DNS 后才开始出现的问题。由于路由器没有 DNS 日志,于是笔者查看了内网 DNS 日志,如图: 内网 DNS 日志 1图片 内网 DNS 日志 2图片 不看不知道,一看吓一跳,这路由器是要造反,竟然对我的自建 DNS 发起了 DDoS 攻击!就当我以为这是路由器的漏洞时,我发现了亮点: 路由器查询上游图片 查询的上游竟然是路由器!由于笔者设置的 DNS 是 119.29.29.29,按道理不应该走路由器 DNS 查询。如果上游是路由器,那么由于路由器的上游是自建 DNS,那么就会导致一个死循环,无法查询到真正的解析,这也是这场 DDoS 最好的解释。 于是,笔者在仔细翻看 AdGuardHome 的设置界面时,发现了下面的选项: AdGuardHome 设置图片 原来如此!如果在这里不设置 Private rDNS,就默认为路由器 DNS,导致回环。随便填入一个可用的 DNS,这场 DDoS 也就结束了。