chore: 尝试切换到 ali oss

This commit is contained in:
camera-2018
2023-04-21 01:59:02 +08:00
parent 9a5d376115
commit 3cf4715781
81 changed files with 416 additions and 416 deletions

View File

@@ -34,7 +34,7 @@ def check_pass(username, password):
`users` 表中查出 `username` 对应的 `password` 的哈希值,将其与用户传入的密码哈希值进行比对,若相等则意味着用户传入的密码与数据库中储存的密码相吻合,于是返回准许登录
![](static/boxcnHiNBWN86AR4AvSSsUVwSWb.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnHiNBWN86AR4AvSSsUVwSWb.png)
那么问题来了,在语句
@@ -144,7 +144,7 @@ mysql> select group_concat(id,username separator '_') from users;
现在我们传入 `Liki4'` 这个字符串
![](static/boxcn8TrpE02fnPV7dFzkmnHiAe.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn8TrpE02fnPV7dFzkmnHiAe.png)
很遗憾,报错了,这个查询因为 SQL 语句存在语法错误而无法完成。
@@ -154,7 +154,7 @@ mysql> select group_concat(id,username separator '_') from users;
那如果我们传入 `Liki4';#` 这个字符串,那么在拼接后的查询又是什么结果呢
![](static/boxcnbAKreqEeZxOYQuQMtZbd9d.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbAKreqEeZxOYQuQMtZbd9d.png)
很显然,`#` 号将原本语句的 `';` 注释掉了
@@ -166,7 +166,7 @@ mysql> select group_concat(id,username separator '_') from users;
`raw_sql_danger' UNION SELECT password FROM users WHERE username = 'Liki5';#`
![](static/boxcniDohuM3F8FbMqz7YSC0Y5g.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcniDohuM3F8FbMqz7YSC0Y5g.png)
<strong>真是惊人的壮举!我完全不认识这个叫 Liki5 的家伙,但我居然知道了他的密码对应的哈希值!</strong>
@@ -273,7 +273,7 @@ if __name__ == "__main__":
接下来我们进行一次常规查询
![](static/boxcnpCCmEi6LIKNi0UqEkXfJ8g.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnpCCmEi6LIKNi0UqEkXfJ8g.png)
可以看到我们成功从数据库中查出了 `username``password`,并显示在返回中
@@ -293,7 +293,7 @@ def query(username):
...
```
![](static/boxcnbaW15gnJc1O9Iv9WXqJxPc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbaW15gnJc1O9Iv9WXqJxPc.png)
可以看到,实际执行的语句为
@@ -307,7 +307,7 @@ SELECT * FROM users WHERE username = '123' UNION SELECT 1, 2;#'
构造语句 `123' UNION SELECT DATABASE(), @@version;#`
![](static/boxcnDeDp5yPE7W4KX9ByBl9ovh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnDeDp5yPE7W4KX9ByBl9ovh.png)
我们就能看到返回中包含了当前数据库名与当前数据库版本
@@ -317,13 +317,13 @@ SELECT * FROM users WHERE username = '123' UNION SELECT 1, 2;#'
> `information_schema` 库是一个 MySQL 内置数据库储存了数据库中的一些基本信息比如数据库名表名列名等一系列关键数据SQL 注入中可以查询该库来获取数据库中的敏感信息。
![](static/boxcnkwvSnhKBhlHNLOSthgul9d.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnkwvSnhKBhlHNLOSthgul9d.png)
我们可以发现,当前数据库中还存在一张叫 `secret` 的表,让我们偷看一下里面存的是什么
构造语句 `123' UNION SELECT 1, secret_string FROM secret;#`
![](static/boxcn3kfhJ79ByNML2Z1Q1MwRye.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn3kfhJ79ByNML2Z1Q1MwRye.png)
好像得到了什么不得了的秘密 :-)
@@ -363,7 +363,7 @@ if __name__ == "__main__":
这样一来我们就只能知道自己是否登录成功,并不能看到查询返回的结果了
![](static/boxcn2seUNESHkLC9PYvDp0vFbe.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcn2seUNESHkLC9PYvDp0vFbe.png)
那也就是说,我们无法直观地查看数据库中的数据了,即便查出了不该查的也看不到了 :-(
@@ -396,7 +396,7 @@ else:
> rlike 是 MySQL 中的一个关键字,是 regex 和 like 的结合体
![](static/boxcnJEeAKow3ZhUSvbL4FQXxOh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJEeAKow3ZhUSvbL4FQXxOh.png)
这里实际执行的语句就变成了
@@ -404,13 +404,13 @@ else:
SELECT password FROM users WHERE username = 'Liki4' AND if(@@version rlike '^5',1,0);
```
![](static/boxcnJ3jImTQcMUOWJclTACj74e.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJ3jImTQcMUOWJclTACj74e.png)
```sql
SELECT password FROM users WHERE username = 'Liki4' AND if(@@version rlike '^8',1,0);
```
![](static/boxcnEDPFbKQ6iaM5WhHWUWmI5d.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnEDPFbKQ6iaM5WhHWUWmI5d.png)
也就是说,当 if 语句中的条件为真时,这个查询才会将 password 查询出来
@@ -480,7 +480,7 @@ if __name__ == "__main__":
exp()
```
![](static/boxcnXyMaLh26lkNuAPiQVHuaNg.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnXyMaLh26lkNuAPiQVHuaNg.png)
####
@@ -523,7 +523,7 @@ if __name__ == "__main__":
如果想要让布尔盲注不可用,我们可以做一个假设,假设我们并不知道账户的密码,也就无法通过登陆验证,这个时候就失去了布尔盲注最大的依赖,也就无法得知 if 表达式的真或假了。
![](static/boxcndxf4WEQQQEXspS7GwNKI6J.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcndxf4WEQQQEXspS7GwNKI6J.png)
但,真的没办法了吗?
@@ -600,7 +600,7 @@ if __name__ == "__main__":
exp()
```
![](static/boxcnsStdHC5VmBylyx6S7hakEb.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnsStdHC5VmBylyx6S7hakEb.png)
### 基于报错的 SQL 注入 (TODO)
@@ -640,7 +640,7 @@ if __name__ == "__main__":
main()
```
![](static/boxcnl67uDDSIdh3J7y7Jxjk0dc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnl67uDDSIdh3J7y7Jxjk0dc.png)
这样一来如果 SQL 语句执行报错的话,错误信息就会被打印出来
@@ -671,9 +671,9 @@ MySQL 8.0 doc: [https://dev.mysql.com/doc/refman/8.0/en/](https://dev.mysql.com/
`Liki4';INSERT INTO users VALUES ('Liki3','01848f8e70090495a136698a41c5b37406968c648ab12133e0f256b2364b5bb5');#`
![](static/boxcnrMIc2m6oubxC86CEtw1jMe.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnrMIc2m6oubxC86CEtw1jMe.png)
![](static/boxcnVRdntvakiTpt7nP8JhKKfc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnVRdntvakiTpt7nP8JhKKfc.png)
INSERT 语句也被成功执行了,向数据库中插入了 Liki3 的数据
@@ -776,7 +776,7 @@ INSERT 语句也被成功执行了,向数据库中插入了 Liki3 的数据
在 GB2312、GBK、GB18030、BIG5、Shift_JIS 等编码下来吃掉 ASCII 字符的方法,可以用来绕过 `addslashes()`
`id=0%df%27%20union%20select%201,2,database();`
![](static/boxcnaRtyUGC0sX3btnFIgpDCob.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnaRtyUGC0sX3btnFIgpDCob.png)
### information_schema 被过滤
@@ -795,7 +795,7 @@ select table_name from mysql.innodb_index_stats where database_name=<em>database
select table_name from mysql.innodb_table_stats where database_name=<em>database</em>();
```
![](static/boxcnbMtjAq8osStjcSbFuIdDSc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnbMtjAq8osStjcSbFuIdDSc.png)
##### MySQL 5.7 的新特性
@@ -812,7 +812,7 @@ select table_name from sys.schema_table_statistics_with_buffer where table_schem
select table_name from sys.x$schema_table_statistics_with_buffer where table_schema=<em>database</em>();
```
![](static/boxcnV68mdIQmovJwczDsOc53gc.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnV68mdIQmovJwczDsOc53gc.png)
### 无列名注入
@@ -820,7 +820,7 @@ select table_name from sys.x$schema_table_statistics_with_buffer where table_sch
`select a,b from (select 1 as a, 2 as b union select * from users)x;`
![](static/boxcnI3jJNlLqq4f7WqRKGEWTeh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnI3jJNlLqq4f7WqRKGEWTeh.png)
## 超脱 MySQL 之外 (TODO)

View File

@@ -45,7 +45,7 @@ ESP 定律的原理在于利用程序中堆栈平衡来快速找到 OEP.
还是上一篇的示例, 入口一句 `pushad`, 我们按下 F8 执行 `pushad` 保存寄存器状态, 我们可以在右边的寄存器窗口里发现 `ESP` 寄存器的值变为了红色, 也即值发生了改变.
![](static/boxcnJdWqlHmhlvB471dIGT4GEh.png)
![](https://hdu-cs-wiki.oss-cn-hangzhou.aliyuncs.com/boxcnJdWqlHmhlvB471dIGT4GEh.png)
我们鼠标右击 `ESP` 寄存器的值, 也就是图中的 `0019FF64`, 选择 `HW break[ESP]` 后, 按下 `F9` 运行程序, 程序会在触发断点时断下. 如图来到了 `0040D3B0` 的位置. 这里就是上一篇我们单步跟踪时到达的位置, 剩余的就不再赘述.