2021-09-09 · 2분
缓冲区溢出(BOF)
缓冲区溢出漏洞入门:它是什么、HackCTF #1 的 fgets(s, 45, ...) 往大小为 40 的缓冲区输入如何越过 s[40] 控制 v5,以及无界的 scanf("%s") 如何让你覆盖 SFP 和返回地址。
2021-06-06 · 4분
这篇文章发布已超过两年,内容可能已过时。
这个 LOS(Lord Of SQLInjection)是一个可以练习 SQL Injection 的 Web 黑客练习网站。
关于 SQL Injection,请读这篇 [黑客/Web 黑客] - SQL Injection ~嘿。

因为是第一关,逐行解读的话,14 行不太需要,从第 56 行开始解读……
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
一个我们不认识的 "preg_match" 映入眼帘,这是什么呢?
在 PHP 中用 preg_match 函数编写正则表达式。
第一个参数:编写正则表达式,
第二个参数:要搜索的字符串,
第三个参数:返回数组变量。把模式匹配中匹配到的值以数组形式保存。
什么是正则表达式?
请读 [黑客/Web 黑客] - 正则表达式 / 常用正则表达式!
因此,当用户输入的 id 值中存在 'prob'、''、'.'、'\' 这些值时,会出现 "No Hack ~~" 的画面。
而且看上面的 PHP 语句,可以看出输入是用 GET 方式接收的。用 GET 方式接收时,输入值会直接暴露在参数(URL)里。
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
第 7 行是我们见过很多次的 SQL 语句。是从数据库中查找所输入 id 和 pw 对应的值并存入 $query 的查询语句。
echo "<hr>query : <strong>{$query}</strong><hr><br>";
第 8 行的作用是把那条查询语句展示给我们!
$result = @mysqli_fetch_array(mysqli_query($db,$query));
第 9 行是把输入的 $query 值以数组形式存入 $result 的查询语句。
if($result['id']) solve("gremlin");
第 10 行似乎是:如果 $result ['id'] 里有值,就执行 solve("gremlin")。

再看一遍这段文字,是当 $result ['id'] 为真时就能解开的题!插入值的方法是在 URL 末尾写 "? id=值&pw=值" 这样。
那么就照前面学的试试 SQL Injection 吧?每个人得出的答案千差万别,无论用什么方法只要 Clear 就是正确的方法。用各种方法试试看!
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
看这条查询语句,如果我们输入 id=1234 pw=1234,就会变成 select id from prob_gremlin where id='1234' and pw='1234'
会像这样被输入。那么写 ' or 1=1 %23 呢?
select id from prob_gremlin where id='' or 1=1 #' and pw=''
如上 id 变为真,这题就会被 clear。
写 %23 时输出的咖喱句……我是说查询语句,你那边显示成什么样了?

应该像这样显示成了 #。这叫 URL encoding。
URL 编码(Encoding)
如上,%23 表示 #。用 # 的原因——看过我 SQL Injection 博客的人应该知道——是为了把后面的部分全部注释掉。
你可能会问 "'--' 不是注释吗?" 那也在我博客里 因为这里用的是 MYSQL,所以注释是 #。-- 在 Oracle、MSSQL 中生效。

就这样我们通关了第 1 关 gremlin!!!辛苦了~
+其他解法、小技巧
简单地把 id 和 pw 值都变为真就能解开。
如上可以得出多种解法!
URL Encoding 值可以通过网上的表和编码一个个确认,也可以通过网站获取。
例如可以通过 https://meyerweb.com/eric/tools/dencoder/ 这样的网站获取。
参考:
https://choseongho93.tistory.com/131
原文(韩语): tistory — 发布于 2021-06-06,已迁移至本博客。本翻译由 AI 协助完成。
…